py11_函数对象嵌套名称空间与作用域
Posted smart1san
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了py11_函数对象嵌套名称空间与作用域相关的知识,希望对你有一定的参考价值。
一、函数对象
函数是一类对象的含义是函数可以被当作各种数据来进行处理
1.引用
2.当作参数传给另一个函数
3.当作函数的返回值
4.当作容器类型的元素(如:list)
1 def pay(): 2 print("支付") 3 def withdraw(): 4 print("取款") 5 def transfer(): 6 print("转账") 7 func_dic={ 8 "1":pay, 9 "2":withdraw, 10 "3":transfer, 11 } 12 while True: 13 msg=""" 14 1 支付 15 2 取款 16 3 转账 17 q 退出 18 """ 19 print(msg) 20 choice=input(">>>:").strip() 21 if choice=="q":break 22 if choice not in func_dic: 23 print("指令不存在") 24 continue 25 func_dic[choice]() # 选择指令开始执行函数
二、函数的嵌套
1. 函数嵌套的定义
def func1(): def func2(): print("func2") func2() func1()
2.函数嵌套的调用
def max2(x,y): if x > y : return x else: return y def max4(a,b,c,d): res1=max2(a,b) res2=max2(res1,c) res3=max2(res2,d) return res3 print(max4(99,88,77,66))
三、名称空间域作用域
1. 什么是名称空间?
名称空间是存放名字(变量名)与值(变量值)绑定关系的地方。
2. 名称空间分成三大类
2.1 内置名称空间
作用:用来存放python解释器自带的名字
生命周期:在解释器启动时生效,在解释器关闭时失效
2.2 全局名称空间
作用:除了内置与局部的名字外,剩下的都是全局名字
生命周期:在文件执行时生效,在文件执行完毕时失效
2.3 局部名称空间
作用:用于存放函数调用期间函数体产生的名字
生命周期:在文件执行过程中,只有调用了某个函数才会临时生效,在函数执行完毕后失效
???注意:
三种名称空间的加载顺序与名字查找顺序时相反的
加载顺序:内置→全局→局部
查找名字顺序:局部←全局←内置
3.作用域(重点????)
作用域即产生作用的范围
3.1分类
全局作用域(内置名称空间与全局名称空间)
全局有效,全局存活
局部作用域(局部名称空间)
局部有效,临时存活
作用域关系:在函数定义阶段就已经固定完成了,只要调用函数就需到定义阶段去找作用域关系
3.2 global
3.2.1 在局部想要修改全局的可变类型,不需要借助任何声明,可以直接修改。
3.2.2 在局部想要修改全局的不可变类型,需要借助global声明,声明成全局变量就可以直接修改了。
以上是关于py11_函数对象嵌套名称空间与作用域的主要内容,如果未能解决你的问题,请参考以下文章
Day19_名称空间和作用域_函数的嵌套_函数第一类对象的使用_闭包函数