如回溯所示,问题不在
main.py,而是在
module1.py:
Traceback (most recent call last): File "Z:Pythonmain.py", line 10, in <module> module1.cool() File "Z:Pythonmodule1.py", line 3, in cool print piNameError: global name 'pi' is not defined
换句话说, 在中module1
,没有全局名称
pi,因为您尚未将其导入。当您
from math import*在中执行操作时
main.py,这只是将所有内容从
math模块的命名空间导入
main模块的命名空间,而不是导入 每个 模块的命名空间。
我认为您在这里缺少的关键是每个模块都有自己的“全局”名称空间。刚开始时这可能有点令人困惑,因为在像C这样的语言中,所有
extern变量和函数都共享一个全局名称空间。但是一旦您克服了这个假设,Python的方式就很有意义了。
因此,如果要使用
pifrom
module1,则必须执行
from math import *in
module1.py。(或者,您可以找到其他方式注入它,例如,
module1.py可以做
from main import*,或者
main.py可以做
module1.pi =pi等。或者您可以塞入
pi魔术
builtins/
__builtin__模块中,或者使用各种其他技巧。但是显而易见的解决方案是
import在您所需要的地方进行操作。想要导入。)
附带一提,您通常不希望
from foo import*在交互式解释器或顶级脚本之外的任何地方做任何事情。有例外(例如,一些模块被明确设计为以这种方式使用),但是经验法则是要么
importfoo使用要么使用limited
from foo import bar, baz。



