↑ 关注 + 星标 ~ 从此不迷路,后台回复【礼包】送你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源创计划”,欢迎正在阅读的你也加入,一起分享。
 
  
  
  
  
  
  
 
 
  
 
 
 