目录
一、作用域二、局部作用域三、全局作用域四、nonlocal作用域1、使用nonlocal2、就近原则3、函数执行顺序4、循环、判断代码块中作用域问题一、作用域
Local:局部作用域
Enclosing:嵌套作用域
nonlocal:只作用于嵌套作用域,而且只是作用在函数里面
global:全局作用域
Built-in:内置作用域
python变量的使用顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量.
变量作用域:
(资料图)
在Python程序中声明、改变、查找变量名时,都是在一个保存变量名的命名空间中进行中,此命名空间亦称为变量的作用域。python的作用域是静态的,在代码中变量名被赋值的位置决定了该变量能被访问的范围。即Python变量的作用域由变量所在源代码中的位置决定。
一般在函数体外定义的变量成为全局变量、在函数内部定义的变量称为局部变量。
局变量所有作用域都可用,局部变量只能在本函数可用。
变量的使用顺序是,局部变量>全局变量,也就是说:优先使用局部变量。
那么问题来了,如果想在函数内使用全局变量,或改变全局变量的值,应该怎么做呢?
global关键字 出现了:
了解决函数内使用全局变量的问题, python增加了global关键字,利用它的特性,可以指定变量的作用域。
global关键字的作用:声明变量var是全局的
二、局部作用域
局部变量的定义无需使用关键字,定义变量时默认就是局部变量
在下列代码 c = 100 中c就是局部变量,c 是在函数内容定义的,在函数外是获取不到的
def dummy(): i = 0 c = 100 print(i) i += 1 print(c)
三、全局作用域
使用关键字global,要先用global关键字修饰,再赋值
def dummy(): i = 0 global c c = 100 print(i) i += 1 print(c)
四、nonlocal作用域
nonlocal 一般是用在闭包函数中, nonlocal声明的变量在上级局部作用域内,而不是全局定义
i = 0 n = 0 def dummy1(): i = 1 print(i) def dummy2(): i = 2 dummy2() print(i) dummy1() print(i)
输出结果:
如果在它声明的变量在上级局部中不存在,则会报错
1、使用nonlocal
i = 0 def dummy1(): i = 1 print(i) def dummy2(): nonlocal i # 非局部的,只适用于闭包内部 i = 2 dummy2() print(i) dummy1() print(i)
2、就近原则
b = 1111 def func5(): b = 5 print("l29", b) def func6(): b = 6 print("l33", b) # 这里的b从内到外就近查找 func6() print("l36", b) func5()
输出结果:
3、函数执行顺序
虽然这样没有报错,但是运行时会报错
a = 123 def func1(): print(a) print(b) func1() # 不能打印b b = 456 func1() # 可以打印b
输出结果:除非第32行调用函数func1放在33行之后才能不报错
4、循环、判断代码块中作用域问题
循环代码块中没有作用域这样的情况
if True: a = 100 print(a) for i in range(1, 5): print(i) print(i)
输出结果:
到此这篇关于Python 局部变量global详解的文章就介绍到这了,更多相关Python global内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 1亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 2现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 3如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 4AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 5转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 6充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 7好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 8名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 9亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战
- 10京东绿色建材线上平台上线 新增用户70%来自下沉市场