Python作用域_全局作用域_局部作用域

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

Python
# -*- coding: utf-8 -*- """ @Time: 2018/1/25 @Author: songhao @微信公众号: zeropython @File: namspace.py """ a = "This is a global variable" def fool(): print(locals(),"局部变量") fool() print(globals(), "全局变量")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*-
"""
@Time: 2018/1/25
@Author: songhao
@微信公众号: zeropython
@File: namspace.py
"""
a = "This is a global variable"
 
def fool ( ) :
     print ( locals ( ) , "局部变量" )
 
fool ( )
print ( globals ( ) , "全局变量" )

输出结果是:

读取 全局作用域:

"""
如果要修改 必须 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>, '__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
"""




你可能感兴趣的:(Python作用域_全局作用域_局部作用域)