关于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插入数据到列表的方法
Apr 30 Python
python计算一个序列的平均值的方法
Jul 11 Python
利用Python学习RabbitMQ消息队列
Nov 30 Python
Python中的数学运算操作符使用进阶
Jun 20 Python
使用EduBlock轻松学习Python编程
Oct 08 Python
python读取各种文件数据方法解析
Dec 29 Python
flask利用flask-wtf验证上传的文件的方法
Jan 17 Python
Python3列表List入门知识附实例
Feb 09 Python
Django静态资源部署404问题解决方案
May 11 Python
DataFrame.groupby()所见的各种用法详解
Jun 14 Python
keras得到每层的系数方式
Jun 15 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 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 Session 变量的使用方法详解与实例代码
2013/09/11 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
jQuery实现统计复选框选中数量
2014/11/24 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[53:49]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
解决python replace函数替换无效问题
2020/01/18 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
美国现代家具购物网站:LexMod
2019/01/09 全球购物
餐厅周年庆活动方案
2014/08/25 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
Python学习之时间包使用教程详解
2022/03/21 Python
vue router 动态路由清除方式
2022/05/25 Vue.js
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript