我很难理解这种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
这是人们遇到的一个很常见的问题:当我的函数有多个返回点时,这意味着什么?
撇开是否应该发生多次回报的争论不谈,事实是它们确实发生了。要记住的重要一点是:
一个函数一返回就结束了。
在我熟悉的每一种现代编程语言中,一旦函数到达返回点,它就会退出处理*。如果有返回值,则将其传递回最初调用函数的位置。Python也不例外。
您的函数中有一些额外的垃圾,使其更难阅读,这无济于事。具体来说,分配 tob
是完全多余的,因为分配的值从未使用过。为了清楚起见,我们可以像这样重写您的函数,同时仍然解释多个返回:
def proc4(a, b): # line 1
if test(a): # line 2
return b # line 3
return a # line 4
现在发生的事情是这样的。假设在第 2 行test(a)
求值True
。我们进入if
块,遇到第 3 行:return b
。该函数现在将 的值返回b
到调用它的任何位置,并且执行完成。第 4 行永远不会执行。
或者,如果test(a)
评估为False
,则我们不进入该if
块。在这种情况下,我们跳过第 3 行,直接到第 4 行。现在,我们执行第 4 行,并将 的值返回到被调用的a
任何地方。proc4
*有某些流控制语句,例如finally
在许多语言中,可能会导致函数中的代码在遇到返回语句后被执行。为简单起见并且因为它是题外话,我不打算在这个答案中讨论这个问题。感谢@Racso 指出我错过了这个!
如果test(a)
是False
, 设置b
为'udacity'
andreturn a
也可以这样写。
def proc4(a, b):
if not test(a):
b = 'udacity'
return a
else:
return b
但就在它回来之后
a
如果它已经返回,则不会b
。在遇到单个返回语句后,函数的执行结束并返回一个值。
您的函数可能会以这种方式更清楚地编写:
def proc4(a, b):
if test(a):
return b
else:
return a
这有助于你理解逻辑吗?
如果test(a)
是true
,则函数返回参数的原始值b
。
如果test(a)
是false
,则函数返回参数的原始值a
。
“原始值”是指函数接收到的值。
当我也是编程新手时,我对返回感到困惑。事实上,这很简单。假设我们有一个计算器应用程序。这是我们的加法函数:
def add(x,y):
return x+y
answer = add(1,1)
答案是 2。函数执行操作并返回一个值,就好像它是一个变量一样。该函数可以作为值分配给变量。
现在回答您的问题:如果 a 不正确,则 b 将等于 udacity,但不会返回并且会返回 a。否则将返回 b。
我认为你错过了另外两件重要的事情
if not test(a):
b = 'udacity'
else:
return b
首先,如果 a 计算结果为 true,则您的代码将 b 设置为值 'udacity'但不返回。相反,执行继续到下一个代码块。在你的情况下
return a
if - else 是互斥的,这意味着如果一个块执行(因为它的条件评估为真),那么默认情况下会跳过另一个块。此外,您在一个块内所做的更改将无法用于另一个块(您的 b 分配永远不会被您的 else 打印)。当您的 if 语句计算结果为 false 时,您的代码会执行
return b
它返回 b 内的任何内容(同样适用于“返回 a”)。关于 return 语句,这个 Wikipedia 条目的第一行真的很有帮助:
在计算机编程中,return 语句会导致执行离开当前子例程,并在调用子例程之后的代码点处继续执行
在您的情况下,就在调用 proc4() 之后