退货声明和缩进

时间:2013-07-24 22:48:40

标签: python return

我很难理解return声明。

布尔测试if not test(a)下面是假(意味着if test(a)true),否则语句返回b。

但是在它返回a之后,重写有价值的a,不是吗?

def proc4(a, b):
    if not test(a):
        b = 'udacity'
    else:
        return b
    return a

7 个答案:

答案 0 :(得分:5)

这是人们遇到的一个非常常见的问题:当我的函数有多个返回点时它意味着什么?

撇开关于whether or not多次返回的争论应该发生,事实是他们这样做了。要记住的重要一点是:

功能一返回即完成。

在我熟悉的每种现代编程语言中,只要函数点击返回点,它就会退出处理*。如果有返回值,则返回到最初调用函数的位置。 Python也不例外。

你的功能在那里有一点额外的垃圾,使它更难阅读,这没有帮助。具体来说,b的赋值完全是多余的,因为永远不会使用赋值。为了清晰起见,我们可以像这样重写你的函数,同时仍然解释多个返回:

def proc4(a, b): # line 1
    if test(a):  # line 2
        return b # line 3
    return a     # line 4

现在发生了什么事。假设test(a)在第2行评估为True。我们输入if块,然后遇到第3行:return b。该函数现在将b的值返回到调用它的任何位置,并且执行完成。第4行永远不会被执行。

或者,如果test(a)评估为False,则我们不会输入if块。在这种情况下,我们跳过第3行,直接跳到第4行。现在,我们执行第4行,并将a的值返回到proc4被调用的地方。

*某些流控制语句,例如许多语言中的finally可以导致函数中的代码在遇到return语句后执行。为了简单起见,因为它不在主题,我不打算在这个答案中加入。感谢@Racso指出我错过了这个!

答案 1 :(得分:3)

如果test(a)False,请将b设为'udacity'return a

也可以这样写。

def proc4(a, b):
    if not test(a):
        b = 'udacity'
        return a
    else:
        return b

答案 2 :(得分:3)

  

但是在它返回a

之后

如果已经返回b,则不会。遇到单个return语句后,函数的执行结束并返回一个值。

答案 3 :(得分:2)

您的功能可能更清晰地写成:

def proc4(a, b):
    if test(a):
        return b
    else:
        return a

这有助于您理解逻辑吗?

答案 4 :(得分:1)

如果test(a)true,则该函数返回参数b的原始值。

如果test(a)false,则该函数返回参数a的原始值。

“原始值”是指函数接收的值。

答案 5 :(得分:1)

当我刚接触编程时,我对回归很困惑。事实上,它非常简单。假设我们有一个计算器应用程序。这是我们的添加功能:

def add(x,y):
    return x+y
answer = add(1,1)

答案是2.函数执行操作并返回一个值,就像它是一个变量一样。该函数可以作为值分配给变量。

现在问你的问题:如果a不是真的,b将等于udacity,但不会返回,并且会返回a。否则b将被退回。

答案 6 :(得分:1)

我认为你错过了其他两件重要的事情

if not test(a):
    b = 'udacity'
else:
    return b

首先,如果评估为true,那么您的代码将b设置为'udacity'但不返回。相反,执行继续到下一个代码块。在你的情况下

return a

if - else是互斥的,这意味着如果一个块执行(因为它的条件被评估为true),那么另一个块将默认被跳过。此外,您在一个区块内所做的更改将无法用于另一个区域(您的b分配将永远不会由您的其他人打印)。当if语句的计算结果为false时,代码就会

return b

返回b内的任何内容(同样适用于'return a')。 关于return语句,this Wikipedia entry的第一行非常有用:

  

在计算机编程中,return语句导致执行离开当前子例程,并在调用子例程之后立即恢复到代码中的点

在你的情况下,就在调用proc4()之后