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 相关文章推荐
数据挖掘之Apriori算法详解和Python实现代码分享
Nov 07 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
python实现录音小程序
Oct 26 Python
Python函数中不定长参数的写法
Feb 13 Python
python实现控制COM口的示例
Jul 03 Python
python实现PID算法及测试的例子
Aug 08 Python
Python 字符串池化的前提
Jul 03 Python
如何验证python安装成功
Jul 06 Python
python 决策树算法的实现
Oct 09 Python
python基于tkinter制作无损音乐下载工具
Mar 29 Python
python中opencv实现图片文本倾斜校正
Jun 11 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设计模式中工厂模式详细介绍
2013/05/15 PHP
深入PHP magic quotes的详解
2013/06/17 PHP
php生成RSS订阅的方法
2015/02/13 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
浅析基于WEB前端页面的页面内容搜索的实现思路
2014/06/10 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
python爬取网站数据保存使用的方法
2013/11/20 Python
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
简短的公司员工自我评价分享
2013/11/13 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
2015年招聘工作总结
2014/12/12 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
2019同学聚会主持词
2019/05/06 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL