您收到此,因为from foo import OPTIONS
线get_options()
功能,其值是内存加载一个新本地选项变量{“X”:0}。但是,如果您删除/注释该行,那么您得到了预期的结果,这是因为选项变量get_options()
现在是全局变量变量,而不是本地。
OPTIONS = {'x': 0}
def get_option(key):
# from foo import OPTIONS
return OPTIONS[key]
if __name__ == '__main__':
OPTIONS['x'] = 1
print("OPTIONS['x'] is %d" % OPTIONS['x'])
print("get_option('x') is %d" % get_option('x'))
您也可以调试使用id()功能,它在返回一个对象的“身份”的一生。
对于调试代码:
OPTIONS = {'x': 0}
def get_option(key):
from foo import OPTIONS
print("Id is %d in get_option" % id(OPTIONS))
return OPTIONS[key]
if __name__ == '__main__':
OPTIONS['x'] = 1
print("Id is %d in main" % id(OPTIONS))
print("OPTIONS['x'] is %d" % OPTIONS['x'])
print("get_option('x') is %d" % get_option('x'))
输出:
Id is 140051744576688 in main
OPTIONS['x'] is 1
Id is 140051744604240 in get_option
get_option('x') is 0
注:ID的值可以在系统上进行更改。现在
,你可以看到的ID是在两个不同的地方,这意味着有两个选项内get_options()
功能之一是__main__.OPTIONS
而另一种是foo.OPTIONS
。但是,如果在get_options()
中评论/删除线from foo import OPTIONS
,则在两处都会得到相同的ID。
你有两个'选项','__main __。OPTIONS'和'foo.OPTIONS'。 – user2357112
__main__中的选项位于locals()中,但get_option中的OPTIOINS全局变量() –