我必须在函数中使用列表的任意参数
此代码可以正常使用
a=[1,2,3]
b=[5,6,7]
def joiner(m,n):
o = []
return m+n+o
print joiner(a,b)
但是当我将代码更改为任意参数并且它无效时
a=[1,2,3]
b=[5,6,7]
def joiner(*m):
o = []
return m+o
print joiner(a,b)
这可能是什么原因
答案 0 :(得分:3)
m
是包含两个(或更多或更少)列表的元组。您需要遍历m
才能获得函数的通用版本
def joiner(*m):
o = []
for item in m:
o += item
return o
你可以在一个班轮里做这件事,但我认为这更清楚。
答案 1 :(得分:3)
函数或方法签名中的星号*
语法将位置参数打包成tuple
(see this answer以获取大量详细信息)。你的第二个函数接收一个名为m
的参数,它看起来(例如)像这样:
([1, 2, 3], [5, 6, 7])
如果你想分别访问那个元组的每个成员(每个参数),你必须明确地这样做 - Python不能神奇地想知道你想要把所有的参数加在一起。
def joiner(*args):
o = []
for arg in args: # Iterate over each argument your function received.
o += arg # or better, o.extend(arg)
return o
还有一些工具可供您使用:具体来说,itertools.chain
:
import itertools
def joiner(*m):
return list(itertools.chain(*m))
当然在那时(正如其他人提到的那样),你可能根本就不会编写joiner
函数,因为它只需要一些额外的步骤来包装itertools.chain
调用。
......实际上,每当你用一个或多个iterables做任何时,你应该去查看itertools
模块,看看是否有人已经为你实现了它。 : - )
答案 2 :(得分:2)
我对一系列正确答案的贡献:P
import itertools
def joiner(*m):
return itertools.chain.from_iterable(m)