【问题标题】:Importing globally and locally全球和本地进口
【发布时间】:2011-01-12 23:23:46
【问题描述】:

我创建了一个模块,它将在几个 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”。

我在这里错过了什么?

【问题讨论】:

  • 也许我在这里遗漏了一些东西,但是......为什么不将导入粘贴在 mymodule.py 的顶部?
  • 您的错误不可能来自您的代码:在任何地方都没有使用全局“零”。虽然有一个全局“范围”,所以这应该是错误:-)
  • 我也试过了......同样的错误:/我试图在模块顶部(函数外)和函数内本地插入“import numpy as np”。
  • @williamx:你需要使用np.arange,而不是arange
  • 在您最近的编辑之后,它对我有用。请发布您正在运行的代码,即复制粘贴它。

标签: python import module


【解决方案1】:

mymodule.py 没有看到:

  import numpy as np

声明。 Python 中的“import”语句不像 C++ 中的#include 那样工作,它只是创建包含在导入模块中的对象的新字典。如果您想在该字典中使用“np”标识符,则必须在此处显式导入它。

关于

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

-- 仅当您将 mymodule.py 作为独立脚本执行时才会调用,本题可能并非如此。

编辑:

OP 更改了示例代码,在他的函数中添加了import numpy as np,我的答案是针对原始问题。

【讨论】:

  • mymodule.py 可以完美地作为独立脚本运行,但是当我从主 .py 文件中调用它时,我会收到“全局名称 .. 未定义”错误。
  • @williamx - 如果你将它作为独立脚本运行,那么 numpy 会作为 np 导入,所以一切都像一个魅力。但是当你将 mymoduly.py 导入到主 .py 文件时,numpy 不会被导入!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多