Python递归、lambda和高阶函数

一、递归

递归特点:

  • 函数内部自己调用自己
  • 必须有出口
def return_num(num):
    if num == 1:
        return 1
    return num + return_num(num -1)
result = return_num(3)
print(result)

注意:函数返回是返回到该函数调用的地方。

二、lambda表达式(匿名函数)

1. lambda应用场景

如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化

2. lambda语法
lambda 参数列表 : 表达式
fn = lambda: 100
print(fn)	# 打印的是地址
print(fn())	# 100

注意:

  1. lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。
  2. lambda表达式能接收任何数量的参数,但只能返回一个表达式的值。
  3. 直接打印lambda表达式,输出的是此lambda的内存地址。
  1. 计算两个数之和
fn = lambda a, b: a + b
print(fn(2, 9))
3. lambda的参数形式
  • 无参数
fn = lambda: 100
print(fn())
  • 一个参数
fn = lambda a: a
print(fn("张飞"))
  • 默认参数(缺省参数)
fn = lambda a, b, c=50: a + b + c
print(fn(10, 25))	# 85
print(fn(100, 200, 300))	# 600
  • 不定长位置参数: *args
fn = lambda *args: args
print(fn())		# ()
print(fn(10, 20, 60))	# (10,20,60)

注意:这里的可变参数传入到lambda之后,返回值为元组。

  • 不定长关键字参数:**kwards
fn = lambda **kwargs: kwargs
print(fn(name="Python", age=18))	# {'name': 'Python', 'age': 18}
4. lambda的应用
  • 带判断的lambda
fn = lambda a, b: a if a > b else b
print(fn(100, 500))
  • 列表数据按照字典的key的值排序
student = [{"name": "张飞", "age": 28},
           {"name": "刘备", "age": 25},
           {"name": "关羽", "age": 36}]

student.sort(key=lambda x: x["name"], reverse=True)
print(student)

student.sort(key=lambda x: x["age"], reverse=True)
print(student)

三、高阶函数

把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指的这种高度抽象的编程范式。

# f 是第三个参数,用来接收传进来的函数
def add_num(a, b, f):
    return f(a) + f(b)
print(add_num(-1.1, 1.9, abs))	# 3
print(add_num(2.4, 1.9, round)) # 4
1. 内置高阶函数
  • map()
    map(func,lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回。
# 计算list1序列中各个数字的2次方
list1 = [1, 3, 5, 7, 9]
def fun(x):
    return x ** 2
result = map(fun, list1)  # 返回一个迭代器
print(list(result))
  • reduce()
    reduce(func,lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累计计算。

注意:reduce()传入的参数func必须接收2个参数。

# 求序列中元素累计之和
import functools

list1 = [1, 2, 3, 4, 5]
def func(a, b):
    return a + b
result = functools.reduce(func,list1)
print(result)	# 15
  • filter()
    filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换成列表,可以使用list()来转换。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def func(x):
    return x % 2 == 0

result = filter(func, list1)
print(list(result)) # [2, 4, 6, 8, 10]

猜你喜欢

转载自blog.csdn.net/weixin_38739598/article/details/107820804