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 相关文章推荐
wxpython学习笔记(推荐查看)
Jun 09 Python
python使用生成器实现可迭代对象
Mar 20 Python
python中pip的安装与使用教程
Aug 10 Python
浅谈pycharm下找不到sqlalchemy的问题
Dec 03 Python
Python中Unittest框架的具体使用
Aug 27 Python
Python日志处理模块logging用法解析
May 19 Python
Python collections模块的使用方法
Oct 09 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
python opencv通过按键采集图片源码
May 20 Python
Python 如何解决稀疏矩阵运算
May 26 Python
5行Python代码实现一键批量扣图
Jun 29 Python
Python实现Hash算法
Mar 18 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
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
php array_udiff_assoc 计算两个数组的差集实例
2016/11/12 PHP
JavaScript URL参数读取改进版
2009/01/16 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
最全面的JS倒计时代码
2016/09/17 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
儿童学习python的一些小技巧
2018/05/27 Python
Python 类的特殊成员解析
2018/06/20 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
2020/06/09 Python
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
关于母亲节的感言
2014/02/04 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
社区节水倡议书
2015/04/29 职场文书
新学期开学寄语2016
2015/12/04 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书