Python-10作用域


作用域就是一个 Python 程序可以直接访问命名空间的正文区域。

在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。

Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python 的作用域一共有4种,分别是:

有四种作用域:

  • L(Local):最内层,包含局部变量,比如一个函数/方法内部。
  • E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
  • G(Global):当前脚本的最外层,比如当前模块的全局变量。
  • B(Built-in): 包含了内建的变量/关键字等,最后被搜索。

规则顺序: L –> E –> G –> B

LEGB法则

在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。

Python-10作用域

 

 

 1 #作用域
 2 a1 = 10          #全局作用域
 3 def pri():
 4     print(a1)
 5 pri()
 6 
 7 
 8 def pri1():
 9     a2 = 20       #局部作用域
10     print(a2)
11 pri1()
12 #print(a2)        #这句这样写则会报错,因为a2的作用域只在函数内部并不是全局作用域,注意区别
13 
14 
15 #嵌套作用域
16 def f1():
17     n = 10         #在f1函数中,是局部作用域 相对于f2函数,是嵌套作用域
18     def f2():
19         m = 20     #局部作用域
20         print(n)
21     f2()
22 
23 
24 #内置作用域 系统自带
25 print(__name__)   #内置作用域

Python-10作用域

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/280766.html

(0)
上一篇 2022年8月15日
下一篇 2022年8月15日

相关推荐

发表回复

登录后才能评论