将功能结果解压缩到单独的列表中?

时间:2019-06-06 02:03:00

标签: python-3.x

我正在优化我的Python脚本,如果有机会更好地组织我的代码的一部分,我很感兴趣。我运行一个函数,两次返回两个值。我想要第一个返回的值,即。 result [0],以及第二个返回值,即result [1],位于它们各自的列表或元组中。

说实话,我认为无论哪种方式都不会带来巨大的性能提升,但是现在我很好奇。

这可行,但是我问我是否可以做得更好:

    out_1, result_1 = self.foo(data[0])
    out_2, result_2 = self.foo(data[1])

    results = (result_1, result_2)

    if results == (True, True):
        return (out_1, out_2), False

    elif results == (False, False) and out_1 == out_2:
        return out_1, True

从本质上讲,有没有一种方法可以跳过对变量的赋值,然后立即将结果打包到元组或列表中,从而无需构造(result_1,result_2)和(out_1,out_2)?

1 个答案:

答案 0 :(得分:0)

从理论上讲可以做到这一点,但实际上将比现有的多一行。但是,您可以修改当前代码以删除结果变量。

现在,我假设您仅会两次调用self.foo。这意味着顶部应该保持原样。

out_1, result_1 = self.foo(data[0])
out_2, result_2 = self.foo(data[1])

删除结果变量。但是现在修改if语句以反映这一点。

if all(r == True for r in [result_1, result_2]:
    return (out_1, out_2), False

elif all(r == False for r in [result_1, result_2] and out_1 == out_2:
    return out_1, True

这为我们提供了一个版本,在该版本中,我们不必为合并日期而创建新变量。但是,由于我们假设只有两个结果变量,因此我们仍然可以进一步优化此代码。现在,if语句具有一个循环,我们对此检查绝对不需要。

if True == result_1 == result_2:
    return (out_1, out_2), False

elif (False == result_1 == result_2) and out_1 == out_2:
    return out_1, True

现在只需一步就将结果变量都直接与布尔值进行比较。