高阶函数

函数做为变量

python中声明函数就是声明类型是function的变量,函数名就是变量名
普通的变量能做的事情,函数都可以

def fun():
    print('======')

print(id(fun), type(fun))        #1938944946248 <class 'function'>


# 用一个变量给另一个变量赋值
c = fun
print(c())                # ======
list1 = [fun, fun(), 10]        # <function fun1 at 0x0000027225B100D8>

# 做为函数的参数
def fun1():
    print('======')

def fun2(x):
    print(x)        # <function fun1 at 0x000001E7785600D8>

print(fun2(fun1))

# 变量做为函数的返回值
def fun4(x):
    def fun5():
        print('函数5',x)
    return fun5

fun4(2)()              # 函数5  2

实参高阶函数

    参数是函数的函数就是实参高阶函数
     python中内置的sorted、max、min、等函数、以及列表的sort方法都是实参高阶函数
    这些函数中都有一个参数key,要求船餐的时候传一个函数。这个函数需要一个参数和一个返回值,参数代表序列中的元素返回值是比较对象

num = [10, 17, 23, 45, 65, 23]
# 问题:按各位数之和从大到小排序
def func2(item):
    sum = 0
    for char in str(item):
        sum += int(char)
    return sum

num.sort(reverse=True, key=func2)
print(num)

dicts = [
    {'name': '小小1', 'score': 98},
    {'name': '小小2', 'score': 68},
    {'name': '小小3', 'score': 76},
    {'name': '小小4', 'score': 34}
]
dicts.sort(key=lambda wz_dict: wz_dict['score'])
print(dicts)

返回值高阶函数

    函数的返回值是函数,这样的函数就是返回值高阶函数

# 真正的返回值高阶函数
def func1():
    def func2():
        print('函数2')
    return func2

闭包

  • 什么是闭包
        闭包就是一个函数,这个函数需要满足一下两个条件:
            1.函数的返回值是声明在这个函数中的函数(内函数)
            2.这个内函数必须使用外函数中的临时变量(外函数中的局部变量)

  • 闭包的作用:
        保存临时变量的值(函数调用结束后,函数值的数据不销毁)

装饰器

装饰器是python的三大神器之一
装饰器 = 实参高阶函数 + 返回值高阶函数 + 糖语法
什么是装饰器:本质还是一个函数
装饰器的作用:在不修改函数的本身的前提下添加功能

语法:
    def 函数名1(参数1):
        def 函数名2(*args,**kwargs):
            函数体(添加功能的代码)
            (保证出现:参数1(*args, **kwargs))
    returns 函数名2

    @函数名1 -- 相当于-- 函数名3 = 函数名1(函数名3)
    声明需要添加功能的函数3
    函数3()

# 练习:写一个装饰器给函数添加权限
def passwords(fn):
    def test(*args, **kwargs):
        user_password = '123'
        password = input('请输入密码:')
        while True:
            if user_password == password:
                fn(*args, **kwargs)
                print('登录成功')
                break
            else:
                password = input('密码正确请重新输入:')
    return test

@passwords
def fun3(x, y):
    print(x + y)

fun3(10, 20)

回调函数

什么是回调函数:
    函数的调用是在其他函数的内部满足条件的时候自动调用的函数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容