我目前有一種討厭的代碼塊,我正在寫一個程序,模擬螃蟹的生長(令人興奮的東西.....)。該程序後來被更大的仿真吸收,因此代碼速度很重要。我最慢的代碼塊之一包含這個討厭的分支邏輯。我希望有人能想辦法讓這個更有效....蟒蛇 - 優化分支邏輯
對於背景下,這個代碼塊基本上是說:「我是不是再生爪如果有哪一個如果左/右?爪再生長,是它的顯性或非慣用手鑑於此,應用此號碼XYZ」
if left_or_right_growing == 'left':
if crab.rightclawCrusher == True:
crab.rightclaw_size = new_crushersize
if crab.moltnumber_for_claw_removal_left < crab.numberofmolts: #so it doesn't overwrite budding claw growth
crab.leftclaw_size = max(new_pincersize * crab.proportion_of_new_claw_thats_grownback()+adj, crab.leftclaw_size)
elif crab.rightclawCrusher == False:
crab.rightclaw_size = new_pincersize + adj
if crab.moltnumber_for_claw_removal_left < crab.numberofmolts: #so it doesn't overwrite budding claw growth
crab.leftclaw_size = max(new_crushersize * crab.proportion_of_new_claw_thats_grownback(), crab.leftclaw_size)
elif left_or_right_growing == 'right':
if crab.rightclawCrusher == True:
crab.leftclaw_size = new_pincersize + adj
if crab.moltnumber_for_claw_removal_right < crab.numberofmolts: #so it doesn't overwrite budding claw growth
crab.rightclaw_size = max(new_crushersize * crab.proportion_of_new_claw_thats_grownback(), crab.rightclaw_size)
elif crab.rightclawCrusher == False:
crab.leftclaw_size = new_crushersize
if crab.moltnumber_for_claw_removal_right < crab.numberofmolts: #so it doesn't overwrite budding claw growth
crab.rightclaw_size = max(new_pincersize * crab.proportion_of_new_claw_thats_grownback() +adj, crab.rightclaw_size)
elif left_or_right_growing == 'both':
pro_left, pro_right = crab.proportion_of_new_claw_thats_grownback()
if pro_left > 1. or pro_right > 1.:
print('ERROR IN TRANFORM: pro_left: ' + str(pro_left) +' pro_right: ' + str(pro_right))
if crab.rightclawCrusher == True:
if crab.moltnumber_for_claw_removal_left < crab.numberofmolts: #so it doesn't overwrite budding claw growth
crab.leftclaw_size = max(new_pincersize * pro_left+ adj, crab.leftclaw_size)
if crab.moltnumber_for_claw_removal_right < crab.numberofmolts:
crab.rightclaw_size = max(new_crushersize * pro_right, crab.rightclaw_size)
else:
if crab.moltnumber_for_claw_removal_right < crab.numberofmolts: #so it doesn't overwrite budding claw growth
crab.rightclaw_size = max(new_pincersize * pro_right+ adj, crab.rightclaw_size)
if crab.moltnumber_for_claw_removal_left < crab.numberofmolts:
crab.leftclaw_size = max(new_crushersize * pro_left, crab.leftclaw_size)
更改'elif== False:'只是'else:'如果唯一的可能性是'True'和'False'。 – Barmar
有什麼方法可以緩存所有測試的結果,所以您不必每次都重複它們? – Barmar
不幸的是,它們是動態的,並且會週期性地發生變化(即,不像人類,我總是會右手) – keynesiancross