python中switch
『壹』 python有switch語句嗎
沒有 switch case 語句
可以用 if elif elif 代替
『貳』 Python中為什麼沒有switch語法結構,有什麼代替方案嗎
switch的作用是「根據不同的鍵執行不同的流程」。
python希望你改成「根據不同的鍵,執行不同的函數」,
用一個字典代替,比如
d={1:函數1,2:函數2, 3:函數3}
然後用
d[k]();#這一句來代替switch;
函數可以帶參數,可以用lambda簡寫。
砍掉switch是為了實踐python的以唯一的一種較優方法來解決問題的理念
因為python認為switch多餘不夠優。
『叄』 為什麼Python中沒有Switch/Case語句
不同於我用過的其它編程語言,Python 沒有 switch / case 語句。為了實現它,我們可以使用字典映射:
Python
1
2
3
4
5
6
7
def numbers_to_strings(argument):
switcher = {
0: "zero",
1: "one",
2: "two",
}
return switcher.get(argument, "nothing")
這段代碼類似於:
Python
1
2
3
4
5
6
7
8
9
10
11
12
function(argument){
switch(argument) {
case 0:
return "zero";
case 1:
return "one";
case 2:
return "two";
default:
return "nothing";
};
};
Python 代碼通常比處理 case 的標准方法更為簡短,也可以說它更難理解。當我初次使用 Python 時,感覺很奇怪並且心煩意亂。而隨著時間的推移,在 switch 中使用字典的 key 來做標識符變得越來越習以為常。
函數的字典映射
在 Python 中字典映射也可以包含函數或者 lambda 表達式:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def zero():
return "zero"
def one():
return "one"
def numbers_to_functions_to_strings(argument):
switcher = {
0: zero,
1: one,
2: lambda: "two",
}
# Get the function from switcher dictionary
func = switcher.get(argument, lambda: "nothing")
# Execute the function
return func()
雖然 zero 和 one 中的代碼很簡單,但是很多 Python 程序使用這樣的字典映射來調度復雜的流程。
類的調度方法
如果在一個類中,不確定要使用哪種方法,可以用一個調度方法在運行的時候來確定。
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Switcher(object):
def numbers_to_methods_to_strings(self, argument):
"""Dispatch method"""
# prefix the method_name with 'number_' because method names
# cannot begin with an integer.
method_name = 'number_' + str(argument)
# Get the method from 'self'. Default to a lambda.
method = getattr(self, method_name, lambda: "nothing")
# Call the method as we return it
return method()
def number_0(self):
return "zero"
def number_1(self):
return "one"
def number_2(self):
return "two"
很靈活,對吧?
官方說明
官方的解釋說,「用if... elif... elif... else序列很容易來實現 switch / case 語句」。而且可以使用函數字典映射和類的調度方法。
可以說官方的說明並沒有解釋什麼,只是給出了解決方案。換句話說,沒有回答為什麼。我認為其實官方真正想說的是:「Python 不需要 switch / case 語句」。
真的是這樣嗎?
是的。但是還有別的原因。我聽牛人說過,在代碼中 switch/case 語句真的很難調試。
就我個人而言,我發現當運行到大量嵌套的用作代碼分支映射的字典里,上述說法就站不住腳了。想想吧,一個超過100條語句的嵌套字典,和一個嵌套100個以上 case 的 switch/case 代碼塊一樣,都是難以調試的。
字典映射運行更快?
Python 沒有 case 語句,使用其它語言的衡量標準是沒有意義的,因為在某種語言中運行更快並不意味著在另一種語言中也一樣。讓我們繼續。
Python 實現方法的顯著優點
有時候我會遇到 Python 的實現方法比 switch/case 語句更好用的情況,例如在運行的時候,需要從映射里添加或者刪除一些潛在的選項。每當這時,多年來使用字典映射和調度方法的實踐讓我受益匪淺。現在我覺得,我再也無法回到依賴 switch/case 語句的日子了。
結束語
Python 迫使我積累了很多映射的實踐經驗,對我來說是塞翁失馬,焉知非福。沒有 switch/case 語句可用的約束,促使我想到了可能不會用來開發的方法和主意。
有意或無意中,Python 沒有 switch/case 語句已成為一種社會建構,並讓我成為一個更優秀的程序員。
綜上所述,所以我認為這種意外的社會構建解釋比官方的「用這個來代替」的說明要好得多。
『肆』 python中有switch嗎
python中沒有switch結構,一般用字典(dict)來模擬switch實現
『伍』 python中有switch語句嗎
python官網的回答(地址:https://docs.python.org/2/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python):
You can do this easily enough with a sequence of if... elif... elif... else.
意思就是:python語法講究簡單明了,if else完全可以很簡單的實現switch的所有功能,沒必要用switch。
『陸』 為什麼Python中沒有Switch/Case語句
這個問題這么理解:switch case可以由if else elif 實現。還有因為python是動態解釋型語言。switch case 主要在編譯型語言中。因為編譯型語言能知道具體跳到那一行。是不是合法的。但是解釋語言她更不不知道下一行是啥,只有執行到才能知道本行是不是語法正確等等
『柒』 如何理解 python中的switch
我們以加減和一個隨意名字的函數來解析switch的用法,說白了也是很簡答嗎的。首先添加一個add的方法。
『捌』 Python中為什麼沒有switch語法結構,有什麼代替方案嗎
1、C語言里switch 的本質是什麼呢?如果會反匯編的話,可以自己研究發現,switch實際上有一個hash表,系統是通過查表來實現跳轉的。
2、弄清這個問題之後,轉到python的話,就可以用dict來實現:
假定輸入in1 執行函數fun1,輸入in2 執行函數fun2,輸入in3 執行函數fun3,
d = {'in1':fun1,'in2':fun2,'in3':fun3}
調用的時候就這么寫,arguments是輸入參數
『玖』 Python中為什麼沒有switch語法結構,有什麼代替方案嗎
switch的作用是「根據不同的鍵執行不同的流程」。
python希望你改成「根據不同的鍵,執行不同的函數」,
用一個字典代替,比如
d={1:函數1,2:函數2, 3:函數3}
然後用
d[k]();#這一句來代替switch;
函數可以帶參數,可以用lambda簡寫。
砍掉switch是為了實踐python的以唯一的一種較優方法來解決問題的理念
因為python認為switch多餘不夠優。
『拾』 在python中沒有switch-case語句
開發者認為switch case語句不好,反正也可以用if else來做乾脆就不支持了