我的Python代码有问题,但这是我在其他语言中已经遇到的问题,我想得到一个一般性的答案。
假设我有一个包含许多语句的循环。这些语句中的一条取决于一个不随迭代而改变的条件。我认为有两种方法可以实现这一点:
for ... :
... #many statements
if conditionA :
statementA
elif conditionB :
statementB
else
statementC或:
if conditionA :
for ... :
... #many statements
statementA
elif conditionB :
for ... :
... #many statements
statementB
else :
for ... :
... #many statements
statementC在第一个解决方案中,问题是我们在每次迭代中测试一些东西,这是不必要的。第二种解决方案的速度更快,因为它只测试一次条件,然后相应地启动循环,这正是我想要做的;但是现在有大量的代码重复(每次重写许多语句.)。
还有第三种方法,我没有想到这会像第二种方法那样有效,但没有代码重复?谢谢!
编辑:
我读到了一个类似的主题(Optimizing a Loop vs Code Duplication),C++编译器已经进行了优化(通过在编译期间将第一个版本转换为第二个版本)。那么像Python这样的解释语言呢?
发布于 2017-02-28 10:04:29
下面的代码所做的是将“依赖”于循环元素的条件和与循环元素“独立”的条件分开。
创建一个循环函数,以lambda代替作为语句。这里唯一的复制可能是λ部分,我猜
def loop(arr,func):
for a in arr
// many statements
func(a)
//statement for that particular condition using lambda
if condition A: ## assume condition doesn't depend on loop elements
loop(arr,lambda x:##any action)
elif condition B:
loop(arr,lambda x:##any action)
.
.
.
else:
for el in arr:
//many statements
if condition X: ## This condition depends on the loop element!..
//statement X
elif condition Y:
//statement Y
.
.
.我甚至希望将这种双重复制最小化,但这会变得相当复杂,因为您需要有条件的lambda之类的东西。
编辑
在我上面代码中的“否则”中这样做:
else:
def func2(a):
if condition A:
// some statement depending on the element. 'a' in this case
elif condition B:
// some statement depending on the element
loop(arr,func2)现在,即使是双重复制也减少了:-D
https://stackoverflow.com/questions/42504986
复制相似问题