1

2つのfunc文字列引数を取る関数があります。最初の引数は機能しますが、itertoolsのドキュメントによると、2番目の引数も機能するべきではありませんか?この関数は現在、ランダムな文字列を出力しますが、2番目の文字列は何も出力されません。

func(*("dog", "cat")) //works

itertools.starmap(func, [("dog", "cat")]) //fails without error message, nothing gets printed to screen

おそらく夜は遅すぎる(または早すぎる)のですが、私はここで明白な間違いを見逃していますか?

4

4 に答える 4

3

itertools.starmapイテレータを返します。実際に実行するには、次のように繰り返す必要がありますlist

list(itertools.starmap(func, [("fall", "2007")]))
于 2012-08-14T11:55:08.190 に答える
1

問題は、starmap()関数呼び出しがイテレータ(つまりitertools.starmapオブジェクト)を返す結果ですが、値自体のリストは返しません。

関数は正常に機能しますが、次の手順を繰り返して結果を1つずつ取得する必要があります。

for result in itertools.starmap(func, [("fall", "2007")]):
    # print result here or do some other stuff

開始時に結果のリストを取得するには(遅延結果のフェッチが必要ない場合)-イテレーターをリストに適合させます。

list(itertools.starmap(func, [("fall", "2007")]))
于 2012-08-14T11:56:46.747 に答える
0

開始時に結果のリストを取得するには(遅延した結果のフェッチが必要ない場合)-イテレーターをlist(Python3で)次のように適合させます。

>>> list(starmap(lambda x,y:x**y, [(1,2),(3,4)]))
[1, 81]
于 2018-07-11T01:19:20.550 に答える
-1

個人的には、スターマップは避けています。代わりに、次の自作関数を使用します

def one_arg(f) :
    return lambda x : f(*x)

にそれをfuncに適用します。

于 2015-05-09T18:38:32.490 に答える