生成式(comprehensions),又叫推导式,是 python 中生成有规律的数据的一种简洁表示方法(生成式怎么使用?)。lambda 函数作为 python 中常用的匿名函数,在编程中也备受青睐。二者都是面试中常见的问题。
一、区别
生成式用于生成变量的数据,往往需要赋值给一个变量,本质上是通过遍历给变量元素赋值。
>>> x = [i**2 for i in range(10)]
>>> y = []
>>> for i in range(10): y.append(i**2)
...
>>> x; y; x==y
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
True
lambda 用于表示简易的数学映射,本质上是一个简写了的计算函数。
>>> f = lambda x:x**2
>>> f
<function <lambda> at 0x000001F676E14D30>
>>> type(f)
<class 'function'>
>>> f(5)
25
二、联系
都是 python 中的简化表示方法,往往都只有一行,都是面试中经常被问到的问题。生成式中有时会使用 lambda 函数来实现更为复杂的逻辑。比如:
>>> [(lambda x:x**2 if x%2==1 else x)(i) for i in range(10)]
[0, 1, 2, 9, 4, 25, 6, 49, 8, 81]
推荐阅读: