关于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中计算三角函数之cos()方法的使用简介
May 15 Python
Python根据区号生成手机号码的方法
Jul 08 Python
Python常用的爬虫技巧总结
Mar 28 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
django url到views参数传递的实例
Jul 19 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
Python API len函数操作过程解析
Mar 05 Python
Python super()函数使用及多重继承
May 06 Python
Django获取model中的字段名和字段的verbose_name方式
May 19 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
DSP接收机前端设想
2021/03/02 无线电
session 的生命周期是多长
2006/10/09 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
php递归函数怎么用才有效
2018/02/24 PHP
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
Python的Django框架中的数据库配置指南
2015/07/17 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
深入理解Python中的*重复运算符
2017/10/28 Python
python中reader的next用法
2018/07/24 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
Django框架验证码用法实例分析
2019/05/10 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
工作检讨书怎么写
2014/10/10 职场文书
三人合伙协议书范本
2014/10/29 职场文书
委托书的样本
2015/01/28 职场文书
2015年个人思想总结
2015/03/09 职场文书
经费申请报告
2015/05/15 职场文书
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android
Python加密与解密模块hashlib与hmac
2022/06/05 Python