导入函数给出范围错误

时间:2015-06-10 01:34:16

标签: python import scope

假设我们将以下内容保存到名为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吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您收到范围错误消息的原因是因为x仅在test.py中是全局的,并且当您执行此操作时:

from test import print_x, increment_x

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

所以,如果你想在第二个脚本中创建x global,请执行:

from test import *

尝试使用IDLE中的 DEBUGGER 工具查看x何时GLOBAL以及何时不是