![](/img/trans.png)
[英]Python replacement of switch case into dictionary (for function calls)
[英]Fall-through in Python dictionary replacement of switch/case
我嘗試在Python中實現switch / case機制。 在閱讀了幾個網站和問題(例如, 這個 )之后,我構建了以下代碼。 但是它的行為是錯誤的,據我所知-失敗, 獲取甚至可能有問題 ,肯定不是默認的預期結果。
def something():
print 'something'
def somethingElse():
print 'something else'
def switch():
cases = {
0: something(),
1: something(),
2: something(),
3: something(),
4: something(),
5: something()
}
cases.get(2, somethingElse())
switch()
(顯然,每種情況都使用相同的開關只是為了示例)
當我運行它時,我希望something()
僅運行一次(因為我手動輸入2
)。 但是,控制台中的輸出為:
something
something
something
something
something
something
something else
這意味着它已經運行了6次加上默認值運行。 我不明白這段代碼中允許發生這種情況的原因是什么? 也許問題不同?
這是Python 2.7.12。
您的字典在創建案例時會調用每個函數。 您的函數打印(副作用)而不是返回字符串,因此您看到所有打印到控制台的字符串。
相反,您的開關應返回一個函數,然后您可以調用該函數。
def something():
print 'something'
def somethingElse():
print 'something else'
def switch():
cases = {
0: something,
1: something,
2: something,
3: something,
4: something,
5: something
}
# All of the values in `cases` are functions so it is safe
# to call whatever `cases.get(...)` returns.
cases.get(2, somethingElse)()
switch()
您需要返回函數名稱,然后調用它。 像這樣
def something():
print ('something')
def somethingElse():
print ('something else')
cases = {1: something, 2: something, 3:something, 4:something,5:something}
result = cases.get(2, somethingElse)()
〜
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.