关于Python作用域自学总结


Posted in Python onJune 10, 2019

作用域:顾名思义,作用的范围。

如果你是自学者,而且已经进军到函数这一部分了,那么就应当了解下Python的作用域。否则你可能会像我一样,总是对一个变量名同时存在函数内和函数外且有不同值搞的晕头转向。

在这里就总结一下,在本人的知识范围内所了解到的作用域是什么样的,LEGB规则到底规定了什么。

全局范围的产生(global):

我们创建一个xxx.py文件,就是一个模块,这时一个作用域就产生了。这个范围是整个模块,称作Global ,全局范围。

例如:创建一个文件demo.py。

声明一个变量,bd="百度"。

变量bd就是个全局变量。

bd="百度"

if True:
  print(bd)
#==============
def function_1():
  print(bd)
function_1()

bd在函数内和函数外都能被使用。

关于Python作用域自学总结

本地范围的产生(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仅在函数内使用。在其他地方调用时错误的。

关于Python作用域自学总结

嵌套范围的产生(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作用域自学总结

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)不会向内找,也不会从和它同级的层内找。

关于Python作用域自学总结

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(),就停止向外层查找。

关于Python作用域自学总结

同一作用域内两个名称是独立的,互不干扰。

比如两个同一级别的函数内,可以定义同名的变量,或嵌套同名的函数。

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 

关于Python作用域自学总结

结束语以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。以上就是关于,作用域的一些规则。个人认为,尽管作用域是独立的,但避免写同名的函数,和变量。可起的名字很多,何必给自己找麻烦。

Python 相关文章推荐
python去掉字符串中重复字符的方法
Feb 27 Python
python中子类调用父类函数的方法示例
Aug 18 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
Python中的几种矩阵乘法(小结)
Jul 10 Python
python 命令行传入参数实现解析
Aug 30 Python
python实现身份证实名认证的方法实例
Nov 08 Python
基于python实现检索标记敏感词并输出
May 07 Python
python dir函数快速掌握用法技巧
Dec 09 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
python 高阶函数简单介绍
Feb 19 Python
使用scrapy实现增量式爬取方式
Jun 21 Python
Python读写文件基础知识点
Jun 10 #Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 #Python
python三大神器之fabric使用教程
Jun 10 #Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 #Python
Python中的十大图像处理工具(小结)
Jun 10 #Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 #Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 #Python
You might like
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
一端时间轮换的广告
2006/06/26 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
javascript的this关键字详解
2019/05/20 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
Python中的一些陷阱与技巧小结
2015/07/10 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
Python 使用threading+Queue实现线程池示例
2019/12/21 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
python模块如何查看
2020/06/16 Python
python statsmodel的使用
2020/12/21 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
学生个人的自我评价分享
2013/11/05 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
中介业务员岗位职责
2014/04/09 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
博士给导师的自荐信
2015/03/06 职场文书