关于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写asp详细讲解
Dec 16 Python
python解析文件示例
Jan 23 Python
Python中统计函数运行耗时的方法
May 05 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
Python内置函数reversed()用法分析
Mar 20 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
Mar 22 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
Mar 20 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
python实现发送带附件的邮件代码分享
Sep 22 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
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
input 高级限制级用法
2009/03/26 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
Djang中静态文件配置方法
2015/07/30 Python
Python中http请求方法库汇总
2016/01/06 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
python 实现绘制整齐的表格
2019/11/18 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
Python configparser模块常用方法解析
2020/05/22 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
Unix里面如何在后台运行程序
2016/10/14 面试题
个人求职自荐信范文
2015/03/06 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
导游词之西安骊山
2019/12/03 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python