正如回溯所示,问题不在main.py中,而是在module1.py中:
Traceback (most recent call last):
File "Z:\Python\main.py", line 10, in
module1.cool()
File "Z:\Python\module1.py", line 3, in cool
print pi
NameError: global name 'pi' is not defined
换句话说,在module1中,没有全局名称pi,因为您没有在那里导入它.当您从main.py中的math import *进行操作时,它只是将数学模块命名空间中的所有内容导入主模块的命名空间,而不是导入到每个模块的命名空间中.
我认为你在这里缺少的关键是每个模块都有自己的“全局”命名空间.起初这可能有点令人困惑,因为在像C这样的语言中,所有外部变量和函数共享一个全局命名空间.但是一旦你超越了这个假设,Python的方式就变得非常有意义了.
因此,如果你想使用module1中的pi,你必须在module1.py中进行数学导入*. (或者你可以找到一些其他方式来注入它 – 例如,module1.py可以从主导入*,或者main.py可以执行module1.pi = pi等.或者你可以将pi填入魔法内置函数/ __ builtin__模块,或使用各种其他技巧.但显而易见的解决方案是在您想要导入的地方进行导入.)
作为旁注,除了交互式解释器或偶尔使用顶级脚本之外,您通常不希望从foo import *做任何事情.有一些例外(例如,一些模块明确地设计为以这种方式使用),但经验法则是导入foo或使用受限制的foo导入栏,baz.