返回有什么作用?什么都没有回来

时间:2013-09-28 12:23:55

标签: python return-value

我已经学习了几天Python。但是,我不明白回报。我从我的教科书和在线阅读了几个解释;他们没有帮助!

也许某人可以以简单的方式解释返回的内容? 我已经写了几个有用的(对我来说)Python脚本,但我从未使用过返回,因为我不知道它的作用。

您能否提供一个简单示例,说明为什么要使用退货?

它似乎也什么都不做:

def sqrt(n):
    approx = n/2.0
    better = (approx + n/approx)/2.0
    while better != approx:
        approx = better
        better = (approx + n/approx)/2.0
    return approx

sqrt(25)

我的教科书告诉我:“尝试用25作为参数调用此函数,以确认它返回5.0。”

我知道如何检查这一点的唯一方法是使用打印。但我不知道他们是否正在寻找。问题就是用25来调用。它没有说要在代码中添加更多内容以确认它返回5.0。

4 个答案:

答案 0 :(得分:4)

return从函数返回一个值:

def addseven(n):
    return n + 7

a = 9
b = addseven(a)
print(b)        # should be 16

它也可以用于退出函数:

def addseventosix(n):
    if n != 6:
        return
    else:
        return n + 7

但是,即使您在函数中没有return语句(或者在未指定要返回的值的情况下使用它),该函数仍会返回一些内容 - None

def functionthatisuseless(n):
    n + 7

print(functionthatisuseless(8))        # should output None

有时您可能希望从函数返回多个值。但是,您不能有多个return语句 - 控制流会在第一个语句之后离开该函数,因此后面的任何内容都不会被执行。在Python中,我们通常使用元组和元组解包:

def addsevenandaddeight(n):
    return (n+7, n+8)        # the parentheses aren't necessary, they are just for clarity

seven, eight = addsevenandaddeight(0)
print(seven)        # should be 7
print(eight)        # should be 8

return语句允许您在其他函数的结果上调用函数:

def addseven(n):
    return n+7

def timeseight(n):
    return n*8

print(addseven(timeseight(9))

# what the intepreter is doing (kind of):
# print(addseven(72))    # 72 is what is returned when timeseight is called on 9
# print(79)
# 79

答案 1 :(得分:2)

您需要添加print或将整个内容写入交互式解释器以查看返回值。

return可以从函数中获取一些输出/结果。要在代码中稍后将该值分配给变量:

a = sqrt(25)

答案 2 :(得分:0)

您的教科书希望您尝试interactive interpreter中的内容,它会在您输入时显示您的值。以下是一个示例:

$ python
Python 2.7.5+ (default, Sep 17 2013, 17:31:54)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def sqrt(n):
...     approx = n/2.0
...     better = (approx + n/approx)/2.0
...     while better != approx:
...         approx = better
...         better = (approx + n/approx)/2.0
...     return approx
...
>>> sqrt(25)
5.0
>>>

这里的关键是表达式和​​语句之间的区别。 def是一个声明,不会产生任何结果。 sqrt块定义的def是一个函数;函数总是产生一个返回值,这样它们就可以用在表达式中,比如sqrt(25)。如果您的函数不包含returnyield,则此值为None,解释器会忽略该值,但在这种情况下,sqrt返回一个自动打印的数字(并存储在变量中)叫_)。在脚本中,您可以使用print sqrt(25)替换最后一行以获取到终端的输出,但返回值的有用之处在于您可以进行进一步处理,例如root=sqrt(25)或{{1 }}。

如果我们要运行与脚本完全相同的行,而不是在交互模式下运行,则不会进行隐式打印。行print sqrt(25)-5被接受为表达式的语句,这意味着它被计算 - 但随后该值被简单地丢弃。它甚至没有进入sqrt(25)(这相当于计算器的Ans按钮)。通常我们将此用于导致副作用的函数,例如_,这会导致Python退出。

顺便说一下,quit()是Python 2中的一个语句,但是Python 3中的一个函数。这就是为什么越来越多的它使用括号的原因。

这是一个依赖于print(在本例中为Python自己的版本)返回值的脚本:

sqrt

答案 3 :(得分:0)

return关键字用于退出函数并返回值。要让函数返回值,请使用return语句。

与Charlie Duffy comments一样,当您不在函数中的任何地方使用return时,Python的隐式返回值为None。换句话说,如果您不告诉函数应该返回什么,那么None就是它返回的内容。

因此,如果您将def gimmieFive(): return 5更改为def gimmieFive(): 5,那么运行x = gimmieFive()的人将拥有 x == None,而不是x == 5。 5只被扔掉时 gimmieFive退出。