python基础教程:函数作用域
在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基础教程:函数作用域相关推荐
- 【爆肝更新】Python基础教程:第五章_Python函数
原创:公众号 数据说话 [爆肝更新]Python基础教程:第五章_Python函数 函数介绍 学习目标: 快速体验一下函数的使用 了解函数的作用. 函数:是组织好的,可重复使用的,用来实现特定功能的代 ...
- python基础教程书籍推荐-入门python有什么好的书籍推荐?
Python编程语言有许多语法结构.标准库函数和交互式开发环境功能.好在,你可以忽略大多数内容.你只需要学习部分内容,就能编写一些方便的小程序. 但在动手之前,你必须学习一些基本编程概念.就像魔法师培 ...
- python基础教程pdf百度云-《Python基础教程(第3版)》PDF高清版
<python基础教程第3版>PDF高清版 百度云资源,内涵教材源代码 百度云链接:百度云盘 提取码:7r7o 编辑推荐 久负盛名的Python入门经典,是非常优秀的基础教程,深入浅出, ...
- python基础教程第三版怎么样-Python基础教程(第三版)(七)再谈抽象
菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...
- python基础教程视频(全13集)-Python基础视频教程全集
原标题:Python基础视频教程全集 Python编程语言的定位是"优雅"."明确"."简单",所以对于Python初学者来说,学起来没有那 ...
- python基础教程电子版-Python基础教程(第2版 修订版) pdf
Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识1 1.1安装Python1 1.1.1Windows1 1.1.2Linux和UNIX3 1.1.3苹果机(Macintosh ...
- python基础教程-《Python基础教程(第3版)》PDF高清版
<python基础教程第3版>PDF高清版 百度云资源,内涵教材源代码 百度云链接:百度云盘 提取码:7r7o 编辑推荐 久负盛名的Python入门经典,是非常优秀的基础教程,深入浅出, ...
- python基础教程视频-Python基础视频教程全集
原标题:Python基础视频教程全集 Python编程语言的定位是"优雅"."明确"."简单",所以对于Python初学者来说,学起来没有那 ...
- python基础教程第三版-Python基础教程(第三版)(七)再谈抽象
菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...
- python基本代码教程-Python基础教程(第3版)
Python基础教程(第3版) 第2版前言 第1版前言 引言 1 快速上手:基础知识 1.1 交互式解释器 1.2 算法是什么 1.3 数和表达式 十六进制.八进制和二进制 1.4 变量 1.5 语句 ...
最新文章
- 图片上传 fastDFS
- strcpy和strncpy区别 memcpy strcpy strncpy lstrcpy lstrncpy wstrcpy, memmove
- JDBC的批处理操作
- 为什么不用简书写文章
- oracle高级复制管理里面,配置高级复制问题,请大家指点!
- Git常用命令与基本操作
- linux下查看系统socket读写缓冲区
- java学习 hibernate 持久态和瞬时态
- UGUI实现摇杆(模仿太极熊猫)
- Atitit。Tree文件解析器的原理流程与设计实现 java c# php js
- 手写基于NIO的迷你版tomcat
- 发布项目,Upload AppStore解决ITMS-90096问题
- 深入理解 Plasma(四)Plasma Cash
- 连接数据库出现错误代码为18456
- 双层pdf-不用手动添加目录超链接教程
- Hive环境搭建--轻量级安装so easy!
- 感谢信 | 2023一封封双向奔赴的温暖纷至沓来
- 各大IT公司2012校园招聘笔试面试整理
- C语言中指针*p、p以及p之间的区别以及*p和**p的区别
- linux mandatory
热门文章
- python__基础 : 类的__init__,__str__,__del__方法
- Makefile 自动产生依赖
- 大数据之数据库mysql优化实战(一)
- “leave the world behind”十一快乐出行
- 单片机数据转换php,51单片机之数据转移指令MOV、MOVX、MOVC等
- 标准评分卡分数计算原理_评分卡模型监控(前端分析)
- POD – Proof of Delivery
- 35、Power Query-分组中国式排名
- 试图更改利润中心,但物料库存仍然存在
- 如何重开固定资产会计年度