假设我有一个返回输出元组的函数:
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
。但管理功能的输出?哈文没弄明白。
答案 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__