【问题标题】:importing function giving scoping error导入函数给出范围错误
【发布时间】:2015-06-10 01:34:15
【问题描述】:

假设我们将以下内容保存到名为 test.py 的 Python 文件中:

x = 14

def print_x():
    print x

def increment_x():
    x += 1

然后从同一目录中的交互式 Python shell 运行以下命令:

from test import print_x, increment_x

print_x()
increment_x()
print x

为什么第三次调用会产生错误? x 不需要定义前两个才能工作吗?

【问题讨论】:

  • AFAIK increment_x() 也必须抛出错误

标签: python import scope


【解决方案1】:

这些函数不会抛出错误,因为它们仍然存在于模块测试中,并且它们仍然在模块测试中看到 x。当您在其他地方导入对函数的引用时,它并没有真正移动,或者与它的原始上下文断开连接。如果确实如此,那么模块将没有多大用处。

【讨论】:

    【解决方案2】:

    您收到 Scope 错误消息的原因是因为 x 仅在 test.py 中是全局的,当您这样做时:

    from test import print_x, increment_x
    

    您实际上并未将 x 导入第二个脚本的全局范围。

    所以,如果您想在第二个脚本中也将 x 设为全局,请执行以下操作:

    from test import *
    

    尝试在 IDLE 中使用 DEBUGGER 实用程序查看 x 何时为 GLOBAL 以及何时不是

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2021-07-01
      • 1970-01-01
      • 2015-01-15
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      相关资源
      最近更新 更多