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)...相关推荐

  1. python 类的执行中保部存值_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  2. python之函数名称空间,作用域,嵌套函数

    目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1():def f ...

  3. python函数作用域与闭包_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  4. python基础教程:名称空间与作用域

    函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况. def f1():def f2():print('from f2')f2()f2() # Nam ...

  5. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结...

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  6. python中嵌套函数的应用实例-实例详解python函数的对象、函数嵌套、名称空间和作用域...

    函数的对象 python中一切皆对象 函数对象的四大功能 引用 def f1(): print("from f1") f1() #调用函数 print(f1) print(&quo ...

  7. 函数的嵌套,名称空间和作用域

    假如有一个函数,实现返回两个数中的较大值: def my_max(x,y):m = x if x>y else yreturn mbigger = my_max(10,20)print(bigg ...

  8. python的全称_python名称空间介绍

    python名称空间介绍 名称空间 python 中名称空间分三种: 内置名称空间 全局名称空间 局部名称空间 内置名称空间: 原码里面的一些函数都是存在这个内存空间中,任何模块均可访问它,它存放着内 ...

  9. python 函数可以作为容器对象的元素_python第十二天, 三元表达式, 函数对象,名称空间与作用域,函数的嵌套定义...

    复习 1. 字符串的比较: 2. 函数的参数:形参与实参 3. 实参的分类:位置实参与关键字实参 4. 形参分类: 1.无值位置形参 2.有值位置形参 3.可变长位置形参 4.有无值关键字形参 5.可 ...

最新文章

  1. C++ 函数的引用返回值
  2. 3.爱跑步的蜗壳人动态(下同)
  3. SVN 版本服务器搭配全过程详解(服务端、客户端)[转]
  4. exp4me 用java做的实用的csv导出程序 - 名传无线.freeness.yang
  5. java.logging的重定向?
  6. Git学习总结(18)——让你成为Git和GitHub大神的20个技巧
  7. android+获取图库图片+4.4,Android 从 Android 本地图库选择多个图片
  8. 兆易创新GD32系列单片机不同容量和启动文件之间的选择(GD32F10X_MD/GD32F10X_HD/GD32F10X_XD/GD32F10X_CL)
  9. 国内研究报告:区块链技术在票据P2…
  10. python颜色识别_OpenCV(Python)学习之识别图片特定颜色
  11. 高考数学圆锥曲线知识点:解题技巧
  12. 75道逻辑思维趣题,含答案
  13. word pdf 互转
  14. 文件描述符 fd 究竟是什么?
  15. 假设有一张纸可对折无限次,它的厚度为0.1毫米,珠穆朗玛峰的高度为8848.86米,求这张纸对折多少次后它的厚度会超过珠峰的高度。
  16. iOS 之电影播放器
  17. linux lvm分区表丢失,重启系统后lvm分区没了,附带错误信息
  18. jdk8 HashMap底层原理
  19. PS制作红色拟物化时钟icon图标
  20. 2021年N1叉车司机考试及N1叉车司机考试内容

热门文章

  1. Python数据类型转换详解(内附详细案例)
  2. 神经网络技巧篇之寻找最优超参数
  3. 我的世界基岩版json_我的世界基岩版下载_我的世界基岩版app下载_我的世界基岩版官网最新版下载-新手游网...
  4. myeclipse 2017 CI 中如何修改Servlet模板
  5. 注意一些坑,从app跳转到qq聊天界面。
  6. 曾鸣:为什么要让「听得见炮火的士兵」做决定?| 干货
  7. 正确地组织python项目的结构
  8. phpeclipse+xdebug配置
  9. VMware ESXI5.0的安装配置
  10. 艾伟_转载:.NET Discovery 系列之二--string从入门到精通(勘误版下)