12、函数对象以及函数嵌套

一、函数对象

函数是第一类对象,即函数可以当做数据(变量)使用

1、可以被赋值引用

def func():
    print('你好!')


f = func
f()

2、可以被当做参数传给另外一个函数

def func():
    print('你好!')


def foo(a):
    a()


foo(func)

3、可以当做函数的返回值

def func():
    print('你好!')


def foo(func):
    return func


res = foo(func)
res()

4、可以当做容器类型的元素

def func():
    print('你好!')


l = [func]

l[0]()

5、利用以上特性,优雅的取代多分支的if

def login():
    print('登录'.center(50, '*'))


def register():
    print('注册'.center(50, '*'))


def transfer():
    print('转账'.center(50, '*'))


def withdraw():
    print('提款'.center(50, '*'))


func_dic = {
    '1': ['登录', login],
    '2': ['注册', register],
    '3': ['转账', transfer],
    '4': ['提款', withdraw]
}

while True:
    print("0 退出")
    for k in func_dic:
        print(k, func_dic[k][0])

    choice = input('输入命令编号:').strip()
    if choice == '0':
        break
    if choice in func_dic:
        func_dic[choice][1]()
    else:
        print('输入功能错误')

我们每次添加新功能时,只需要编写函数,然后在字典里添加上新功能就行了,比if判断方便不少


二、函数嵌套

函数嵌套就是在函数内又定义了N个函数

1、函数嵌套定义

# 定义在函数内的函数只能在函数内使用,比如说下面
def f1():
    def f2():
        def f3():
            print('我是f3肚子里的函数')
        f3()
    f2()  # 调用f2只能在f1的‘肚子里’


f1()

2、函数嵌套调用

# 比较数字大小
def max(x, y):
    if x > y:
        return x
    else:
        return y


def max4(a, b, c, d):
    res1 = max(a, b)
    res2 = max(res1, c)
    res3 = max(res2, d)
    return res3


print(max4(1, 2, 3, 4))
posted @ 2021-03-27 23:49  黑影Poco  阅读(82)  评论(0)    收藏  举报