Python基础:lambda 匿名函数
程序员文章站
2023-02-22 20:16:56
格式 与常规函数区别 匿名函数 lambda 和常规函数一样,返回的都是一个函数对象(function object) lambda 是一个表达式(expression),并不是一个语句(statement)。表达式是可以被求值,类似"公式"的代码,而语句是一段完成了某种功能的可执行代码。 所以,l ......
格式
lambda argument1, argument2,... argumentn : expression square = lambda x: x**2 print(square(2))
与常规函数区别
匿名函数 lambda 和常规函数一样,返回的都是一个函数对象(function object)
lambda 是一个表达式(expression),并不是一个语句(statement)。表达式是可以被求值,类似"公式"的代码,而语句是一段完成了某种功能的可执行代码。
所以,lambda可以用在列表内部:
l = [(lambda x:x**2) (x) for x in range(10)] print(list(l)) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
同样,可以作为参数
l = [(1, 20), (3, 0), (9, 10), (2, -1)] l.sort(key=lambda x: x[1]) # 按列表中元祖的第二个元素排序 print(l) 输出 [(2, -1), (3, 0), (9, 10), (1, 20)]
lambda 的主体是只有一行的简单表达式,并不能扩展成一个多行的代码块。
使用lambda可以简化代码
squared = map(lambda x: x**2, [1, 2, 3, 4, 5]) print(list(squared))
上面那段代码,如果不用lambda表达式而用常规函数:
def squared2(x): return x[1] if isinstance(x,tuple) else x**2 squared = map(squared2, [1, 2, 3, 4, 5,(1,3)]) print(list(squared))
python函数式编程
python函数式编程有三个基本函数 map()、reduce()、filter()
map(function, iterable [,iterable2])
map遍历可迭代对象取出元素,作为参数依次传给function函数,例:每个元素都变大2倍
l = [1, 2, 3, 4, 5] new_list = map(lambda x: x * 2, l) # [2, 4, 6, 8, 10]
filter(function, iterable)
filter与map一样,遍历可迭代对象,并依次传给function,不同的是,filter会判断每次function的结果是true或false,并将结果为true的元素组成列表返回
例:返回一个列表中的所有偶数
l = [1, 2, 3, 4, 5] new_list = filter(lambda x: x % 2 == 0, l) # [2, 4]
reduce(function, iterable[, initializer])
其中function 是一个函数对象,规定它有两个参数,表示对 iterable 中的每个元素以及上一次调用后的结果,运用 function 进行计算,所以最后返回的是一个单独的数值。
配合reduce源码理解:
def reduce(function, iterable, initializer=none): it = iter(iterable) if initializer is none: try: initializer = next(it) except stopiteration: raise typeerror('reduce() of empty sequence with no initial value') accum_value = initializer for x in it: accum_value = function(accum_value, x) return accum_value
例 累加列表中的元素
from functools import reduce l = [1,2,3,4,5] result = reduce(lambda x,y:x+y, l ) print(result) #15 result = reduce(lambda x,y:x+y, l,10 ) print(result) #25
思考题
把字典 d = {'mike': 10, 'lucy': 2, 'ben': 30} 按值从高到低排序
d = {'mike': 10, 'lucy': 2, 'ben': 30} d = sorted(d.items(), key=lambda x: x[1],reverse = true ) #[('ben', 30), ('mike', 10), ('lucy', 2)] d = dict(d) print(d)
参考:
极客时间《python核心技术与实战》
推荐阅读
-
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
-
Python的lambda表达式、filter、map、reduce等函数的用法
-
Python基础语法之函数
-
Python3基础教程之递归函数简单示例
-
python基础教程之popen函数操作其它程序的输入和输出示例
-
python中lambda函数 list comprehension 和 zip函数使用指南
-
chapter1:python 基础(数据类型,运算符,常用内置函数,模型,strings等)
-
python内置函数:lambda、map、filter简单介绍
-
python — lambda表达式与内置函数
-
python — 函数基础知识(二)