关于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多线程编程方式分析示例详解
Dec 06 Python
python遍历类中所有成员的方法
Mar 18 Python
python实现连接mongodb的方法
May 08 Python
Python中一行和多行import模块问题
Apr 01 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
Jun 22 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
深入学习python多线程与GIL
Aug 26 Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 Python
Python如何读写字节数据
Aug 05 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 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中上传大体积文件时需要的设置
2006/10/09 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
用javascript实现画板的代码
2007/09/05 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
jQuery实现选项联动轮播效果【附实例】
2016/04/19 Javascript
vue使用vue-cli快速创建工程
2017/07/28 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
将Sublime Text 3 添加到右键中的简单方法
2017/12/12 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
Swift中的协议(protocol)学习教程
2016/07/08 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
python查看列的唯一值方法
2018/07/17 Python
python实现飞机大战
2018/09/11 Python
Python对象转换为json的方法步骤
2019/04/25 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
创建Django项目图文实例详解
2019/06/06 Python
linux环境下Django的安装配置详解
2019/07/22 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
c++工程师面试问题
2013/08/04 面试题
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
某公司C#程序员面试题笔试题
2014/05/26 面试题
大学生简短的自我评价
2014/09/12 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书