Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)...
Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)
名称空间(命名空间):
当程序运行时,代码从上至下一次读取,遇到变量与值,
他会在内存中开辟一个空间,存放变量与值的内存地址的对应关系。
这样存储变量与值得对应关系的空间叫做名称空间(命名空间)。
内置名称空间
内置名称空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法。
全局名称空间
代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做全局命名空间
局部名称空间
当解释器遇到函数时,他会将函数名存储在内存中,但是对于函数体漠不关心。
当函数执行时,他会通过函数名找到函数体,然后将函数体里面的变量等对应关系存放在一个
临时开辟的空间中,随着函数的结束,临时的空间关闭,这样的空间叫做局部命名空间。
加载顺序:
内置名称空间 ---> 全局名称空间(程序运行时) ---->局部名称空间(函数执行时)
作用域:
全局作用域:内置名称空间 全局名称空间
局部作用域:局部名称空间
L local
E eclose
G global
B Built-in
取值顺序(单项):
局部名称空间(函数执行时) ---> 全局名称空间 ---> 内置名称空间
在局部调用:局部命名空间->全局命名空间->内置命名空间
在全局调用:全局命名空间->内置命名空间
在找寻变量时,从小范围,一层一层到大范围去找寻。
函数的作用域链:
小范围作用域可以使用大范围的变量,但是反之不行,他是单向的。
sum = 666 # globaldef func1():sum = 555 # ecloseprint(sum)def inner():passsum = 111 # local# print(sum) inner()func1()
global,nonlocal
global
如何在全局名称空间里得到局部名称空间的变量
1,return
2,global
1,在局部作用域中声明一个全局变量。
2,在局部作用域中,更改一个全局变量。
补充:
对于可变的数据类型,函数中如果对其进行操作,改变全局不用引用global. (append,pop....)
l1 = [1, 2, 3] def func1():l1.append(666) func1() print(l1)
nonlocal
1,不能改变一个全局变量。
2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,
并且引用的哪层,从那层及以下此变量全部发生改变。
def func1():name = 'alex'print(name) # 1, alexdef inner():nonlocal namename = '老男孩'print(name) # 2 老男孩 inner()print(name) # 3,alex 老男孩 func1()
def add_b():b = 42def do_global():b = 10 # 这一层print(b) # 1,10def dd_nonlocal():nonlocal bb = b + 20print(b) # 2,30 dd_nonlocal()print(b) # 3,30 do_global()print(b) #4,42 add_b()
转载于:https://www.cnblogs.com/eailoo/p/9019730.html
Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)...相关推荐
- python 类的执行中保部存值_python函数名称空间与作用域、闭包
一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...
- python之函数名称空间,作用域,嵌套函数
目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1():def f ...
- python函数作用域与闭包_python函数名称空间与作用域、闭包
一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...
- python基础教程:名称空间与作用域
函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况. def f1():def f2():print('from f2')f2()f2() # Nam ...
- 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结...
03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...
- python中嵌套函数的应用实例-实例详解python函数的对象、函数嵌套、名称空间和作用域...
函数的对象 python中一切皆对象 函数对象的四大功能 引用 def f1(): print("from f1") f1() #调用函数 print(f1) print(&quo ...
- 函数的嵌套,名称空间和作用域
假如有一个函数,实现返回两个数中的较大值: def my_max(x,y):m = x if x>y else yreturn mbigger = my_max(10,20)print(bigg ...
- python的全称_python名称空间介绍
python名称空间介绍 名称空间 python 中名称空间分三种: 内置名称空间 全局名称空间 局部名称空间 内置名称空间: 原码里面的一些函数都是存在这个内存空间中,任何模块均可访问它,它存放着内 ...
- python 函数可以作为容器对象的元素_python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义...
复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...
最新文章
- C++ 函数的引用返回值
- 3.爱跑步的蜗壳人动态(下同)
- SVN 版本服务器搭配全过程详解(服务端、客户端)[转]
- exp4me 用java做的实用的csv导出程序 - 名传无线.freeness.yang
- java.logging的重定向?
- Git学习总结(18)——让你成为Git和GitHub大神的20个技巧
- android+获取图库图片+4.4,Android 从 Android 本地图库选择多个图片
- 兆易创新GD32系列单片机不同容量和启动文件之间的选择(GD32F10X_MD/GD32F10X_HD/GD32F10X_XD/GD32F10X_CL)
- 国内研究报告:区块链技术在票据P2…
- python颜色识别_OpenCV(Python)学习之识别图片特定颜色
- 高考数学圆锥曲线知识点:解题技巧
- 75道逻辑思维趣题,含答案
- word pdf 互转
- 文件描述符 fd 究竟是什么?
- 假设有一张纸可对折无限次,它的厚度为0.1毫米,珠穆朗玛峰的高度为8848.86米,求这张纸对折多少次后它的厚度会超过珠峰的高度。
- iOS 之电影播放器
- linux lvm分区表丢失,重启系统后lvm分区没了,附带错误信息
- jdk8 HashMap底层原理
- PS制作红色拟物化时钟icon图标
- 2021年N1叉车司机考试及N1叉车司机考试内容
热门文章
- Python数据类型转换详解(内附详细案例)
- 神经网络技巧篇之寻找最优超参数
- 我的世界基岩版json_我的世界基岩版下载_我的世界基岩版app下载_我的世界基岩版官网最新版下载-新手游网...
- myeclipse 2017 CI 中如何修改Servlet模板
- 注意一些坑,从app跳转到qq聊天界面。
- 曾鸣:为什么要让「听得见炮火的士兵」做决定?| 干货
- 正确地组织python项目的结构
- phpeclipse+xdebug配置
- VMware ESXI5.0的安装配置
- 艾伟_转载:.NET Discovery 系列之二--string从入门到精通(勘误版下)