我正在尝试找出Python lambda。lambda是在现实生活中应该被遗忘的那些“有趣”语言项目之一吗?
我敢肯定,在某些情况下可能需要使用它,但是鉴于它的晦涩之处,在将来的发行版中重新定义了它的潜力(根据各种定义我的假设)以及降低的编码清晰度-是否应该被避免?
这让我想起了C类型的溢出(缓冲区溢出)-指向顶部变量,并通过重载来设置其他字段值。感觉像是技术娴熟的演艺风格,但却是维护编码员的噩梦。
lambda x: x**2 + 2*x - 5
这些东西实际上很有用。Python支持一种称为函数式编程的编程风格,你可以在其中将函数传递给其他函数来完成工作。例:
mult3 = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9])
设置mult3为[3, 6, 9],原始列表中那些是3的倍数的元素。此元素比(可能会说更清楚)短于
def filterfunc(x): return x % 3 == 0 mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])
当然,在这种情况下,你可以做与列表理解相同的事情:
mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]
(或什至range(3,10,3)),但是在许多其他更复杂的用例中,你不能使用列表推导,而lambda函数可能是写出东西的最短方法。
从另一个函数返回一个函数
>>> def transform(n): ... return lambda x: x + n ... >>> f = transform(3) >>> f(4) 7
这通常用于创建函数包装器,例如Python的装饰器。
将可迭代序列的元素与 reduce()
reduce()
>>> reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9]) '1, 2, 3, 4, 5, 6, 7, 8, 9'
按备用键排序
>>> sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)) [5, 4, 6, 3, 7, 2, 8, 1, 9]
我定期使用lambda函数。我花了一段时间来习惯它们,但最终我了解到它们是语言中非常有价值的一部分。