全局和局部导入

3 投票
1 回答
5098 浏览
提问于 2025-04-15 18:52

我创建了一个模块,这个模块会在多个Python脚本中使用。它的结构如下:

主文件:

import numpy as np
from mymodule import newfunction
f = np.arange(100,200,1)
a = np.zeros(np.shape(f))
c = newfunction(f)

mymodule.py:

def newfunction(f):
    import numpy as np
    b = np.zeros(np.shape(f))
    return b

if __name__ == "__main__":
    import numpy as np

这个程序的功能你先不用在意,但我遇到的问题是,当我运行它的时候,出现了“NameError: global name 'zeros' is not defined”的错误。

我这里漏掉了什么呢?

1 个回答

3

mymodule.py 看不到:

  import numpy as np

语句。“import”语句在Python中和C++的#include不一样,它只是创建了一个包含被导入模块中对象的新字典。如果你想在这个字典里使用‘np’这个标识符,你需要明确地在里面导入它。

关于

 if __name__ == "__main__":
     import numpy as np

-- 只有在你把 mymodule.py 当作独立脚本执行时,这个才会被调用,而在这个问题中可能并不是这种情况。

编辑:

提问者修改了示例代码,在他的函数里添加了 import numpy as np,而我的回答是针对最初的问题。

撰写回答