关于python:return语句的目的是什么?

What is the purpose of the return statement?

返回语句是什么的简单基本解释是什么,如何在Python中使用它?

它和print声明有什么区别?


print()函数写入控制台中的字符串,即"prints"。return语句使函数退出并将值返回给调用方。一般来说,函数的作用是接受输入并返回一些东西。当函数准备返回值给调用方时,使用return语句。

例如,这里有一个同时使用print()return的函数:

1
2
3
def foo():
    print("hello from inside of foo")
    return 1

现在可以运行调用foo的代码,如下所示:

1
2
3
4
5
if __name__ == '__main__':
    print("going to call foo")
    x = foo()
    print("called foo")
    print("foo returned" + str(x))

如果您将其作为脚本(如.py文件)运行,而不是在python解释器中运行,您将得到以下输出:

1
2
3
4
going to call foo
hello from inside foo
called foo  
foo returned 1

我希望这能更清楚些。解释器将返回值写入控制台,这样我就能明白为什么会有人被混淆。

下面是来自解释器的另一个示例,演示了:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> def foo():
...     print("hello from within foo")
...     return 1
...
>>> foo()
hello from within foo
1
>>> def bar():
...   return 10 * foo()
...
>>> bar()
hello from within foo
10

您可以看到,当从bar()调用foo()时,1没有写入控制台。相反,它用于计算从bar()返回的值。

print()是一个产生副作用的函数(它在控制台中写入一个字符串),但执行将随着下一条语句继续。return导致函数停止执行,并将值返回到调用它的任何对象。


我想这本词典是你最好的参考资料

返回并打印

简而言之:

当print生成文本时,return返回或答复函数的调用方


把print语句看作是产生了一个副作用,它使您的函数向用户写出一些文本,但另一个函数不能使用它。

我将尝试用一些例子和一些维基百科的定义来更好地解释这一点。

这是维基百科中一个函数的定义。

在数学中,一个函数将一个量,即函数的参数(也称为输入)与另一个量,即函数的值(也称为输出)相关联。

想一想。当你说函数有一个值的时候,它意味着什么?

它的意思是你可以用一个正常值来代替一个函数的值!(假设两个值的类型相同)

你为什么要这样问?

其他可以接受与输入相同类型值的函数呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
def square(n):
    return n * n

def add_one(n):
    return n + 1

print square(12)

# square(12) is the same as writing 144

print add_one(square(12))
print add_one(144)
#These both have the same output

对于只依赖输入来产生输出的函数,有一个奇特的数学术语:参照透明。同样,维基百科的定义。

引用透明性和引用不透明性是计算机程序部分的属性。如果一个表达式可以用它的值替换而不改变程序的行为,那么就说它是引用透明的。

如果您刚开始编程,可能会有点难以理解这意味着什么,但我认为您将在一些实验之后得到它。不过,一般来说,您可以在函数中执行print之类的操作,并且在末尾也可以有一个RETURN语句。

请记住,当您使用RETURN时,您基本上是在说"对该函数的调用与写入返回的值相同"。

如果拒绝输入自己的值,python实际上会为您插入一个返回值,它被称为"none",它是一个特殊的类型,只意味着什么都没有,或者为空。


在Python中,我们开始用"def"定义一个函数,通常(但不一定)以"return"结束函数。

变量x的函数表示为f(x)。这个函数的作用是什么?假设这个函数加2到x,那么,f(x)=x+2

现在,这个函数的代码是:

1
2
def A_function (x):
    return x + 2

定义函数后,可以将其用于任何变量并获得结果。例如:

1
2
print A_function (2)
>>> 4

我们只需编写稍微不同的代码,例如:

1
2
3
4
def A_function (x):
    y = x + 2
    return y
print A_function (2)

这也将给出"4"。

现在,我们甚至可以使用以下代码:

1
2
3
4
def A_function (x):
    x = x + 2
    return x
print A_function (2)

也就是说4。请看,返回旁边的"x"实际上意味着(x+2),而不是"a_函数(x)"的x。

我想从这个简单的例子中,您可以理解RETURN命令的含义。


以上未讨论的案例。RETURN语句允许您在到达末尾之前终止函数的执行。执行流立即返回调用方。

第9行:

1
2
3
4
5
6
7
8
9
10
def ret(n):
    if n > 9:
         temp ="two digits"
         return temp     #Line 4        
    else :
         temp ="one digit"
         return temp     #Line 8
    return     #Line 9
    print ("return statement")
ret(10)

在执行条件语句之后,函数ret()由于返回而终止(第9行)。因此,打印("返回语句")不会被执行。

1
 output : two digits

在返回语句或控制流未到达的位置之后出现的代码是死代码。

返回值在第4行和第8行中,RETURN语句用于在执行条件后返回临时变量的值。

要显示打印和返回之间的差异:

1
2
3
4
5
6
7
8
9
10
11
12
13
 def ret(n):
     if n > 9:
         print("two digits")
         return"two digits"          
     else :
         print("one digit")
         return"one digit"    
     return      
ret(25)


output : two digits
        'two digits'

return的意思是"从这个函数输出这个值"。

print表示"将该值发送(一般)到stdout"

在python repl中,默认情况下会向屏幕输出一个函数返回(这与print不同)。

这是一个打印示例:

1
2
3
4
5
6
7
8
9
10
>>> n ="foo
bar"
#just assigning a variable. No output
>>> n #the value is output, but it is in a"raw form"
'foo
bar'

>>> print n #the
 is now a newline
foo
bar
>>>

这是一个返回示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> def getN():
...    return"foo
bar"

...
>>> getN() #When this isn't assigned to something, it is just output
'foo
bar'

>>> n = getN() # assigning a variable to the return value. No output
>>> n #the value is output, but it is in a"raw form"
'foo
bar'

>>> print n #the
 is now a newline
foo
bar
>>>


再加上@nathan hughes的绝妙回答:

return语句可以用作一种控制流。通过将一个(或多个)return语句放在一个函数的中间,我们可以说:"停止执行这个函数。我们要么得到了我们想要的,要么出了问题!"

下面是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> def make_3_characters_long(some_string):
...     if len(some_string) == 3:
...         return False
...     if str(some_string) != some_string:
...         return"Not a string!"
...     if len(some_string) < 3:
...         return ''.join(some_string,'x')[:,3]
...     return some_string[:,3]
...
>>> threechars = make_3_characters_long('xyz')    
>>> if threechars:
...     print threechars
... else:
...     print"threechars is already 3 characters long!"
...
threechars is already 3 characters long!

有关使用return的更多建议,请参阅《Python指南》的代码样式部分。


"返回"和"打印"之间的区别也可以在以下示例中找到:

返回:

1
2
3
4
5
6
7
def bigger(a, b):
    if a > b:
        return a
    elif a <b:
        return b
    else:
        return a

上述代码将为所有输入提供正确的结果。

打印:

1
2
3
4
5
6
7
def bigger(a, b):
    if a > b:
        print a
    elif a <b:
        print b
    else:
        print a

注意:对于许多测试用例,这将失败。

错误:

1
----

FAILURE: Test case input: 3, 8.

1
            Expected result: 8

江户十一〔3〕江户十一〔6〕号

1
            Expected result: 4

FAILURE: Test case input: 3, 3.

1
            Expected result: 3

You passed 0 out of 3 test cases


return是函数定义的一部分,而print将文本输出到标准输出(通常是控制台)。

函数是一个接受参数并返回值的过程。return代表后者,前者代表def

例子:

1
2
def timestwo(x):
    return x*2

这是我的理解。(希望它能帮助别人,而且是正确的)。

1
2
3
4
5
6
def count_number_of(x):
    count = 0
    for item in x:
        if item =="what_you_look_for":
        count = count + 1
    return count

所以这段简单的代码计算了一些事情发生的次数。回报的位置很重要。它告诉你的程序你在哪里需要这个值。因此,当您打印时,您将输出发送到屏幕。当你返回时,告诉值去某个地方。在这种情况下,您可以看到count=0与return缩进-我们希望值(count+1)替换0。如果在进一步缩进RETURN命令时尝试遵循代码逻辑,则输出将始终为1,因为我们不会告诉初始计数发生更改。我希望我做对了。哦,返回总是在函数内部。


关于return函数,最好的一点是您可以从函数返回一个值,但是您可以使用print来做同样的事情,那么有什么区别呢?基本上,return不只是返回它以对象形式给出输出,这样我们就可以将函数的返回值保存到任何变量,但是我们不能处理print,因为它与C Programming中的stdout/cout相同。

请遵循以下代码以更好地理解

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def add(a, b):
    print"ADDING %d + %d" % (a, b)
    return a + b

def subtract(a, b):
    print"SUBTRACTING %d - %d" % (a, b)
    return a - b

def multiply(a, b):
    print"MULTIPLYING %d * %d" % (a, b)
    return a * b

def divide(a, b):
    print"DIVIDING %d / %d" % (a, b)
    return a / b


print"Let's do some math with just functions!"

age = add(30, 5)
height = subtract(78, 4)
weight = multiply(90, 2)
iq = divide(100, 2)

print"Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq)


# A puzzle for the extra credit, type it in anyway.
print"Here is a puzzle."

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

print"That becomes:", what,"Can you do it by hand?"

我们现在为add, subtract, multiply,divide做我们自己的数学函数。重要的是要注意的是最后一行,即返回a + b(在add)。其作用如下:

  • 使用两个参数调用函数:ab
  • 我们打印出我们的函数在做什么,在本例中是"添加"。
  • 然后我们告诉python做一些向后的事情:返回a + b的加法。你可以这样说,"我加上ab,然后把它们还回去。"
  • python将两个数字相加。然后,当函数结束时,运行它的任何一行都可以将这个a + b结果赋给一个变量。

  • return应用于递归函数/方法,或者您希望在算法中为以后的应用程序使用返回值。

    当您想向用户显示有意义的和期望的输出,并且不想让屏幕上出现用户不感兴趣的中间结果时,尽管这些结果有助于调试代码,但应该使用print

    下面的代码说明如何正确使用returnprint

    1
    2
    3
    4
    5
    6
    def fact(x):
        if x < 2:
            return 1
        return x * fact(x - 1)

    print(fact(5))

    这一解释适用于所有编程语言,而不仅仅是Python。