在Python中,每个函数都会创建一个作用域。Pythonistas也可能称函数拥有它们自己的命名空间(namespace)。这意味着当在函数体里遇到变量名
时,Python首先在该函数的命名空间中查找,Python包含了一些让我们查看命名空间的函数。让我们写一个简单的函数来探查一下local和global作用域
的区别。

输出结果是:

Python作用域_全局作用域_局部作用域-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客

读取 全局作用域:

"""
如果要修改 必须 global a
如果只是简单的读取可以 直接读取
"""
"""
# 修改全局变量
def fool():
print(a)
a = "new a"
print(locals(),"局部变量")

fool()
print(globals(), "全局变量")

# output
Traceback (most recent call last):
File "/Users/songhao/py/TouTiaoShare/装饰器/namspace.py", line 32, in
fool()
File "/Users/songhao/py/TouTiaoShare/装饰器/namspace.py", line 28, in fool
print(a)
UnboundLocalError: local variable 'a' referenced before assignment
"""
"""
# 添加global,就可以修改了
def fool():
global a
a = "new_a"
print(a)
print(locals(),"局部变量")

fool()
print(globals(), "全局变量")

"""
# {} 局部变量 因为a不属于 局部变量
# {'__name__': '__main__', '__doc__': '\n@Time: 2018/1/25\n@Author: songhao\n@微信公众号: zeropython\n@File: namspace.py\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10376a668>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': '/Users/songhao/py/TouTiaoShare/装饰器/namspace.py', '__cached__': None, 'a': 'new_a', 'fool': } 全局变量
"""
变量的生命周期啊

def fool():
x = 1
global x

fool()
print(x)

File "/Users/songhao/py/TouTiaoShare/装饰器/namspace.py", line 62
global x
^
SyntaxError: name 'x' is assigned to before global declaration
"""