作用域:顾名思义,作用的范围。
如果你是自学者,而且已经进军到函数这一部分了,那么就应当了解下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
结束语以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]