我不明白为什么这段代码在 b()
中打印 None
:
# coding: utf-8
saber = None
rider = dict()
def a():
saber = 'ex'
rider['a'] = 'b'
print saber
print rider
def b():
print saber
print rider
if __name__ == '__main__':
a()
b()
调用b()
时,打印saber
会导致打印None
。为什么?
最佳答案
saber
是None
在b()
因为您已将其定义为值为 None
的全局变量并且没有在该函数中定义同名的局部变量。在 a()
你定义了 saber
值为 "ex"
当你打印那个变量时,这就是你得到的。但是 saber
的值当函数完成时就消失了,因为它是函数的局部变量,这就是局部变量的作用。
现在你可能会问为什么 rider
在 a()
中更改什么时候saber
不是。但实际上,rider
没有改变。您没有分配给名称 rider
在a()
, 所以全局变量 rider
被使用了。 rider
的内容已更改(您添加了一个新的键/值对)但是 rider
它本身 仍然是您第一次定义它时的字典对象。 这就是为什么当您在 b()
中打印它时你得到改变的字典。这两个函数都使用全局变量 rider
因为没有同名局部变量“隐藏”它。
关于只有功能的python变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28868973/