匿名函数管理函数的输出,没有lambda

时间:2018-01-03 14:33:17

标签: python python-3.x lambda functools

假设我有一个返回输出元组的函数:

def f():
    return 'zero', 1

但是我必须在线提供一个新的匿名函数,它只返回例如返回元组的第0个元素。这是一个简单的单行,带有lambda

lambda : f()[0]  # returns 'zero'

有没有办法使用functools或类似的方法做同样的事情?

鉴于lambda涉嫌'planned to [be removed] from Python 3, as one of "Python's glitches"',我假设没有lambda就可以做到这一点,但我还没有能够想办法。

我知道functools.partial在管理函数的输入参数时几乎可以替代lambda。但管理功能的输出?哈文没弄明白。

3 个答案:

答案 0 :(得分:2)

您可能正在寻找operator.itemgetter

from operator import itemgetter

get_zeroth = itemgetter(0)
assert get_zeroth(f()) == 'zero'

答案 1 :(得分:1)

您可以尝试使用行为来生成poor-man's conditional expression

print(f()[f()[0]==' '])

由于[f()[0]!=' ']产生一个布尔值,正如你所说它会产生一个元组,所以[f()[0]==' ']总是错误的,所以它会给0,这就是你想要的索引号。

答案 2 :(得分:0)

当前的答案似乎正在产生价值本身 - 你似乎满足于通过f()[0]实现 - 而不是产生价值的可调用。懒惰评估(与您的lambda示例一样)是一项要求吗?如果没有,问题不再是使用投影后期编写f,而是定义一个常量函数,我将提名

itertools.repeat(f()[0]).__next__