函数对象(函数名+嵌套)

函数对象(函数名+嵌套)

函数对象

用法如下
"""函数名遇到括号就会调用!!!"""

用法1:函数名可以当做变量名赋值
image
用法2:函数名还可以当做函数的实参

# def index():
#     print('from index')
# def func(a):
#     print(a)
#     a()
#     print('from func')
# func(index)

用法3:函数名还可以当做函数返回值

# def index():
#     print('from index')
# def func():
#     print('from func')
#     return index
# res = func()  # 调用func并接受func的返回值
# res()

用法4:函数名可以当做容器类型(内部可以存放多个数据)的元素
def index():
print('from index')
l = [111, 222, 333, index()]
print(l)

函数的嵌套调用

嵌套调用:函数内部调用其他函数

def index():
    print('from index')
def func():
    index()
    print('from func')
func()

def my_max(a, b):
    if a > b:
        return a
    return b

def many_max(x,y,z,m):
    res = my_max(x,y)
    res1 = my_max(res,z)
    res2 = my_max(res1,m)
    return res2
ret = many_max(1,2,3,4)
print(ret)7

函数的嵌套定义

函数体内部定义其他函数
将复杂的功能全部隐藏起来 暴露一个简单的接口

def all_func(type):
    def register():
        print('注册功能')
    def login():
        print('登录功能')
    def transfer():
        print('转账功能')
    def shopping():
        print('购物功能')
    # 这里仅仅是延时嵌套定义的现象 暂不考虑优化
    if type == '1':
        register()
    elif type == '2':
        login()
    elif type == '3':
        transfer()
    elif type == '4':
        shopping()
    else:
        print('不知道啥功能')

all_func('3')

闭包函数

闭:定义在函数内部的函数
包:内部函数使用了外部函数名称空间中的名字
只有符合上述两个特征的函数才可以称之为"闭包函数"

def outer():
    x = 222
    def index():
        print('from index', x)
    return index

闭包函数其实是给函数传参的第二种方式
方式1:函数体代码需要用到数据 直接在括号内定义形参即可

def index(username):
    print(username)
def my_max(a, b):
    if a > b:
        return a
    return b

方式2:利用闭包函数

def outer(x,y):
    # x = 2
    # y = 40
    def my_max():
        if x > y:
            return x
        return y
    return my_max
res = outer(2,40)
print(res())
print(res())
posted @ 2021-11-16 17:15  Panda_Xin  阅读(67)  评论(0编辑  收藏  举报