簡體   English   中英

替換字典/案例的Python字典替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM