python作用域的顺序_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 = 1

myfun2 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 add

test = 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 = 1

b = 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 = 1

def 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)中查找,查找不到报错。

52c65dbeaacc56c6baf61b81dca36a972fc.png

作者: Kristine 出处:

https://www.cnblogs.com/wangxue574/p/12366748.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值