我目前正在使用map()学习pythons,subproccess(),以便将它集成到我的程序中。
我们说我有这样的循环,
for a, b in itertools.combinations(exchanges, 2):
if (a != None and b != None):
symbols = a.symbols
symbols1 = b.symbols
if symbols is not None and symbols1 is not None:
symbols = [x for x in symbols if x is not None]
symbols1 = [x for x in symbols1 if x is not None]
if symbol != None and symbol in symbols and symbol in symbols1:
execute_function(a, b, symbol, expent,amount)
显然我希望我的符号和符号1列表映射到该函数并逐个获取。
使用itertools尝试不同的组合。
到目前为止尝试过(仅用于映射,因为我不知道如何在这种情况下进行迭代比较),但似乎返回了非类型错误。对象不可调用。
pool = Pool()
pool.map(execute_func(a, b, symbol, expent,amount), symbols)
感谢任何帮助。感谢。
答案 0 :(得分:1)
在您尝试的内容中,错误是pool.map()
的第一个参数应该是一个函数,但是您正在传递函数的结果,因为您使用{{ 1}}。
根据我的理解,您希望为a, b, symbol, expent, amount
元素的所有2×2组合的所有非None符号对调用函数execute_func
。然后,我建议你将循环和非测试作为生成器编写,然后将其传递给exchanges
。这是我的解决方案草图:
pool.map
这里,def gen_all_symbol_pairs(sequence):
for a, b in itertools.combinations(sequence, 2):
if a is not None and b is not None:
if a.symbols is not None and b.symbols is not None:
for symbol in a.symbols:
if symbol is not None and symbol in b.symbols:
yield a, b, symbol
with Pool() as pool:
pool.starmap(lambda a, b, symb: execute_func(a, b, symb, expent, amount), gen_all_symbol_pairs(exchanges))
是一个可迭代的,它可以生成所有非None符号对。此外,我使用gen_all_symbol_pairs
函数来*部分*填充lambda
函数。最后,我使用了execute_func
,这样生成器产生的每个序列都在三个参数中进行星展。
希望这有帮助!