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获取指定网页上所有超链接的方法
Apr 04 Python
利用Python爬取可用的代理IP
Aug 18 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
Python3.5装饰器典型案例分析
Apr 30 Python
Django Admin中增加导出Excel功能过程解析
Sep 04 Python
Flask中endpoint的理解(小结)
Dec 11 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
python编程的核心知识点总结
Feb 08 Python
用 Python 元类的特性实现 ORM 框架
May 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
超级简单的发送邮件程序
2006/10/09 PHP
smarty简单应用实例
2015/11/03 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
php中错误处理操作实例分析
2019/08/23 PHP
MooTools 1.2介绍
2009/09/14 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
javascript ajax 仿百度分页函数
2013/10/29 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
简单介绍Python中的struct模块
2015/04/28 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
Python 忽略warning的输出方法
2018/10/18 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
煤矿班组长的职责
2013/12/25 职场文书
优秀语文教师事迹
2014/05/18 职场文书
司法助理专业自荐书
2014/06/13 职场文书
大学英语专业求职信
2014/06/21 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
2014年员工工作总结范文
2014/11/18 职场文书