目录

一、匿名函数

二:匿名函数 + 内置函数

三、递归函数

 

 

一、匿名函数

作用:简化函数定义

格式:lambda 参数1[,参数2,…]: 运算
我们可以看到匿名函数和add函数的功能是一样的,通常不需要频繁调用且函数体简单的可以用匿名函数。 下面我们来类比一下:

  • 匿名函数没有名字,故也不存在类似add这样的函数名。
  • 我们可以看到lambda关键字后面是参数列表,相当于add的形参列表
  • 我们可以看到:后面的a+b,其实就是针对参数的运算并返回, 类似于return
  • 匿名函数的使用,我们可以看到可以通过add()调用,也可以将add的地址赋给f,通过f()调用。匿名函数lambda a, b: a + b同样也可以将其赋给s,通过s()调用,我们注意一下,这边s = lambda a, b: a + b,仅相当于定义匿名函数,并将该函数的地址赋给s,并没有调用
def add(a, b):
    return a + b
f = add
print(f, add, f(1, 3), add(1, 3))

s = lambda a, b: a + b
print(s, s(1, 3))
<function add at 0x12ab16700> <function add at 0x12ab16700> 4 4
<function <lambda> at 0x12ab16160> 4

函数可以作为另一个函数的实参,匿名函数也是函数,所以匿名函数可以作为参数传递给另一个函数func,并且在func中可以调用。

def func(x, y, lambda_func):
    print(lambda_func)
    print(lambda_func(x, y))
func(1, 2, lambda a, b: a + b)
<function <lambda> at 0x12b2c4550>
3

二:匿名函数 + 内置函数

def compare(item):
    return item.get('a')
list_dic = [{'a': 2, 'b': 3}, {'a': 0, 'b': 7}, {'a': 5, 'b': 1}]
print(max(list_dic, key=lambda item: item.get('a')))
print(max(list_dic, key=compare))
{'a': 5, 'b': 1}
{'a': 5, 'b': 1}

map() 会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

def add_2(item):
    return item + 2
l = [1, 2, 3, 4]
print(list(map(lambda item: item + 2, l)))
print(list(map(add_2, l)))
[3, 4, 5, 6]
[3, 4, 5, 6]

 lambda关键字也可以与if语句结合使用,例如,下面的表示对奇数加一。

s = lambda x: x if x % 2 == 0 else x + 1
print(s(11))
l = [1, 2, 7, 4]
print(list(map(lambda x: x if x % 2 == 0 else x + 1, l)))

reduce() 函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:

  • 用传给 reduce 中的函数 function(有两个参数)
  • 先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

若有初始值,函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:

  • 用传给 reduce 中的函数 function(有两个参数)
  • 先对初始值和集合中的第 1个元素进行操作,得到的结果再与第2个数据用 function 函数运算,最后得到一个结果。
from functools import reduce
t1 = (1, )
print(reduce(lambda x, y: x - y, t1))
print(reduce(lambda x, y: x - y, t1, 10)) 

print('=' * 30)

t1 = [1, 2, 3, 5]
print(reduce(lambda x, y: x - y, t1)) # 1 - 2 = -1, -1 - 3 = -4, -4 - 5 = -9
print(reduce(lambda x, y: x - y, t1, 10)) # 10 -1 = 9, 9 - 2 = 7, 7 - 3 = 4, 4 - 5 = -1
1
9
==============================
-9
-1

filter: filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

students= [{'name': 'Lily', 'age': 20}, {'name': 'Lucy', 'age': 22}, 
           {'name': 'Ami', 'age': 19}, {'name': 'Jolie', 'age': 17}]
filter_stu =list(filter(lambda stu: stu['age'] >= 20, students))
sorted_stu = sorted(students, key=lambda stu: stu.get('age'))
print('students: {}'.format(students))
print('filter_stu: {}'.format(filter_stu))
print('sorted_stu: {}'.format(sorted_stu))
students: [{'name': 'Lily', 'age': 20}, {'name': 'Lucy', 'age': 22}, {'name': 'Ami', 'age': 19}, {'name': 'Jolie', 'age': 17}]
filter_stu: [{'name': 'Lily', 'age': 20}, {'name': 'Lucy', 'age': 22}]
sorted_stu: [{'name': 'Jolie', 'age': 17}, {'name': 'Ami', 'age': 19}, {'name': 'Lily', 'age': 20}, {'name': 'Lucy', 'age': 22}]

三、递归函数

# 计算0-10的和
def sum(i):
    if i == 10:
        return 10
    return sum(i + 1) + i
print(sum(0))

def sum(i):
    if i == 0:
        return 0
    return sum(i - 1) + i
print(sum(10))
55
55

关于递归过程的解释 

 

 

 

 

本文地址:https://blog.csdn.net/qq_xuanshuang/article/details/109914713