2016-11-21 16 views
0

私はin this postのようにスレッドを作成しようとしていますが、回避策を介してPython 2.7で複数の引数を渡します。hereクラス関数を使用してpool.mapに複数の引数を渡す

TypeError: length_scraper2() takes exactly 3 arguments (2 given) 

に思える:私は自分のコードを実行すると、私はエラーを取得する、しかし

def pool_threading(self): 
     pool = ThreadPool(4) 
     for username in self.username_list: 
      master_list = pool.map(self.length_scraper2, 
       itertools.izip(username*len(self.repo_list), 
       itertools.repeat(self.repo_list))) 

def length_scraper2(self, username, repo): 
    #code 

は、今私は、クラスpair_scraperの一部である機能を、このような何かを持っています私はクラス内でクラス関数を使用しているので、それは無意味です引数として渡されるselfしたいからです。どのように修正するには?

+0

あなただけの1引数を渡しているので、いや、それはです。 –

+0

...私は?議論を意図どおりに行うために私はどのように再フォーマットするでしょうか? –

答えて

1

itertools.izip(username*len(self.repo_list),itertools.repeat(self.repo_list))は、tupleをもたらす。

メソッドに明示的に2つの引数を渡す必要があります(selfは非静的メソッドなので暗黙的に渡されます)。明示的に1つのタプルを渡すだけで、暗黙的にselfに2つの引数を渡します。 。

あなたはこのように、2つの別々の引数として、あなたのタプルを渡すために*を使用する必要があります。

シンプルな機能に古典 mapを使用して
master_list = pool.map(self.length_scraper2, 
    *itertools.izip(username*len(self.repo_list),itertools.repeat(self.repo_list))) 

簡単なテスト:

def function(b,c): 
    return (b,c) 

print(list(map(function,zip([1,2],[4,5])))) 

エラー:

print(list(map(function,zip([1,2],[4,5])))) 
TypeError: function() missing 1 required positional argument: 'c' 

argを展開するためにアスタリスクを1つ追加するS:

print(list(map(function,*zip([1,2],[4,5])))) 

作品:

[(1, 2), (4, 5)] 

同じクラスのメソッドのために行く:

class Foo: 
    def function(self,b,c): 
     return (b,c) 

f = Foo() 

print(list(map(f.function,*zip([1,2],[4,5])))) 
関連する問題