python类中变量作用域_python中变量的作用域

1. python作用域类型

1)函数中的局部作用域:local

2)嵌套函数中父级函数的局部作用域:enclosing

3)全局作用域:global

4)系统内置的变量:如 int、str、list 等关键字

变量的查找顺序为:局部作用域 > 父级函数作用域 > 当前模块全局作用域 > 系统内置作用域

2. 函数体内部对外部变量的引用

1)获取变量

函数内部可直接获取外部定义的变量

#直接获取变量,此时打印结果为:a = 0

a =0deffunc1():print(a)

如下所示,函数内再定义一个重名的变量,会优先引用局部作用域内的变量,并不会引用到全局变量

#函数内再声明一个变量a,并赋值,此时函数内部打印的结果为:a = 1,函数外部打印的结果为:a = 0

a =0deffunc2():

a= 1

print(a)print(a)

2)修改全局变量

要想在函数内部对全局变量进行修改,需要使用 global 声明函数体内的这个变量是全局变量

#用global声明这是一个全局变量,此时打印结果为:a = 1

a =0deffunc3():globala

a= 1

print(a)

3)修改父级函数定义的局部变量

先来看一个错误案例

#这是一个装饰器,可以简单先理解为是一个嵌套函数,在父级函数中定义了变量 a,然后在最内层函数中修改 a 的值

deffunc_error(func):

a= 5

defwrapper():

func()

a= a + 1

print(a)returnwrapper

@func_errordeferror_demo():passerror_demo()

执行后报错:UnboundLocalError: local variable 'a' referenced before assignment

1159073-20200515145329650-585698810.png

原因是在wrapper函数内,没有找到局部变量 a,父级函数中定义的变量作用域只在父级函数的局部作用域

如果想要使用,则需要在wrapper内使用 nonlocal来声明这是一个外层非全局的变量

1159073-20200515150450925-1201769854.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值