日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python多分支结构实例_JS优化多分支结构(经典)

發布時間:2023/12/2 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python多分支结构实例_JS优化多分支结构(经典) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多分支結構的優化有很多好處:既方便代碼維護,又可以提升代碼執行效率。例如,設計有多個條件,只有當多個條件都成立時,才允許執行特定任務。

示例1

遵循簡單的設計思路,使用多重分支逐個檢測這些條件。

if (a) {

if (b) {

if (c) {

if (d) {console.log("所有條件都成立!"); }

else {console.log("條件 d 不成立!"); }

} else {console.log("條件 c 不成立!"); }

} else {console.log("條件 b 不成立!"); }

} else {console.log("條件 a 不成立!"); }

示例2

上述設計沒有錯誤,結構嵌套合法。不過可以使用邏輯運算符進行優化。

if (a && b && c && d) {console.log("所有條件都成立!"); }

比較而言,使用?if?語句逐個檢測每個條件的合法性,并對某個條件是否成立進行個性化處理,以方便跟蹤。但是使用?if (a && b && c && d)?條件表達式,就沒法進行過程跟蹤。例如,如果?a?條件不成立,則程序會自動退出整個流程,而不管?b、c?和?d?的條件是否成立。這會使代碼跟蹤變得很困難。

示例3

優化設計思路,采用排除法,對每個條件逐一進行排除,如果全部成立則再執行特定任務。在排除過程中,使用一個標志變量把每一次條件檢測聯系在一起,最后根據這個標志變量決定是否完成特定任務。

var t = true; //初始化標志變量為true

if (! a) {

console.log("條件 a 不成立!");

t = false; //如果條件a不成立則標志變量為false

}

if (! b) {

console.log("條件 b 不成立!");

t = false; //如果條件a不成立則標志變量為false

}

if (! c) {

console.log("條件 c 不成立!");

t = false //如果條件a不成立則標志變量為false

}

if (! d) {

console.log("條件 d 不成立!");

t = false; //如果條件a不成立則標志變量為false

}

if (t) { //如果標志變量為true,則執行特定任務

console.log("所有條件都成立!");

}

排除法有效避免了條件嵌套的復雜性,不過這種設計也存在一定的局限性,例如,一旦發生錯誤,后面的操作將被放棄。為此還可以再設計一個標志變量來跟蹤錯誤。

數據映射

在多分支檢測中,表達式的重復運算會影響性能。如果檢測的條件滿足下面兩條,可以考慮使用數據映射來快速匹配,這樣有助于代碼的可讀性,大大提高了代碼的響應速度。

條件體的數量龐大

測試的條件值呈現離散狀態

實現方法:通過數組或普通對象實現。

示例1

在下面代碼中,使用?switch?多分支檢測離散值。

function map(value) {

switch (value) {

case 0 : return "result0";

case 1 : return "result1";

case 2 : return "result2";

case 3 : return "result3";

case 4 : return "result4";

case 5 : return "result5";

case 6 : return "result6";

case 7 : return "result7";

case 8 : return "result8";

case 9 : return "result9";

default : return "result10"

}

}

示例2

針對示例 1?可以使用數組查詢替代?switch?語句。下面代碼把所有離散值存儲到一個數組中,然后通過數組下標快速檢測元素的值。

function map(value) {

var results = ["result0","result1","result2","result3","result4","result5",

"result6","result7","result8","result9","result10"]

return results[value];

}

使用數據映射法可以消除所有條件判斷,但由于沒有條件判斷,當候選值數量增加時,基本不會增加額外的性能開銷。

如果每個鍵映射的不是簡單的值,而是一系列的動作,則使用?switch? 更適合。當然,也可以把這些動作包裝在函數中,再把函數作為一個值與鍵進行映射。

示例3

如果條件查詢中鍵名不是有序數字,則無法與數組下標映射,這時可以使用對象數據映射法。

function map(value) {

var results = {

"a" : "result0","b" : "result1","c" : "result2","d" : "result3","e" : "result4","f" : "result5",

"g" : "result6","h" : "result7","i" : "result8","j" : "resukt9","k" : "result10"

}

return results[value];

}

調整分支順序

在多分支結構中,各種條件存在先后、輕重的順序。如果把最可能的條件放在前面,把最不可能的條件放在后面,那么程序被執行時總會按照代碼先后順序檢測所有條件,直到發現匹配的條件時才停止。如果把最可能的條件放在前面,就等于降低了程序的檢測次數,自然也就提升了分支結構的執行效率,避免空轉。這在大批量數據檢測中效果非常明顯。

示例1

對于一個論壇系統來說,普通會員的數量要遠遠大于版主和管理員的數量。大部分登錄的用戶都是普通會員,如果把普通會員的檢測放在分支結構的前面,就會減少每次檢測的次數。

switch (level) { //優化分支順序

case 1 :

console.log("普通會員");

break;

case 2 :

console.log("版主");

break;

case 3 :

console.log("管理員");

break;

default :

console.log("請登錄");

}

在性能影響不大的情況下,遵循條件檢測的自然順序會更易于理解。

示例2

設計檢測周一到周五值日任務安排的分支結構。可能周五的任務比較重要,或者周一的任務比較輕,但是對于這類有著明顯順序的結構,遵循自然順序比較好。打亂順序,把周五的任務安排在前面,對于整個分支結構的執行性能沒有太大幫助,打亂的順序不方便閱讀。因此,按自然順序來安排結構會更富有可讀性。

switch (day) {

case 1 :

console.log("周一任務安排");

break;

case 2 :

console.log("周二任務安排");

break;

case 3 :

console.log("周三任務安排");

break;

case 4 :

console.log("周四任務安排");

break;

case 5 :

console.log("周五任務安排");

break;

default :

console.log("異常處理");

}

分支之間的順序應注意優化,當然,對于同一個表達式內部也應該考慮邏輯順序問題。由于邏輯與或邏輯或運算時,有可能會省略右側表達式的計算,如果希望右側表達式不管條件是否成立都被計算,就應該考慮邏輯順序問題。

示例3

有兩個條件?a?和?b,其中條件?a?多為真,而?b?是一個必須執行的表達式,那么下面邏輯順序的設計就欠妥當。

if (a && b) {

//執行任務

}

如果條件?a?為?false,則 JavaScript?會忽略表達式?b?的計算。如果?b?表達式影響到后面的運算,則不執行表達式?b,自然會對后面的邏輯產生影響。因此,可以采用下面的設計思路,在?if?結構前先執行表達式?b,這樣即使條件?a?的返回值為?false,也能夠保證?b?表達式被計算。

var c = b;

if (a && b) {

//執行任務

}

總結

以上是生活随笔為你收集整理的python多分支结构实例_JS优化多分支结构(经典)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。