关于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 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
python实现微信自动回复机器人功能
Jul 11 Python
面向对象学习之pygame坦克大战
Sep 11 Python
python保存log日志,实现用log日志画图
Dec 24 Python
django ajax发送post请求的两种方法
Jan 05 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
Feb 18 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
python剪切视频与合并视频的实现
Mar 03 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 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设计模式 Template (模板模式)
2011/06/26 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
工作需要写的一个js拖拽组件
2011/07/28 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
javascript中拼接HTML字符串的最快、最好的方法
2014/06/07 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
js初始化验证实例详解
2016/11/26 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
[20:30]职业巡回赛回顾
2018/08/09 DOTA
Python3生成手写体数字方法
2018/01/30 Python
HTML5 播放 RTSP 视频的实例代码
2019/07/29 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
个人素质的自我评价分享
2013/12/16 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书
正规欠条模板
2015/07/03 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书