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_函数对象嵌套名称空间与作用域的主要内容,如果未能解决你的问题,请参考以下文章

python基础:函数对象函数嵌套名称空间与作用域装饰器

Day19_名称空间和作用域_函数的嵌套_函数第一类对象的使用_闭包函数

python学习第十天,名称空间与作用域,函数的嵌套,global 和 nonlocal

python之旅:函数对象函数嵌套名称空间与作用域装饰器

函数对象+作用域day11

函数对象函数嵌套名称空间与作用域闭包函数装饰器