2013-01-09 35 views
-1

我正在學習Python並使用3.3版本。Python,爲什麼參數切換時返回不起作用?

我發現了一個我無法理解的「返回」問題。

案例1. OK的情況下,當「返回」按預期返回值時。

def switch(a,b): 
    print ("inputed values:", "a is",a, ", b is",b) 
    if b==0: 
     print (a) 
     return a 
    elif b>a: 
     switch(b,a) 

print(switch(15,0)) 

當被執行時:

inputed值:a是15,b是0

病例2的問題的情況下,當 「返回」 返回「無」,雖然「打印」打印值。

def switch(a,b): 
    print ("inputed values:", "a is",a, ", b is",b) 
    if b==0: 
     print (a) 
     return a 
    elif b>a: 
     switch(b,a) 

print(switch(0,15)) 

當被執行時:

inputed值:a爲0,b爲15個

inputed值:a是15,b是0

兩種情況的區別在於,在第二個「elif」分支被執行時,va lues被切換並且功能被再次調用切換值。但在第二種情況下,回報是「無」。 爲什麼在第二種情況下它不會返回「a」值?

回答

3

第二的開關之前添加return語句if語句

return switch(b,a) 

開關方法返回,但缺少return語句是指由switch語句返回的值不返回,因此返回默認None

+1

如果'b!= 0'和'a> = b'''''''''''''''''''''''''''''還應該有一個明確的返回值。 – jfs

+0

謝謝,cobie!你的解決方案確實有效我能否在案例2中要求更多關於我的代碼的解釋,爲什麼它不起作用?我以爲我正在使用遞歸,值得通過沒有問題。使用'print(「輸入值:」,「a是」,a,「,b是」,b)'我可以看到它們確實被正確傳遞,並且第一個if分支被執行。那麼爲什麼「回報」沒有得到正確的價值呢? –

+1

您正在使用遞歸,但是您沒有使用交換機函數返回的值。 switch函數從第一個if語句返回一個值,並且您需要在第二個if語句中返回該值,因此在遞歸調用之前需要返回該值。想想你的爸爸送你去買些東西,然後你送你的雙胞胎兄弟去買它。你的雙胞胎兄弟將物品退回給你,但你的工作沒有完成。你必須進一步將物品退回給你的父親 – cobie

相關問題