Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回语句和缩进_Python_Return - Fatal编程技术网

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谢谢你指出我错过了!我已经编辑了答案。没问题:)正如你所说的,
最后的问题是