我有一个由元组组成的列表,我想将每个元组的元素作为参数传递给一个函数:
mylist = [(a, b), (c, d), (e, f)]
myfunc(a, b)
myfunc(c, d)
myfunc(e, f)
我该如何做?
在Python中,这实际上非常容易实现,只需循环遍历列表,并使用展开运算符(*
)将元组作为函数参数进行拆包:
mylist = [(a, b), (c, d), (e, f)]
for args in mylist:
myfunc(*args)
例如:
>>> numbers = [(1, 2), (3, 4), (5, 6)]
>>> for args in numbers:
... print(*args)
...
1 2
3 4
5 6
为了明确@DSM的评论:
>>> from itertools import starmap
>>> list(starmap(print, ((1,2), (3,4), (5,6))))
# 'list' is used here to force the generator to run out.
# You could instead just iterate like `for _ in starmap(...): pass`, etc.
1 2
3 4
5 6
[None, None, None] # the actual created list;
# `print` returns `None` after printing.
starmap
迭代器可以根据需要使用。在我们想要“将每个元组的元素作为参数传递给函数”的情况下,通常也希望对函数调用的结果进行一些操作。如果不需要这样做,则适合使用 for _ in starmap(...): pass
。 - Karl Knechtel
itertools.starmap
。 - DSMfunc(*args)
语法不仅适用于3.x版本,而print
是一个函数,因此在2.x版本中使用print(*args)
会导致语法错误。 - Andrew Clarkprint
函数的括号,括号实际上并没有起到任何作用。例如,print(1)
和print 1
是一样的。同样,其他语句也可以这样写,例如return(1)
等价于return 1
。请注意,此翻译仅供参考,如果需要专业翻译,请寻求资深的翻译人员帮助。 - Andrew Clarkfrom __future__ import print_function
。 - Gareth Latty