如何在具有多个变量的函数上使用map(),以及在使用Itertools的组合上使用map()

时间:2018-04-14 01:05:02

标签: python-3.x subprocess

我目前正在使用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)

感谢任何帮助。感谢。

1 个答案:

答案 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,这样生成器产生的每个序列都在三个参数中进行星展

希望这有帮助!