有没有办法在python中以更简洁的方式执行以下语句?
而不是
a, b, c, d = f(1), f(2), f(3), f(4)
这样:
a, b, c, d = some_way(f(x))
答案 0 :(得分:4)
您可以尝试map()
:
>>> def f(x): return x*x
...
>>> a,b,c,d = map(f, (1,2,3,4))
>>>
>>> a
1
>>> b
4
>>> c
9
>>> d
16
如果你的函数参数总是连续的,那么你也可以这样做:
>>> a,b,c,d = map(f, range(1,5))
答案 1 :(得分:3)
你可以像这样使用列表理解
a, b, c, d = [f(i) for i in xrange(1, 5)]
或使用map
功能,如此
a, b, c, d = map(f, xrange(1, 5))
在这两种情况下,
print a, b, c, d
将打印
1 4 9 16
修改强>
正如评论部分所述,这是curried版本
def curry_function(function, first, second):
return lambda third: function(first, second, third)
f = curry_function(f, "dummy1", "dummy2")
然后您可以使用上面显示的代码。我们可以像这样使用functools.partial
from functools import partial
f = partial(f, "dummy1", "dummy2")
答案 2 :(得分:0)
只是需要一些代码的附加注释...在您要提供参数的情况下,如果使用列表推导,则不需要咖喱函数:
# f(arg1, arg2, index)
a,b,c,d = [f(arg1, arg2, x) for x in range(1,5)]
列表推导在映射中大多等同于使用,但这是它们优越的一种方式。