关于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生成验证码实例
Aug 21 Python
基于ID3决策树算法的实现(Python版)
May 31 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
Python实现聊天机器人的示例代码
Jul 09 Python
python requests爬取高德地图数据的实例
Nov 10 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
Python基于stuck实现scoket文件传输
Apr 02 Python
Python操作Excel把数据分给sheet
May 20 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
python 如何用map()函数创建多线程任务
Apr 07 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中通过smtp发邮件的类,测试通过
2007/01/22 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
jQuery .tmpl() 用法示例介绍
2014/08/21 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
angularjs实现的前端分页控件示例
2017/02/10 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
js验证账户名是否重复
2020/05/26 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python学习 流程控制语句详解
2016/06/01 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
python小项目之五子棋游戏
2019/12/26 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
python 等差数列末项计算方式
2020/05/03 Python
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
kfc实习自我鉴定
2013/12/14 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
家长对孩子的感言
2014/03/10 职场文书
民族精神月活动总结
2014/08/28 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
入党培养人考察意见
2015/06/08 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
如何有效防止sql注入的方法
2021/05/25 SQL Server