2016-09-29 104 views
0

我想使用字典作爲Python的開關情況然而,參數看,似乎不被傳遞給被調用的函數,請大家幫忙:Python的開關情況

def switchcase(num,cc): 
    def fa(num): 
     out= num*1.1; 
    def fb(num): 
     out= num*2.2; 
    def fc(num): 
     out= num*3.3; 
    def fd(num): 
     out= num*4.4; 
    options = { 
     "a":fa(num), 
     "b":fb(num), 
     "c":fc(num), 
     "d":fd(num) 
     } 
    out=0 
    options[cc]; 
    return out 
print switchcase(10,"a") 

輸出爲0,我可以想不通

+0

你不返回從子功能什麼。 –

+0

參數'cc' * *實際上被傳遞給'switchcase'函數,但你在哪裏使用它? – davedwards

+0

作爲樣式的註釋(因爲有人可能會指出它),大多數Python編碼器寧願**不**終止帶分號的行。 – mgilson

回答

6

的問題是這個問題:

out=0 
options[cc]; 
return out 

基本上 - 無論什麼options[cc]給你,你要返回0,因爲這是值爲out。請注意,設置out在各種fa,fb,...功能不是更改調用方中的值out

你可能想:

def switchcase(num,cc): 
    def fa(num): 
     return num*1.1; 
    def fb(num): 
     return num*2.2; 
    def fc(num): 
     return num*3.3; 
    def fd(num): 
     return num*4.4; 
    options = { 
     "a":fa(num), 
     "b":fb(num), 
     "c":fc(num), 
     "d":fd(num) 
     } 
    return options[cc]; 

另外請注意,這將是在實踐中效率極其低下。您每次撥打switchcase時都會創建4個功能(並調用每個功能)。

我猜你實際上是想創建一個預先製作的函數圖。然後,你可以拿起你其實從地圖想要的功能,並與給定數量的稱之爲:

def fa(num): 
    return num*1.1 

def fb(num): 
    return num*2.2 

def fc(num): 
    return num*3.3 

def fd(num): 
    return num*4.4 

OPTIONS = { 
    "a":fa, 
    "b":fb, 
    "c":fc, 
    "d":fd 
} 

def switchcase(num,cc): 
    return OPTIONS[cc](num) 
+2

我現在補充說'switchcase(num,cc)'除了'options [cc](num)'什麼也不做,它可能根本不值得擁有這個功能。 –

+0

@StefanPochmann - 這很合理。可以添加其他功能,例如...。如果'cc'不在'options'中怎麼辦? – mgilson

+0

非常感謝你,現在有效。 – Vera123

0

這裏是一個另類服用。您可以直接導航到你切換器之外必要的方法,並且,如果你還需要傳遞可選參數:

def fa(num): 
    return num*1.1 
def fb(num): 
    return num*2.2 
def fc(num): 
    return num*3.3 
def fd(num, option=1): 
    return num*4.4*option 
def f_default(num): 
    return num 

def switchcase(cc): 
    return { 
     "a":fa, 
     "b":fb, 
     "c":fc, 
     "d":fd, 
    }.get(cc, f_default) 

print switchcase("a")(10) # for Python 3 --> print(switchcase("a")(10)) 
print switchcase("d")(10, 3) # for Python 3 --> print(switchcase("d")(10, 3)) 

打印(switchcase( 「A」)(10))

11.0

打印(switchcase( 「d」)(10,3))

132.0

打印(switchcase( 「DDD」)(10))