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
"""




  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值