2013-01-12 154 views
3

导出函数如果我有以下内容的模块/文件foo.py不从Python模块

from math import sqrt 

def foo(): 
    pass 

如果我将其导入另一个脚本,sqrt也模块foo内定义。

import foo  
dir(foo) 

的输出是

[..., # other things 
'foo', 
'sqrt'] 

如何避免这种情况?即,要么指定sqrt不被导出,要么仅导出特定功能 - 在这种情况下,仅导出用户定义的功能。我知道,对于用户定义的函数,您可以在模块内通过前缀下划线来私有地定义它们,但在这种情况下,它不是用户定义的函数,所以我不能用下划线前缀来定义它。

+3

为什么你需要防止这种情况?这是正常的python行为,您向模块提出了所有在其中定义的名称。 –

回答

4

它不是一个用户定义的函数,所以我不能用下划线进行定义:

如果你真的想避免导入特定的名称,你可以这样做字首。

是的,你可以:

from math import sqrt as _sqrt 

另一种方法是在功能范围只导入对象,你需要他们。

(虽然这可能会回答你的问题,我仍然不知道为什么你会想这样做,这两个选项是繁琐的,不会让你的代码看起来更好。)

5

你不能,但它不应该阻碍,它将被绑定到foo命名空间,如foo.sqrt。如果从math导入sqrt,它将是math.sqrt。这是命名空间的重点。在这种情况下

from foo import foo, bar, ...

1

你应该使用:

from math import sqrt as sqrt_m 
import foo 

所以,你可以使用

sqrt_m()mathsqrt()得到sqrtsqrt从获取