2013-01-09 34 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

相关问题