关于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 命令行参数sys.argv
Sep 06 Python
Python 正则表达式操作指南
May 04 Python
Python中转换角度为弧度的radians()方法
May 18 Python
Python判断字符串与大小写转换
Jun 08 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
tensorflow使用指定gpu的方法
Feb 04 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
Python编写万花尺图案实例
Jan 03 Python
python字符串的一些常见实用操作
Apr 06 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
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
php导出生成word的方法
2015/12/25 PHP
Yii2如何批量添加数据
2016/05/17 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
基于jquery实现等比缩放图片
2014/12/03 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
django项目搭建与Session使用详解
2018/10/10 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
机械制造专业毕业生求职信
2014/03/02 职场文书
离婚协议书样本
2015/01/26 职场文书
测量员岗位职责
2015/02/14 职场文书
2015年资料员工作总结
2015/04/25 职场文书
2015年材料员工作总结
2015/04/30 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers