↑ 关注 + 星标 ~ 从此不迷路,后台回复【礼包】送你Python自学资料
作用域又可以被称为命名空间,指变量起作用的范围。Python变量作用域可以分为四种,分别为局部作用域、嵌套作用域、全局作用域、内置作用域。
作用域
英文
简写
局部作用域
Local
L
嵌套作用域
Enclosed
E
全局作用域
Global
G
内置作用域
Built-in
B
四种作用域中变量的调用顺序采取“就近原则”,即为 LEGB
局部作用域#
指某个函数内部的范围。每次执行函数时都会创建的新命名空间,同一函数不同时间运行其作用域相互独立,不同函数内部可以使用同一变量名。局部作用域内声明的变量名在函数外也可以使用,程序运行过程中两者互不干扰。
Copy`def myfun(): a = 0 # 局部变量 a += 1 print("myfun a = ", a)def myfun2(): a = [1, 2, 3] # 局部变量 a = [i + 1 for i in a] print("myfun2 a = ", a)a = 'Hello Python' # 此处a为全局变量myfun()myfun2()print("函数外 a = ", a)输出结果:myfun a = 1myfun2 a = [2, 3, 4]函数外 a = Hello Python`
嵌套作用域#
嵌套一般是指一个函数嵌套另一个函数的情况,外层函数包含变量的作用范围称为嵌套作用域;
也可以指一个类中包含多个函数时的情况。
Copy`# 1.函数嵌套:def myfun(i): a = [1, 2, 3] # a 所在范围为嵌套作用域 def add(): a.append(i) return a return addtest = myfun(4)print(test())输出结果:[1, 2, 3, 4]`
Copy`# 2.类中包含多个函数class test: b = 1 def __init__(self): self.a = 0 def myfun2(self): self.a += 1 print("a = ", self.a) self.b += 1 print("b = ", self.b)test = test()test.myfun2()输出结果:a = 1b = 2`
全局作用域#
全局作用域范围指的是在一个.py文件内部,在模块顶部声明即可成为全局作用域。
全局作用域中的变量在函数中一般是不可更改的,例如整数,字符等,但对于列表和字典来说可以更改。如想引用并改变全局变量,可使用global关键字。
Copy`# 整数,字符串等不可更改a = 1 # a为全局变量def myfun(): a = 2 # 局部变量 a += 1 print("函数中 a = ", a)myfun()print("函数外 a = ", a)输出结果:函数中 a = 3函数外 a = 1`
Copy`# 列表,元组等可更改a = [1, 2, 3]b = {'语文': 98, "数学": 101}def myfun(): a.append(4) b.update({"英语": 103}) print("函数中 a = ", a) print("函数中 b = ", b)myfun()print("函数外 a = ", a)print("函数外 b = ", b)输出结果:函数中 a = [1, 2, 3, 4]函数中 b = {'语文': 98, '数学': 101, '英语': 103}函数外 a = [1, 2, 3, 4]函数外 b = {'语文': 98, '数学': 101, '英语': 103}`
Copy`# 利用global关键字 引用全局变量a = 1def myfun(): global a # 使用a之前用global a += 1 print("函数中 a = ", a)myfun()print("函数外 a = ", a)输出结果:函数中 a = 2函数外 a = 2`
内置作用域#
内置作用域是python事先定义的内置模块,例如built-in 模块内的变量,程序启动之后由python虚拟机自动加载,在程序的任何地方都可以使用,例如print函数,随着解释器存在或消亡。
总结
python的四种所用域及其调用顺序,当使用某一变量时,首先在函数内部进行搜索(局部作用域 L),搜索不到便到上层函数或类中进行查找(嵌套作用域 E),再查找不到便到更上层模块中进行查找(全局作用域 G),还查找不到则进入预先定义的(内置作用域 B)中查找,查找不到报错。
作者: Kristine 出处:
免费福利
1
2
3
猜你喜欢
喜欢就点个在看再走吧
本文分享自微信公众号 - BigYoung小站(bigyoungs)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。