递归、lambda表达式、高阶函数
递归
特点:
- 函数内部自己调用自己
- 必须有出口
lambda表达式(匿名函数)
应用场景:如果一个函数有一个返回值,并且只有一句代码,可以使用lambda表达式简化
语法:
lambda 参数列表:表达式(必须有返回值)
注意:
- lambda表达式的参数可有可无,函数的参数在lambda表达式中完全使用过
- lambda表达式能接收任何数量的参数但只能返回一个表达式的值
例子1:
def func1():
return 100
print(func1) #<function func1 at 0x0190C4A8>
print(func1()) #100
func = lambda:100
print(func) #<function <lambda> at 0x03EFD850>
print(func()) # 100
例子2:
def add(adef add(a, b):
return a + b
result = add(2, 3)
print(result) #5
fnc1 = lambda a, b: a + b
print(fnc1(1,2))) #3
例子3:
# 无参数
func1 = lambda:100
print(func1()) # 100
# 一个参数
func2 = lambda a:a
print(func2('He')) # He
# 默认参数
func3 = lambda a, b, c=100, d=300: a + b + c + d
print(func3(1, 2, d=4)) #107
# 不定长参数:位置参数
func4 = lambda *args:args[0]+args[1]
print(func4(10,20)) #30
# 不定长参数:关键字参数
func5 = lambda **kwargs: kwargs
print(func5(name='Tom', age=10)) # {'name': 'Tom', 'age': 10}
例子4:
students = [
{'name': "Tom", 'age': 19},
{'name': "Rose", 'age': 17},
{'name': "James", 'age': 15},
{'name': "Curry", 'age': 10},
{'name': "Harden", 'age': 18}
]
students.sort(key=lambda x: x['name'])
print(students) #[{'name': 'Curry', 'age': 10}, {'name': 'Harden', 'age': 18}, {'name': 'James', 'age': 15}, {'name': 'Rose', 'age': 17}, {'name': 'Tom', 'age': 19}]
高阶函数
把函数作为参数传入,这样的函数称为高阶函数
def sum_num(a, b, f):
return f(a) + f(b)
result = sum_num(-1, 2, abs)
print(result) # 3
map(): map(func,lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python 2)或者迭代器(Python 3)返回
list1 = [1,2,3,4,5]
def func(x):
return x ** 2
result = map(func,list1)
print(result)
print(list(result)) #[1, 4, 9, 16, 25]
reduce():reduce(func,lst),其中func必须有两个参数。每个func计算的结果继续和序列的下一个元素做累积计算
import functools
list1 = [1, 2, 3, 4, 5]
def func(a,b):
return a + b
result = functools.reduce(func,list1)
print(result)
filter():filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回的filter对象。可以用list()转化为列表
list1 = [1, 2, 3, 4, 5]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(list(result)) #[2, 4]