自学Python-作用域

2025-10-23 01:41:39

1、全局范围的产生(global):

我们创建一个xxx.py文件,就是一个模块,这时一个作用域就产生了。这个范围是整个模块,称作Global ,全局范围。

例如:创建一个文件demo.py。

声明一个变量,bd="百度"。

变量bd就是个全局变量。

--------------------

bd="百度"

 

if True:

 

   print(bd)

 

#==============

 

def function_1():

 

   print(bd)

 

function_1()

--------------------

bd在函数内和函数外都能被使用。

自学Python-作用域

2、本地范围的产生(Local):

当函数被定义后,一个属于这个函数的小天地就产生了。可以在内部定义变量,也可以在它的内部嵌套函数。这个范围就是局部范围。在局部范围的变量只能局部范围内使用。

--------------------

def locals():

 

   x=100

 

   print("local_x = ",x+20)

 

locals()

--------------------

输出:local_x =  120

如果在全局范围内打印x就会报错:

--------------------

def locals():

 

   x=100

 

   print("local_x = ",x+20

 

print(x)

--------------------

提示名字错误:x没有被定义(NameError: name 'x' is not defined)

所以局部变量x仅在函数内使用。在其他地方调用时错误的。

自学Python-作用域

3、嵌套范围的产生(Enclosed ):

这个范围在函数嵌套时产生,介于全局和局部范围之间。

比如一个函数嵌套了另一个函数,这个函数的作用域就是嵌套的范围,被嵌套的就是本地范围,如果有更多层的嵌套,那就有多层的嵌套范围。

--------------------

x=20

 

def local_out():

 

   y=30

 

   def local_in():

 

       z=40

 

       print('本地变量z:',z)

 

   print('嵌套变量y:',y)

 

   local_in()

 

print("全局变量x:",x)

 

local_out()

输出:

全局变量x: 20

嵌套变量y: 30

本地变量z: 40

--------------------

自学Python-作用域

4、python的内建函数:(Built-in)

内建函数是天生就有的,你在那个作用域都可以以调用。用的最多的莫过于print()

关于内建函数你可以在python的documentation内找到。

1、LEGB是Local,Enclosed ,Global,Built-in首字母的缩写联合。

它们的范围是有小到大是这样排列的,Local----Enclosed----Global----Built-in,而且上层套下层:

自学Python-作用域

2、python脚本运行时找名称的顺序:

1)从它本身所在的层级找名;

2)如果没有就向外层找;

3)不会向内找,也不会从和它同级的层内找。

自学Python-作用域

3、如果在某个层内找到,就停止寻找,即使外面有同名的。

-------------------

def max(s):

 

   m=min(s)

 

   return m

 

numList=[1,2,4,5,7,8,9]

 

maxNun=max(numList)

 

print('最大值=',maxNun)

输出:最大值= 1

-------------------

在全局范围内,调用max()函数,因为有个自定义函数和内建的函数max()同名,所以它调用了,自定义的函数max(),就停止向外层查找。

自学Python-作用域

4、同一作用域内两个名称是独立的,互不干扰。

比如两个同一级别的函数内,可以定义同名的变量,或嵌套同名的函数。

-------------------

a=3

 

def add_1():

 

   a=30

 

   print('add_1的 a =',a)

 

def add_2():

 

   a = 3000

 

   print('add_2的 a =', a)

 

add_1()

 

add_2()

 

print('全局变量的 a =', a)

输出:

add_1的 a = 30

add_2的 a = 3000

全局变量的 a = 3 

------------------- 

自学Python-作用域

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢