![](/img/trans.png)
[英]How can i write a switch statement in python using flask framework?
[英]How can I write a switch case statement with functions in Python?
我試圖根據我在 SO 中看到的示例創建字典(以實現切換器),並想出了這個:
def filter_on_arg(arg):
switcher = {
'can': get_can(table_name, filename, arg),
'aus': get_aus(table_name, filename, arg)
}
return switcher.get(arg, "Invalid arg")
但是當我嘗試編譯和運行腳本時, arg的值為aus ; 它仍在執行第一個方法get_can ,從中我認為上述方法有問題。
我也嘗試使用NeoPySwitch庫,但是在使用 pip 安裝它時遇到了一些問題。
我使用切換器,而不是使用 if/elif; 這樣基於一個鍵,我就可以調用上面的函數。
當你定義一個字典時,鍵在存儲之前被評估。 因此,在您的情況下,每次運行 line switcher = ...
,都會評估所有get_...
函數。
相反,您可以使用 lambda 使值變得“惰性”:
def filter_on_arg(arg):
switcher = {
'can': lambda: get_can(table_name, filename, arg),
'aus': lambda: get_aus(table_name, filename, arg),
}
return switcher.get(arg, lambda: "Invalid arg")()
(注意()
后get()
您必須將函數作為 dict 的內容傳遞。
def filter_on_arg(arg):
switcher = {
'can': get_can,
'aus': get_aus
}
return switcher.get(arg, invalid_arg)(table_name, filename, arg)
# invalid_arg(table_name, filename, arg) has to be a function handling invalid argument
Python 函數是可以作為參數傳遞的對象,只要您不在它們的名稱后面加上括號(這會使它們成為函數調用)。
一旦 dict 為您提供正確的函數,您就可以使用參數調用所需的函數。
為什么不用單獨的函數來做呢? 或者您是否有不允許這樣做的要求?
def foobar_can():
return "can"
def foobar_aus():
return "aus"
switcher = {
"can": foobar_can,
"aus": foobar_aus
}
func = switcher.get("can", lambda: "Invalid arg")
print(func())
func = switcher.get("aus", lambda: "Invalid arg")
print(func())
func = switcher.get("foobar", lambda: "Invalid arg")
print(func())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.