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

name = 'xiaoming'def change_name():name = 'sthu'print('在change_name里的name:',name)change_name()  # 调用函数
print("在外面的name:",name)

运行结果如下:

在change_name里的name: sthu
在外面的name: xiaoming

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

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

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

'''
Python大型免费公开课,适合初学者入门
加QQ群:579817333 获取学习资料及必备软件。
'''
age = 15
def func():print('第一层age:',age)  # 第一层age: 15def func2():print("func2中的age:",age)  # func2中的age: 15  # 看到没有,如果当前作用域里没有age变量,那么它就会往上找def func3():age = 84print("func3中的age:",age)  # func3中的age: 84func3()  # 调用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 = 22def func():level = 'L1'n = 33print(locals())  # {'n': 33, 'level': 'L1'}  在之前说过在python中,一个函数就是一个作用域,这就很完美的体现了def outer():n = 44level = 'L2'print(locals(),n)  # {'level': 'L2', 'n': 44} 44def inner():level = 'L3'print(locals(),n) # {'level': 'L3', 'n': 44} 44inner()outer()func()

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

python基础教程:函数作用域相关推荐

  1. 【爆肝更新】Python基础教程:第五章_Python函数

    原创:公众号 数据说话 [爆肝更新]Python基础教程:第五章_Python函数 函数介绍 学习目标: 快速体验一下函数的使用 了解函数的作用. 函数:是组织好的,可重复使用的,用来实现特定功能的代 ...

  2. python基础教程书籍推荐-入门python有什么好的书籍推荐?

    Python编程语言有许多语法结构.标准库函数和交互式开发环境功能.好在,你可以忽略大多数内容.你只需要学习部分内容,就能编写一些方便的小程序. 但在动手之前,你必须学习一些基本编程概念.就像魔法师培 ...

  3. python基础教程pdf百度云-《Python基础教程(第3版)》PDF高清版

    <python基础教程第3版>PDF高清版  百度云资源,内涵教材源代码 百度云链接:百度云盘 提取码:7r7o 编辑推荐 久负盛名的Python入门经典,是非常优秀的基础教程,深入浅出, ...

  4. python基础教程第三版怎么样-Python基础教程(第三版)(七)再谈抽象

    菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...

  5. python基础教程视频(全13集)-Python基础视频教程全集

    原标题:Python基础视频教程全集 Python编程语言的定位是"优雅"."明确"."简单",所以对于Python初学者来说,学起来没有那 ...

  6. python基础教程电子版-Python基础教程(第2版 修订版) pdf

    Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识1 1.1安装Python1 1.1.1Windows1 1.1.2Linux和UNIX3 1.1.3苹果机(Macintosh ...

  7. python基础教程-《Python基础教程(第3版)》PDF高清版

    <python基础教程第3版>PDF高清版  百度云资源,内涵教材源代码 百度云链接:百度云盘 提取码:7r7o 编辑推荐 久负盛名的Python入门经典,是非常优秀的基础教程,深入浅出, ...

  8. python基础教程视频-Python基础视频教程全集

    原标题:Python基础视频教程全集 Python编程语言的定位是"优雅"."明确"."简单",所以对于Python初学者来说,学起来没有那 ...

  9. python基础教程第三版-Python基础教程(第三版)(七)再谈抽象

    菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...

  10. python基本代码教程-Python基础教程(第3版)

    Python基础教程(第3版) 第2版前言 第1版前言 引言 1 快速上手:基础知识 1.1 交互式解释器 1.2 算法是什么 1.3 数和表达式 十六进制.八进制和二进制 1.4 变量 1.5 语句 ...

最新文章

  1. 图片上传 fastDFS
  2. strcpy和strncpy区别 memcpy strcpy strncpy lstrcpy lstrncpy wstrcpy, memmove
  3. JDBC的批处理操作
  4. 为什么不用简书写文章
  5. oracle高级复制管理里面,配置高级复制问题,请大家指点!
  6. Git常用命令与基本操作
  7. linux下查看系统socket读写缓冲区
  8. java学习 hibernate 持久态和瞬时态
  9. UGUI实现摇杆(模仿太极熊猫)
  10. Atitit。Tree文件解析器的原理流程与设计实现  java  c# php js
  11. 手写基于NIO的迷你版tomcat
  12. 发布项目,Upload AppStore解决ITMS-90096问题
  13. 深入理解 Plasma(四)Plasma Cash
  14. 连接数据库出现错误代码为18456
  15. 双层pdf-不用手动添加目录超链接教程
  16. Hive环境搭建--轻量级安装so easy!
  17. 感谢信 | 2023一封封双向奔赴的温暖纷至沓来
  18. 各大IT公司2012校园招聘笔试面试整理
  19. C语言中指针*p、p以及p之间的区别以及*p和**p的区别
  20. linux mandatory

热门文章

  1. python__基础 : 类的__init__,__str__,__del__方法
  2. Makefile 自动产生依赖
  3. 大数据之数据库mysql优化实战(一)
  4. “leave the world behind”十一快乐出行
  5. 单片机数据转换php,51单片机之数据转移指令MOV、MOVX、MOVC等
  6. 标准评分卡分数计算原理_评分卡模型监控(前端分析)
  7. POD – Proof of Delivery
  8. 35、Power Query-分组中国式排名
  9. 试图更改利润中心,但物料库存仍然存在
  10. 如何重开固定资产会计年度