关于Python作用域自学总结
作者:laozhang 发布时间:2023-11-02 12:19:53
作用域:顾名思义,作用的范围。
如果你是自学者,而且已经进军到函数这一部分了,那么就应当了解下Python的作用域。否则你可能会像我一样,总是对一个变量名同时存在函数内和函数外且有不同值搞的晕头转向。
在这里就总结一下,在本人的知识范围内所了解到的作用域是什么样的,LEGB规则到底规定了什么。
全局范围的产生(global):
我们创建一个xxx.py文件,就是一个模块,这时一个作用域就产生了。这个范围是整个模块,称作Global ,全局范围。
例如:创建一个文件demo.py。
声明一个变量,bd="百度"。
变量bd就是个全局变量。
bd="百度"
if True:
print(bd)
#==============
def function_1():
print(bd)
function_1()
bd在函数内和函数外都能被使用。
本地范围的产生(Local):
当函数被定义后,一个属于这个函数的小天地就产生了。可以在内部定义变量,也可以在它的内部嵌套函数。这个范围就是局部范围。在局部范围的变量只能局部范围内使用。
def locals():
x=100
print("local_x = ",x+20)
locals()
输出:local_x = 120
如果在全局范围内打印x就会报错:
def locals():
x=100
print("local_x = ",x+20
print(x)
提示名字错误:x没有被定义(NameError: name 'x' is not defined)
所以局部变量x仅在函数内使用。在其他地方调用时错误的。
嵌套范围的产生(Enclosed ):
这个范围在函数嵌套时产生,介于全局和局部范围之间。
比如一个函数嵌套了另一个函数,这个函数的作用域就是嵌套的范围,被嵌套的就是本地范围,如果有更多层的嵌套,那就有多层的嵌套范围。
x=20
def local_out():
y=30
def local_in():
z=40
print('本地变量z:',z)
print('嵌套变量y:',y)
local_in()
print("全局变量x:",x)
local_out()
输出:
全局变量x: 20
嵌套变量y: 30
本地变量z: 40
python的内建函数:(Built-in)内建函数是天生就有的,你在那个作用域都可以以调用。用的最多的莫过于print()关于内建函数你可以在python的documentation内找到。python的内建函数:(Built-in)内建函数是天生就有的,你在那个作用域都可以以调用。用的最多的莫过于print()关于内建函数你可以在python的documentation内找到。
LEGB规则:
LEGB是Local,Enclosed ,Global,Built-in首字母的缩写联合。
它们的范围是有小到大是这样排列的,Local----Enclosed----Global----Built-in,而且上层套下层:
2、python脚本运行时找名称的顺序:
1)从它本身所在的层级找名;
2)如果没有就向外层找;
3)不会向内找,也不会从和它同级的层内找。
3、如果在某个层内找到,就停止寻找,即使外面有同名的。
def max(s):
m=min(s)
return m
numList=[1,2,4,5,7,8,9]
maxNun=max(numList)
print('最大值=',maxNun)
输出:最大值= 1
在全局范围内,调用max()函数,因为有个自定义函数和内建的函数max()同名,所以它调用了,自定义的函数max(),就停止向外层查找。
同一作用域内两个名称是独立的,互不干扰。
比如两个同一级别的函数内,可以定义同名的变量,或嵌套同名的函数。
a=3
def add_1():
a=30
print('add_1的 a =',a)
def add_2():
a = 3000
print('add_2的 a =', a)
add_1()
add_2()
print('全局变量的 a =', a)
输出:
add_1的 a = 30
add_2的 a = 3000
全局变量的 a = 3
结束语以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。
猜你喜欢
- 题目描述724. 寻找数组的中心下标 - 力扣(LeetCode) (leetcode-cn.com)给你一个整数数组 nums
- 前言sort包中实现了3种基本的排序算法:插入排序.快排和堆排序.和其他语言中一样,这三种方式都是不公开的,他们只在sort包内部使用.所以
- 对于xml2ddl项目,Freshmeat.org提供了一整套基于GNU或者GPL通用公共许可证下的Python程序。在一个运行的Pytho
- 可以使用 Application 对象在给定的应用程序的所有用户之间共享信息。基于 ASP 的应用程序同所有的 .asp 文件一样在一个虚拟
- 大家都知道当任务过多,任务量过大时如果想提高效率的一个最简单的方法就是用多线程去处理,比如爬取上万个网页中的特定数据,以及将爬取数据和清洗数
- 微信跳一跳辅助的python具体实现代码,供大家参考,具体内容如下这是一个 2.5D 插画风格的益智游戏,玩家可以通过按压屏幕时间的长短来控
- 一、读者指引读者指引帮助你掌握本文的梗概。以免你看了大半才明白这编文章不适合你,给你造成视觉污染。如果你正在用ASP+XML写一些程序,或者
- 本文实例为大家分享了tensorflow神经网络实现mnist分类的具体代码,供大家参考,具体内容如下只有两层的神经网络,直接上代码#引入包
- LearningjQuery.com 博客帖子列表的左边有一个很酷的日期,如图:从图中我们看到,“2009”垂直排列在右侧。用Firebug
- 利用ASP从远程服务器上接收XML数据<% dim objXML dim objRootElement dim&n
- 1、封装的理解封装(Encapsulation):属性和方法的抽象属性的抽象:对类的属性(变量)进行定义、隔离和保护分为私有属性和公开属性:
- 好久没有写ASP代码了,今天在做一个简单的留言本时,出现了一下错误:Microsoft Office Access Database Eng
- 每个人都可以编写CSS代码,甚至你现在已经让它为你的项目工作了。但是CSS还可以更好吗?开始用这5个Tips改进你的CSS吧!一、关于CSS
- 可以把多个页面相同的部分提取出来,放在一个母板里,这些页面只需要继承这个母板就好了通常会在母板中定义页面专用的 CSS 块和 JS 块,方便
- 众所周知道,IE向来是我们在制作网页时最难搞定的对手。但又迫于其用户群数量之多,我们不得不想法设法搞定它。下面,将介绍的将是利用其特点而被发
- Python的matplotlib模块中的errorbar函数可以绘制误差棒图,本次主要绘制不带折线的误差棒图。1.基本参数errorbar
- 1.静态方法(staticmethod)静态方法:@staticmethod也是一个类方法,是可以直接类调用的。个人认为的使用场景是:只要要
- .sh脚本可以自动运行多次实验。Windows系统下实现pycharm运行.sh文件1、安装GitGit官网下载或者点击这里下载默认设置安装
- 在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等。我们通常的做法是:select
- 代码如下: var lishustr = "qwertyuiopasdfghjklmnbvcxz"; var s = l