【发布时间】:2011-10-31 01:23:57
【问题描述】:
试试这个:
A = 1
B = 2
C = A + B
def main():
global C
print A
main() 的输出是1。
这是为什么?为什么main 应该了解用于评估C 的其他全局变量?
【问题讨论】:
标签: python namespaces global
试试这个:
A = 1
B = 2
C = A + B
def main():
global C
print A
main() 的输出是1。
这是为什么?为什么main 应该了解用于评估C 的其他全局变量?
【问题讨论】:
标签: python namespaces global
全局变量始终可用于 Python 中的所有局部范围,包括函数。在这种情况下,main()A、B 和C 都在范围内。
global 关键字并不像您认为的那样做;相反,它允许本地范围来操作全局函数(可以说,它使全局变量“可写”)。考虑以下示例:
c = 4
print c
def foo():
c = 3
print c
foo()
print c
在这里,输出将是
4
3
4
现在,考虑一下:
c = 4
print c
def foo():
global c
c = 3
print c
foo()
print c
在这种情况下,输出将是
4
3
3
在第一种情况下,c = 3 只是覆盖c,直到其作用域结束(即函数定义结束时)。在第二种情况下,我们实际上是在编写 global c 之后引用了对全局 c 的引用,因此更改 c 的值将导致永久更改。
【讨论】:
函数可以读取封闭范围内的变量。 global declaration 用于写入变量(表示它们应该写入全局字典而不是本地字典)。
【讨论】: