Python 返回语句和缩进
我很难理解Python 返回语句和缩进,python,return,Python,Return,我很难理解return语句 下面的布尔测试if not test(a)为false(表示if test(a)为true),else语句返回b 但是就在它返回a之后,重写有价值的a,不是吗 def proc4(a, b): if not test(a): b = 'udacity' else: return b return a 如果test(a)为False,则将b设置为'udacity'并返回a 也可以这样写 def proc4(a,
return
语句
下面的布尔测试if not test(a)
为false(表示if test(a)
为true
),else语句返回b
但是就在它返回a
之后,重写有价值的a
,不是吗
def proc4(a, b):
if not test(a):
b = 'udacity'
else:
return b
return a
如果test(a)
为False
,则将b
设置为'udacity'
并返回a
也可以这样写
def proc4(a, b):
if not test(a):
b = 'udacity'
return a
else:
return b
如果test(a)
为true
,则函数返回参数b
的原始值
如果test(a)
为false
,则函数返回参数a
的原始值
“原始值”是指函数接收的值
但就在它返回a
如果已返回
b
,则不会返回。遇到一个return语句后,函数的执行结束并返回一个值。您的函数可以用以下方式编写得更清楚:
def proc4(a, b):
if test(a):
return b
else:
return a
这有助于您理解逻辑吗?当我还是编程新手时,我对return感到困惑。事实上,这很简单。假设我们有一个计算器应用程序。这是我们的加法函数:
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是互斥的,这意味着如果执行一个块(如在其条件中计算为true),则默认情况下将跳过另一个块。另外,您在一个块内所做的更改对另一个块不可用(您的b作业永远不会由您的else打印)。当if语句的计算结果为false时,代码将执行该操作
return b
返回b中的任何内容(同样适用于“返回a”)。
关于return语句,的前几行非常有用:
在计算机编程中,return语句使执行离开当前子例程,并在调用该子例程后立即在代码中的某一点恢复
在您的例子中,就在调用proc4()的点之后,这是人们经常遇到的一个问题:当我的函数有多个返回点时,这意味着什么 撇开关于多重回报的争论不谈,事实是它们确实存在。要记住的重要一点是: 函数一返回就结束。 在我熟悉的每一种现代编程语言中,函数一旦到达返回点,就会退出处理*。如果有返回值,则返回到最初调用函数的位置。Python也不例外 你的函数有一点多余的垃圾,使它更难阅读,这是没有帮助的。具体地说,对
b
的赋值是完全多余的,因为从未使用赋值。为了清晰起见,我们可以像这样重写您的函数,同时仍然解释多重返回:
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行:返回b
。该函数现在将b
的值返回到调用它的位置,执行完成。第4行永远不会执行
或者,如果test(a)
评估为False
,则我们不进入if
块。在这种情况下,我们跳过第3行,直接跳到第4行。现在,我们执行第4行,并将a
的值返回到调用proc4
的位置
*某些流控制语句(如许多语言中的流控制语句)会导致函数中的代码在遇到return语句后执行。为了简单起见,也因为这是一个离题的问题,我不打算在这个答案中讨论这个问题。感谢@Racso指出我错过了这个 是不是什么?你能把你的问题弄清楚吗?对不起,我真的想把我的问题弄清楚了……我也很困惑。你认为什么是“重写”到
a
?函数一返回任何内容就完成了。谢谢Henry。因为最尴尬的事实是,我不知道“函数一返回任何东西就完成了”。羞耻……不羞耻!这是引起混乱的一个很常见的原因!b='udacity'
实际上是一个noop。值得注意的是:原始代码有点愚蠢,因为对b
的本地赋值是不相关的,因为从未使用该值。整个函数也可以是:proc4=lambda a,b:b如果测试(a)或者a
如果您详细说明,我将尝试进一步帮助您……谢谢,我确实理解我的函数通过这种方式更清晰。不过,我必须理解为什么我的函数返回的方式与您的函数相同……非常确定在这个小片段的末尾是answer=2
,而不是1
;-)@HenryKeiter Hehe打字错误。谢谢。现在这是有道理的。我只是第一眼看不懂。“在我熟悉的每一种现代编程语言中,一旦函数到达返回点,它就会停止处理”——恐怕你错了。在几种语言中,Try…Catch…Finally
语句的Finally
块即使在返回行被命中时也会执行。看看@Racso谢谢你指出我错过了!我已经编辑了答案。没问题:)正如你所说的,最后的问题是