关于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基础教程之自定义函数介绍
Aug 29 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
使用Python操作MySQL的一些基本方法
Aug 16 Python
Python过滤列表用法实例分析
Apr 29 Python
python下载图片实现方法(超简单)
Jul 21 Python
轻松理解Python 中的 descriptor
Sep 15 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
Python基于多线程实现ping扫描功能示例
Jul 23 Python
python创建与遍历List二维列表的方法
Aug 16 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 Python
Python开发入门——迭代的基本使用
Sep 03 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编程实现脚本异步执行的方法
2017/08/09 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
js调用图片隐藏&显示实现代码
2013/09/13 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
浅谈js的异步执行
2016/10/18 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
Python基于有道实现英汉字典功能
2015/07/25 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
Python实现随机漫步功能
2018/07/09 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
python安装requests库的实例代码
2019/06/25 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
副总经理工作职责
2013/11/28 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
勤俭节约倡议书
2014/04/14 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android