我正在优化我的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)?
答案 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
现在只需一步就将结果变量都直接与布尔值进行比较。