Python中的函数作用域


Posted in Python onMay 07, 2018

在python中,一个函数就是一个作用域

name = 'xiaoyafei'
def change_name():
  name = '肖亚飞'
  print('在change_name里的name:',name)
change_name() # 调用函数
print("在外面的name:",name)

运行结果如下:

在change_name里的name: 肖亚飞
在外面的name: xiaoyafei

我们再试一下在嵌套函数中是如何的寻找的?

age = 15
def func():
  print('第一层age:',age) # 第一层age: 15
  def func2():
    age = 73
    print("func2中的age:",age) # func2中的age: 73
    def func3():
      age = 84
      print("func3中的age:",age) # func3中的age: 84
    func3() # 调用func3函数
  func2() # 调用func2函数
func()

在以上嵌套函数中,就能够很好的说明一个函数就是一个作用域,那么我们现在稍微改一下代码看看情况?

age = 15
def func():
  print('第一层age:',age) # 第一层age: 15
  def func2():
    print("func2中的age:",age) # func2中的age: 15 # 看到没有,如果当前作用域里没有age变量,那么它就会往上找
    def func3():
      age = 84
      print("func3中的age:",age) # func3中的age: 84
    func3() # 调用func3函数
  func2() # 调用func2函数
func()

那么,这时候有人就说了,屁话一大堆讲的原来是局部变量和全局变量,那么我想问:在上面这个嵌套函数中,func2中并没有age变量,那么它是如何找到全局变量age = 15的?

此时我们就需要来看一下作用域的查找顺序了:

变量作用域LEGB

  • L:locals 函数内的名称空间,包括局部变量和实参
  • E:enclosing 外部嵌套函数的名称空间,即相邻的上一层,打个比方说:func2中没有age变量则会去func里找这个
  • G:globals 全局变量
  • B:builtins 内置模块的名称空间

咳咳,还是先了解下什么是名称空间把?

名称空间,又名 name space ,顾名思义就是存放名字的地方,存什么名字呢?举例说明,x = 1 ,1存放在内存当中,那么变量名x存放在哪里呢? 名称空间就是存放名字x与1绑定关系的地方

>>> x = 1
>>> id(1)
1576430608

名称空间分为以下3种:

  • locals: 是函数内的名称空间,包括局部变量和形参
  • globals: 全局变量,函数定义所在模块的名字空间
  • builtins: 内置模块的名字空间

不同变量的作用域不同就是有这个变量所在的命名空间决定的.

作用域即范围

  • 全局范围:全局存活,全局有效
  • 局部范围:临时存货,局部有效

让我们来举例看一下

level = 'L0'
n = 22
def func():
  level = 'L1'
  n = 33
  print(locals()) # {'n': 33, 'level': 'L1'} 在之前说过在python中,一个函数就是一个作用域,这就很完美的体现了
  def outer():
    n = 44
    level = 'L2'
    print(locals(),n) # {'level': 'L2', 'n': 44} 44
    def inner():
      level = 'L3'
      print(locals(),n) # {'level': 'L3', 'n': 44} 44
    inner()
  outer()
func()

以 L --> E --> G -->B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置函数中找。

总结

以上所述是小编给大家介绍的python中的函数作用域,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
Python通过select实现异步IO的方法
Jun 04 Python
python2.7到3.x迁移指南
Feb 01 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
django做form表单的数据验证过程详解
Jul 26 Python
python3中pip3安装出错,找不到SSL的解决方式
Dec 12 Python
详解Python中namedtuple的使用
Apr 27 Python
python如何调用字典的key
May 25 Python
Pytorch实验常用代码段汇总
Nov 19 Python
Php多进程实现代码
May 07 #Python
Python格式化输出%s和%d
May 07 #Python
python获取代理IP的实例分享
May 07 #Python
对python使用http、https代理的实例讲解
May 07 #Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 #Python
python使用代理ip访问网站的实例
May 07 #Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 #Python
You might like
使用PHP制作新闻系统的思路
2006/10/09 PHP
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
PHP中each与list用法分析
2016/01/08 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
跟老齐学Python之类的细节
2014/10/13 Python
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
python实现RSA加密(解密)算法
2016/02/17 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
服装设计专业毕业生求职信
2014/04/09 职场文书
双拥工作宣传标语
2014/06/26 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
道德模范事迹材料
2014/12/20 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python