我很难理解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
答案 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()之后