1、lambda表达式
语法
lambda 参数列表:表达式
lambda表达式的写法
# 无参lambda表达式
fn = lambda: 'this is test'
print(fn()) # this is test
# 有参lambda表达式
fn1 = lambda a, b: a + b
print(fn1(1, 2)) # 3
# 默认参数lambda表达式
fn2 = lambda a=12: a - 5
print(fn2()) # 7
print(fn2(8)) # 3
# 可变参数
fn3 = lambda *args: args
print(fn3(1,2,3,4)) # (1, 2, 3, 4)
# **kwargs
fn4 = lambda **kwargs: kwargs
print(fn4(name='abc', age=12)) # {'name': 'abc', 'age': 12}
lambda表达式的应用
与推导式的结合
# lambda表达式与推导式结合
list = [1, 2, 3, 4, 5, 6]
ft = lambda l: [x for x in l if x > 3]
print(ft(list)) # [4,5,6]
2、高阶函数的使用
import math
# 进行数据的常规处理
num = 3.141592654
print(round(num, 2)) # 3.14
print(math.floor(num)) # 3
print(math.ceil(num)) # 4
list = []
# list中sort与lambda的合并使用
for per in range(0, 10):
list.append({
"name": f'even{per}',
"age": per
})
# 进行列表排序, True表示降序排序, False表地升序排序
list.sort(key=lambda x: x.get('age'), reverse=True)
print(list)
# 自定义高阶函数, 如果关键字参数与位置参数一起使用,那么位置参数放在前面
def orderFn(*args, fn=lambda x: x):
argsLen = len(args)
if argsLen < 1: return
sum = 0
for item in range(0, argsLen):
sum += fn(item)
return sum
print(orderFn(1, 2, 3, 4, 5, fn=lambda x: x + 1)) # 15
print(orderFn(1, 2, 3, 4, 5)) # 10
内置高阶函数的使用
filter, map, reduce的使用
lt = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# map的使用,与js中map的功能差不多
lt1 = map(lambda x: x if (x > 5) else 1, lt)
print(lt1) # <map object at 0x00000171130A6110>
print(list(lt1)) # [1, 1, 1, 1, 1, 6, 7, 8, 9]
# filter的使用 与js中的filter的功能一样
lt3 = filter(lambda x: x > 5, lt)
print(list(lt3)) # [6, 7, 8, 9]
# reduce的使用
import functools
lt2 = functools.reduce(lambda total, per: total + per, lt)
print(lt2) # 45
# 创建一个新的数组
def testFn (x, y):
x.append(y)
return x
res = functools.reduce(testFn, lt, [])
print(res) # print(lt2)
max, min, all, any等高阶函数的使用
lt = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# max高阶函数的使用
lt1 = max(lt, key=lambda x: x)
print(lt1)
# min高阶函数的使用
lt2 = min(lt, key=lambda x: x)
print(lt2)
# any高阶函数的使用
numbers = [1, 2, 3, 4, 5]
has_even_number = any(num % 2 == 0 for num in numbers)
print(has_even_number) # 输出: True
fruits = ['apple', 'banana', 'cherry']
has_long_name_fruit = any(len(fruit) > 5 for fruit in fruits)
print(has_long_name_fruit) # 输出: False
# all的高函数函数
numbers = [2, 4, 6, 8, 10]
all_even_numbers = all(num % 2 == 0 for num in numbers)
print(all_even_numbers) # 输出: True
fruits = ['apple', 'banana', 'cherry']
all_long_name_fruits = all(len(fruit) > 5 for fruit in fruits)
print(all_long_name_fruits) # 输出: False