如果其他模型不响应-英雄云拓展知识分享
152
2023-10-25
【摘要】 本书摘自《Python入门与实战》一书中第4章,第6节,由王跃进主编。
4.6 变量的作用域
Python 中,所有的变量名会都按照定义时的位置被保存在不同的区域中,这些区 域叫作命名空间或者作用域。作用域分为4种类型:局部作用域 (Local)、 嵌套作用域 (Enclosing)、全局作用域 (Global)、 内置作用域 (Built-in)。这4种作用域简称LEGB。 本节我们重点介绍局部作用域和全局作用域。
在运行函数时,函数体中定义的所有变量将构成一个局部作用域,模块(一个 py 文件)中已经执行的赋值语句,将构成一个全局作用域。
在访问变量时,搜索路径遵循LEGB 顺序。这里的 LEGB 顺序是指从当前所处区 域开始依次搜索当前区域、上一级区域、 ……,级别的优先级从高到低依次为L、E、 G、B。 比如当前级别为 L, 则搜索顺序为 L、E、G、B; 如果当前级别为 E, 则搜索 顺序为 E、G、B。 一旦在某个作用域搜索到了变量则停止搜索,如果一直没有搜索到 变量则引发 “NameError”异常。
4.6.1 局部变量
局部作用域中的变量叫作局部变量,在函数内部定义的变量都是局部变量,只在 函数内部有效,在函数运行之前或在函数运行之后,这些变量都是不存在的。每个函 数具有自己的作用域,因此,即使两个函数中存在名字相同的变量,也不是同一个变量。
例子:访问函数内部的变量。
图4.1所示为局部变量范例。
Python 3.7.0 Shell
Eile Edit Shell Debug Options Window Help
局部变量范例
Traceback(most recent call last):
File"C:/Users/Administrator/AppData/Loca
1/Programs/Python/Python37-32/func.py",lin
e 5,inNameError: name 'l name'is not defined
_
>>>
Ln:1720 Col: 6
4.6.2 全局变量
全局作用域中的变量叫作全局变量。在函数外定义的变量是全局变量,在函数内 也可以访问全局变量。
例子:访问全局变量。
01 g name ='全局变量范例'
02 def fun test()
03 pr(gnme
04 fun test()
05 print(g name)
输出:
全局变量范例
全局变量范例
下面列举几个需要注意的例子,并总结经验。
1. 局部变量与全局变量同名
输出:
Python 教学系列
Python 入门与实战
结论:当局部变量与全局变量同名时,按照 LEGB 规则,在函数内首先搜索到局 部作用域里的变量,在函数外部首先搜索到全局作用域里的变量。
2. 在函数中修改全局变量
输出:
Python 教学系列
Python 教学系列
结论:如果需要在函数中修改全局变量,须使用 global关键字声明。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~