【问题标题】:Why do I have to import a library twice in Python (IDLE and the imported file)?为什么我必须在 Python 中两次导入一个库(IDLE 和导入的文件)?
【发布时间】:2021-02-21 15:35:57
【问题描述】:

我正在运行 Python 3.7.6 shell 并正确安装了库 numpy。

在我的 shell 中输入:

import numpy as np

并且可以使用 numpy 但我愿意。然后我继续导入“my_lib.py”,其中包含:

def softmax(x):
    e_x = np.exp(x - np.max(x))
    return e_x / e_x.sum(axis=0)

在我的 shell 中我可以调用函数 softmax(x) 但我立即得到错误

NameError: name 'np' is not defined

我在这里的假设是我已经将 numpy 导入到“shell 范围”中,并且我还将 softmax(x) 导入到了“shell 范围”中,所以一切都应该是愉快的。要解决这个问题,我必须添加

import numpy as np

进入“my_lib.py”。

我为什么要导入两次numpy?

【问题讨论】:

    标签: python-3.x import


    【解决方案1】:

    每个模块中的代码只能使用已在该模块中定义或导入该模块的标识符(名称)。每个模块中的全局字典仅包含该模块的全局名称。它可能更好地称为模块字典或模块化字典,但名称可以追溯到计算中没有模块的时候。

    阅读 https://docs.python.org/3/tutorial/modules.html 以及本教程的其他地方可能会对您有所帮助。

    (这与您用于编写代码的编辑器或用于将代码传递给 Python 的 IDE 或 shell 无关。)

    【讨论】:

    • 这是设计使然?那是因为每个模块都只是引用 numpy 的一个位置吗?它实际上并没有出去抢它自己的副本是吗?
    • 是的,不。在每个执行“import numpy”的模块中,名称“numpy”都绑定到 sys.modules['numpy']。这是内存中已编译、即用型、numpy 模块的“单一位置”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多