高级函数是个啥?

1.高阶函数

1.1什么是高阶函数?

  • 第一个特点 接收一个或者多个函数作为参数
  • 第二个特点 将函数作为函数值返回(也称为闭包)
  • 以上特点符合一个,就为高阶函数

当我们使用一个函数作为参数,实际上是指将指定的代码传递进了目标函数

''' 
定义一个函数
可以将指定的列表中的所有偶数,
保存到一个新的列表中返回
'''
list = [1,2,3,4,5,6,7,8,9,10]

# 定义一个函数 用来检测一个偶数
def fn1(j):
    if j % 2 == 0:
        return True

# 定义一个 查找3的倍数的函数
def fn3(n):
    if n % 3 == 0:
        return True

# 定义一个大于5的函数
def fn2(k):
    if k > 5:
        return True
    return False
'''
当我们使用一个函数作为参数,
实际上是指将指定的代码传递进了目标函数
'''
def fn (func,list):
    # 参数func 调用的函数 
    # list 要进行筛选列表
    # 创建一个新的列表
    new_list = []
    for i in list:
        if func(i):
            new_list.append(i)

    return new_list
print(fn(fn3,list)) # [3, 6, 9]

2.闭包

  • 通过闭包可以创建一些只有当前函数能访问的变量
  • 可以将一些私有数据藏到闭包中
# 求多个数的平均值
def make_average():
    nums = []

    #定义一个函数计算平均值
    def average(i):
        #将num添加到列表中
        nums.append(i)
        #求平均值
        return sum(nums)/len(nums)
    return average
vaule = make_average()
print(vaule(1),vaule(2),vaule(3)) #
  • 形成闭包的条件
    • 函数嵌套
    • 内部函数作为返回值返回
    • 内部函数必须使用外部函数的变量

3.装饰器的引入

当我直接修改某个程序时,直接修改会残生几个问题:

  • 如果修改的函数较多,修改起来非常麻烦
  • 不方便后期维护
  • 直接修改违反开闭原则(ocp)
    • 程序设计要求开发对程序的扩展 要关闭对程序的修改

4.装饰器的引用

  • 简单地说,装饰器可以不改变原函数的情况下,来对函数进行扩展。
"""
用来对其他函数进行扩展
在函数执行的时候 提示开始执行
执行完毕提示 提示执行完毕
"""
def fn():
    print("我是fn函数")
# 求任意两个数的和
def add(a,b):
    return a + b

"""
start_end(old) 函数就是装饰器
"""
def start_end(old):
# 参数 old 表示要扩展的函数
    # 创建一个新函数
    def new_function(*args,**kwargs):
        print("开始执行")
        result = old(*args,**kwargs)
        print("执行完毕")
        return result

    return new_function
f = start_end(add)
r = f(15,56)
print(r) #执行结果如下
'''
开始执行
执行完毕
71
'''



@start_end  # 另一种调用方法法
# 求任意两个数的积
def mul(a,b):
    return a * b
k = mul(15,56)
print(k) #执行结果如下
'''
开始执行
执行完毕
840
'''


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章