我显然在对Python范围的理解很差的情况下工作。也许你可以帮忙。“库”方法的范围
背景:
我使用
if __name__ == "__main__"
结构来我模块(S)在执行 “自检”。每次自测都会调用各种公共方法,并在开发模块时打印结果以进行视觉检查。
为了保持 “普尔蒂” 和可管理的,我创建了一个小方法来简化方法的调用测试:
def pprint_vars(var_in):
print("%s = '%s'" % (var_in, eval(var_in)))
当
foo = "bar"
与调用pprint_vars:
pprint_vars('foo')
打印:
foo = 'bar'
一切都很好。
问题陈述:
不开心,只是吻,我有脑小雨动我的方便,花花公子“pprint_vars”的方法到一个名为“debug_tools.py”一个单独的文件,只需输入“debug_tools”每当我想访问'pprint_vars'。
这里是事情崩溃的地方。我希望
import debug_tools
foo = bar
debug_tools.pprint_vars('foo')
继续工作它的魔力和打印:
foo = 'bar'
相反,它招呼我:
NameError: name 'some_var' is not defined
非理性的信念:
我相信(显然是错误的)该导入会将输入方法(或多或少)与代码“内联”,因此变量范围规则将保持类似于如果方法我们重新定义内联。
请求帮助:
有人可以纠正我对误区的理解吗?
感谢, JS
你确定你发布了完全相同的代码吗?它不应该是'foo ='bar''吗?我找不到错误信息中提到的'some_var'。 – 2010-04-07 23:39:14
你是对的,菲利克斯。我很抱歉。我有(希望)纠正错误。 – 2010-04-07 23:49:06
'__name__'成语通常写成'if __name__' =='__main__“:',测试是否相等。它正好使用了__in__运算符,因为它包含了测试,但有些意外。 – Todd 2010-04-08 02:30:01