return 语句的目的是啥?它与印刷有何不同?
Posted
技术标签:
【中文标题】return 语句的目的是啥?它与印刷有何不同?【英文标题】:What is the purpose of the return statement? How is it different from printing?return 语句的目的是什么?它与印刷有何不同? 【发布时间】:2011-10-31 01:16:01 【问题描述】:什么是return语句的简单基本解释,在Python中如何使用?
它和print
语句有什么区别?
【问题讨论】:
How is returning the output of a function different from printing it?的可能重复 【参考方案1】:print()
函数在控制台中写入,即“打印”一个字符串。 return
语句使您的函数退出并将一个值返回给它的调用者。一般来说,函数的重点是接受输入并返回一些东西。 return
语句在函数准备好向其调用者返回值时使用。
例如,这是一个同时使用print()
和return
的函数:
def foo():
print("hello from inside of foo")
return 1
现在您可以运行调用 foo 的代码,如下所示:
if __name__ == '__main__':
print("going to call foo")
x = foo()
print("called foo")
print("foo returned " + str(x))
如果您将其作为脚本(例如 .py
文件)而不是在 Python 解释器中运行,您将获得以下输出:
going to call foo
hello from inside foo
called foo
foo returned 1
我希望这会让它更清楚。解释器将返回值写入控制台,这样我就能明白为什么有人会感到困惑。
下面是来自解释器的另一个例子,它证明了这一点:
>>> 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
导致函数停止执行并将值返回给调用它的任何对象。
【讨论】:
你需要使用"foo returned " + str(x)
,否则你会得到TypeError: cannot concatenate 'str' and 'int' objects
。
@NathanHughes 感谢精心设计的答案。【参考方案2】:
认为 print 语句会导致副作用,它会让你的函数向用户写入一些文本,但它不可能是被另一个函数使用。
我将尝试通过一些示例以及来自 Wikipedia 的一些定义来更好地解释这一点。
这是来自***的函数定义
在数学中,一个函数将一个量,即函数的参数,也称为输入,与另一个量,即函数的值,也称为输出。..
想一想。你说函数有值是什么意思?
这意味着您实际上可以将函数的值替换为正常值! (假设这两个值是同一类型的值)
你为什么要这样问?
其他可以接受与输入相同类型的值的函数呢?
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”,它是一种特殊的类型,它只是意味着什么都没有,或者为 null。
【讨论】:
【参考方案3】:我认为字典是你最好的参考
Return 和 Print
简而言之:
return 返回一些东西或回复给函数的调用者,而print 产生文本
【讨论】:
【参考方案4】:在python中,我们以“def”开始定义一个函数,通常但不一定以“return”结束函数。
变量 x 的函数表示为 f(x)。这个函数有什么作用?假设,这个函数将 2 加到 x 上。所以,f(x)=x+2
现在,这个函数的代码是:
def A_function (x):
return x + 2
定义函数后,您可以将其用于任何变量并获取结果。如:
print A_function (2)
>>> 4
我们可以稍微不同地编写代码,例如:
def A_function (x):
y = x + 2
return y
print A_function (2)
这也会给出“4”。
现在,我们甚至可以使用以下代码:
def A_function (x):
x = x + 2
return x
print A_function (2)
这也将给出 4。请看,return 旁边的“x”实际上表示 (x+2),而不是“A_function(x)”的 x。
我想通过这个简单的例子,你就会明白return命令的含义了。
【讨论】:
【参考方案5】:这个答案涵盖了上面没有讨论过的一些案例。return 语句允许您在到达结束之前终止函数的执行。这会导致执行流程立即返回给调用者。
在第 4 行:
def ret(n):
if n > 9:
temp = "two digits"
return temp #Line 4
else:
temp = "one digit"
return temp #Line 8
print("return statement")
ret(10)
条件语句执行后,ret()
函数由于return temp
而终止(第 4 行)。
因此print("return statement")
不会被执行。
输出:
two digits
出现在条件语句之后或控制流无法到达的地方的这段代码是死代码。
返回值 在第 4 行和第 8 行中,return 语句用于在条件执行后返回临时变量的值。
要区分print和return:
def ret(n):
if n > 9:
print("two digits")
return "two digits"
else :
print("one digit")
return "one digit"
ret(25)
输出:
two digits
'two digits'
【讨论】:
【参考方案6】:return
表示“从这个函数输出这个值”。
print
表示,“将此值发送到(通常)标准输出”
在 Python REPL 中,函数 return 默认会输出到屏幕上(这和 print 不太一样)。
这是一个打印示例:
>>> n = "foo\nbar" #just assigning a variable. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>
这是一个返回的例子:
>>> def getN():
... return "foo\nbar"
...
>>> getN() #When this isn't assigned to something, it is just output
'foo\nbar'
>>> n = getN() # assigning a variable to the return value. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>
【讨论】:
【参考方案7】:只是为了补充@Nathan Hughes 的出色回答:
return
语句可以用作一种控制流。通过在函数中间放置一个(或多个)return
语句,我们可以说:“停止执行这个函数。我们要么得到了我们想要的,要么出了点问题!”
这是一个例子:
>>> 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!
请参阅 Python 指南的 Code Style section,了解有关这种使用 return
的方式的更多建议。
【讨论】:
【参考方案8】:我认为一个非常简单的答案可能在这里有用:
return
使值(通常是一个变量)可供调用者使用(例如,由使用return
的函数所在的函数存储)。如果没有return
,调用者将无法存储/重用您的值或变量。
print
打印到屏幕上,但不使调用者可以使用值或变量。
(完全承认越彻底的答案越准确。)
【讨论】:
【参考方案9】:“return”和“print”的区别也可以在下面的例子中找到:
返回:
def bigger(a, b):
if a > b:
return a
elif a <b:
return b
else:
return a
以上代码将为所有输入提供正确的结果。
打印:
def bigger(a, b):
if a > b:
print a
elif a <b:
print b
else:
print a
注意:对于许多测试用例,这将失败。
错误:
----
FAILURE
: Test case input: 3, 8.
Expected result: 8
FAILURE
: Test case input: 4, 3.
Expected result: 4
FAILURE
: Test case input: 3, 3.
Expected result: 3
You passed 0 out of 3 test cases
【讨论】:
嗯,您提供的测试用例的打印代码没有失败。他们都是正确的!【参考方案10】:这是我的理解。 (希望它会帮助某人,这是正确的)。
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 总是在函数内部。
【讨论】:
【参考方案11】:return
是函数定义的一部分,而print
将文本输出到标准输出(通常是控制台)。
函数是一个接受参数并返回值的过程。 return
用于后者,而前者用def
完成。
例子:
def timestwo(x):
return x*2
【讨论】:
【参考方案12】:return
函数最好的一点是你可以从函数返回一个值,但你可以用print
做同样的事情,那么有什么区别呢?
基本上return
不仅仅是返回它以对象形式提供输出,以便我们可以将函数的返回值保存到任何变量,但我们不能使用print
,因为它与C Programming
中的stdout/cout
相同。
按照下面的代码更好地理解
代码
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
中)的最后一行。它的作用如下:
-
我们的函数使用两个参数调用:
a
和 b
。
我们打印出我们的函数正在做什么,在本例中为“ADDING”。
然后我们告诉 Python 做一些向后的事情:我们返回添加的 a + b
。您可以这样说,“我添加 a
和 b
然后返回它们。”
Python 将这两个数字相加。然后,当函数结束时,运行它的任何行都可以将此 a + b
结果分配给变量。
【讨论】:
【参考方案13】:return
应该用于递归函数/方法,或者您想将返回的值用于算法中的后续应用。
print
应该用于当你想向用户显示一个有意义和期望的输出并且你不想让用户不感兴趣的中间结果弄乱屏幕,尽管它们有助于调试你的代码。
以下代码展示了如何正确使用return
和print
:
def fact(x):
if x < 2:
return 1
return x * fact(x - 1)
print(fact(5))
这种解释适用于所有编程语言,而不仅仅是 python。
【讨论】:
以上是关于return 语句的目的是啥?它与印刷有何不同?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 中的 Streams3 是啥,它与 Streams2 有何不同?
Return-Path 标头与实际的电子邮件退回收件人有何不同?