global 标识用于在函数内部, 修改全局变量的值.
我们可以通过以下规则, 来判定一个变量到底是在全局作用域还是局部作用域:
变量定义在全局作用域, 那就是全局变量.
变量在函数中定义, 并且加了 global 标识, 就是全局变量.
如果变量在函数中仅做了定义, 那么就是局部变量.
如果变量在函数中仅仅是使用, 那么就是全局变量.
下面的示例, 有助于理解上述规则:
- def cook():
- global dumplings
- dumplings = '10' # 全局变量
- print('cook():' + dumplings)
- def cook2():
- dumplings = '22' # 局部变量
- print('cook2():' + dumplings)
- def cook3():
- print('cook3():' + dumplings) # 全局变量
- dumplings = 3 # 全局变量
- cook()
- print('global:' + dumplings)
- cook3()
- cook2()
运行结果:
- cook():10
- global:10
- cook3():10
- cook2():22
注意: 在函数中, 如果在变量定义之前先使用它, 就会抛错:
- def cook():
- print(dumplings)
- dumplings = 'local'
- dumplings = 'global'
- cook()
运行结果:
UnboundLocalError: local variable 'dumplings' referenced before assignment
因为在函数中, 存在对 dumplings 的定义赋值语句, 所以被认为是局部变量. 所以在定义之前, 先访问这个局部变量就会抛错.
来源: http://www.jianshu.com/p/eace288ce811