带有函数和元组参数的一行for循环

时间:2014-10-16 16:30:46

标签: python function arguments tuples

我非常感兴趣,为什么我不能用#:

写一个班轮
m=[(1,2),(3,4),(5,6)]
f=lambda x,y:return x%y
f(*i) for i in m

但我不得不将最后一行扩展到

for i in m:
  f(*i)

提前致谢

3 个答案:

答案 0 :(得分:3)

实际上,您可以:

>>> [x%y for x,y in [(1,2),(3,4),(5,6)]]
[1, 3, 5]

答案 1 :(得分:2)

使用map

>>> m = [(1,2),(3,4),(5,6)]
>>> f = lambda x: x[0] % x[1]  # No return statement in lambda.
>>> map(f, m)  # list(map(f, m)) in Python 3.x
[1, 3, 5]

如果你使用Python 2.x,你可以在lambda中使用元组参数解包,但是it's gone in Python 3.x

f = lambda (x, y): x % y

答案 2 :(得分:2)

x for x in y语法用于list comprehensionsgenerator expressions,集合理解和Python中的字典理解。在没有()[]{}的情况下使用它是无效的。

更正确的版本是

>>> m = [(1, 2), (3, 4), (5, 6)]
>>> f = lambda x,y: x % y # Note no return
>>> [f(*i) for i in m]
[1, 3, 5]

甚至更好,不那么冗长

>>> [x % y for x,y in ((1, 2), (3, 4), (5, 6))]
[1, 3, 5]