1.8 - 高阶函数与递归函数

1.8.1 高阶函数

  高阶函数:其 形参或返回值 为函数。

# filter(function, iterable) 
# 将可迭代对象中的元素依次作为实参传递给指定的形参函数function调用,返回新的可迭代对象
tup = (1, 2, 0, False, True, -1)
obj = filter(lambda x:x-1 ,  tup) 
print(list(obj))  # [2, 0, False, -1] 


# map(function,  iterable) 
# 将可迭代对象中的元素依次作为实参传递给指定的形参函数function调用,返回新的可迭代对象
lst = [1, 2, 3]
obj2 = map(lambda x:x**2, lst)
print(list(obj2))


# reduce(function, iterable [, initial]) 
# 将可迭代对象中的元素 从左向右 依次 执行function函数,返回最后一次运算的值
from functools import reduce
lst = [1, 2, 3] 
obj3 = reduce(lambda x,y:x+y , lst)
print(obj3)

 当高阶函数的参数为函数function的时候,高阶函数传入的iterable的个数必须与形参function可以接收的参数个数相等。【在形参函数function执行的过程,会对每个iterable参数取zip作为实参,如果iterable的长度不一致,则以 最短的 一个iterable为准。】

# 高阶函数的形参函数接收多个参数
# 当高阶函数接收了多个iterable参数,在形参函数function执行的过程,会对每个iterable的元素 取 zip,依次传入function执行。

lst1 = [1, 2, 3]
lst2 = [2, 2, 2]
obj4 = map(pow, lst1, lst2)
# 实质执行过程为:[ pow(1,2) , pow(2,2) , pow(3,2) ]
print(list(obj4))  # [1, 4, 9] 

 

1.8.2 递归函数

  函数的返回值为自身。(递归函数一定要设置递归出口,即:返回值的触发条件)

  汉诺塔问题,斐波那契数列,动态规划算法等。

 

posted @ 2024-01-15 18:46  橘子葡萄火龙果  阅读(18)  评论(0)    收藏  举报