Python 局部变量global,全局变量local ,非局部变量nonlocal ,Enclosing function locals作用域(python能做什么)

网友投稿 308 2022-08-23


Python 局部变量global,全局变量local ,非局部变量nonlocal ,Enclosing function locals作用域(python能做什么)

一、作用域

Local 局部作用域

Enclosing 嵌套作用域

nonlocal 只作用于嵌套作用域,而且只是作用在函数里面

global 全局作用域

Built-in 内置作用域

python变量的使用顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量.

变量作用域:

那么问题来了,如果想在函数内使用全局变量,或改变全局变量的值,应该怎么做呢?

global关键字 出现了:

二、局部作用域

局部变量的定义无需使用关键字,定义变量时默认就是局部变量

在下列代码 c = 100 中c就是局部变量,c 是在函数内容定义的,在函数外是获取不到的

def dummy(): i = 0 c = 100 print(i) i += 1print(c)

三、全局作用域

使用关键字global,要先用global关键字修饰,再赋值

def dummy(): i = 0 global c c = 100 print(i) i += 1 print(c)

四、nonlocal作用域

i = 0n = 0 def dummy1(): i = 1 print(i) def dummy2(): i = 2 dummy2() print(i) dummy1()print(i)

==== 输出结果:

3、使用nonlocal

i = 0 def dummy1(): i = 1 print(i) def dummy2(): nonlocal i # 非局部的,只适用于闭包内部 i = 2 dummy2() print(i) dummy1()print(i)

五、就近原则

b = 1111 def func5(): b = 5 print('l29', b) def func6(): b = 6 print('l33', b) # 这里的b从内到外就近查找 func6() print('l36', b) func5()

==== 输出结果:

六、函数执行顺序

虽然这样没有报错,但是运行时会报错

a = 123 def func1(): print(a) print(b) func1() # 不能打印bb = 456func1() # 可以打印b

==== 输出结果:

除非第32行调用函数func1放在33行之后才能不报错

七、循环、判断代码块中作用域问题

循环代码块中没有作用域这样的情况

if True: a = 100print(a) for i in range(1, 5): print(i)print(i)

==== 输出结果:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用 Python 实现一个简单的智能聊天机器人(使用灭火器灭火的最佳位置是)
下一篇:#yyds干货盘点#python之布尔运算、比较运算
相关文章

 发表评论

暂时没有评论,来抢沙发吧~