我正在使用python 2.7。
此代码有效:
def function(b,c):
return (b,c)
print(list(map(function,*zip([1]*2,[4]*2))))
然而,这不是:
def function(b,c):
return (b,c)
print(list(map(function,*zip([1]*20,[4]*20))))
可以做些什么来使第二个代码段工作?
答案 0 :(得分:1)
你对*zip([1]*20,[4]*20)
所做的事情感到困惑。看起来您正在尝试执行以下调用:
function(1, 4)
function(1, 4)
... [20 calls]
但那不是你真正在做的事情。您的代码实际上尝试执行以下调用:
function(1, 1, 1, ... [20 1s])
function(4, 4, 4, ... [20 4s])
您的选择是停止使用*
和zip
,更改function
接受参数的方式,或使用itertools.starmap
:
def function(b, c):
...
print(list(map(function, [1]*20, [4]*20)))
或
def function(x):
b, c = x
...
print(list(map(function, zip([1]*20, [4]*20))))
或
import itertools
def function(b, c):
...
print(list(itertools.starmap(function, zip([1]*20, [4]*20))))