有没有更简洁的方法在Python中执行以下语句?而不是:
a, b, c, d = f(1), f(2), f(3), f(4)
this:
a, b, c, d = some_way(f(x))
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))
您可以像这样使用列表推导式
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")
partial
方法中是否存在某种循环引用? - alwbtcdummy1
、dummy2
和新参数,以及记住的旧函数。很酷,对吧? :) - thefourtheye# f(arg1, arg2, index)
a,b,c,d = [f(arg1, arg2, x) for x in range(1,5)]
a,b,c,d = f(some_arg, other_arg, 1), f(some_arg, other_arg, 2), f(some_arg, other_arg, 3), f(some_arg, other_arg, 1)
,那么如何使用map
? - alwbtcsome_arg
和other_arg
是否都相同? - thefourtheye