return 语句的用途是什么?它与打印有何不同?
- 2024-11-18 08:40:00
- admin 原创
- 33
问题描述:
该return
语句起什么作用?在 Python 中应如何使用它?
和 有何return
不同print
?
参见
人们经常尝试print
在函数内部使用循环来查看多个值,并希望能够从外部使用结果。它们需要返回,但return
第一次退出函数。请参阅如何使用“return”从循环中返回多个值?我可以将它们放在列表中吗?。
初学者经常会编写一个最终会print
执行某些操作而不是return
执行某些操作的函数,然后尝试执行print
结果,结果会出乎意料None
。请参阅为什么我的函数输出后会打印“None”?。
在 3.x 中,有时人们会尝试将的结果分配print
给一个名称,或将其用于另一个表达式,例如input(print('prompt:'))
。在 3.x 中,print
是一个函数,因此这不是语法错误,但它返回的None
不是显示的内容。请参阅为什么 print 函数返回 None?。
有时,人们会编写代码试图获取递归print
调用的结果,而不是正确地执行它。就像函数只是被调用一样,这无法通过递归将值传播回去。请参阅为什么我的递归函数返回 None?。return
考虑如何从函数中获取结果(输出)?稍后如何使用结果?这些问题只是关于如何使用 return
,而不考虑print
。
解决方案 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 within foo")
... return 1
...
>>> foo()
hello within foo
1
>>> def bar():
... return 10 * foo()
...
>>> bar()
hello within foo
10
您可以看到,当foo()
从 调用时bar()
,1 不会写入控制台。相反,它用于计算从 返回的值bar()
。
print()
是一个会产生副作用的函数(它在控制台中写入一个字符串),但执行会从下一个语句恢复。return
导致函数停止执行并将值返回给调用它的函数。
解决方案 2:
认为打印语句会引起副作用,它会让您的函数向用户写出一些文本,但不能被其他函数使用。
我将尝试通过一些例子和维基百科的几个定义来更好地解释这一点。
以下是维基百科中函数的定义
在数学中,函数将一个量(函数的自变量也称为输入)与另一个量(函数的值也称为输出)相关联。
想一想。当你说函数有一个值时,这是什么意思?
这意味着你实际上可以用一个正常值替代一个函数的值!(假设这两个值是同一类型的值)
你问为什么你会想这么做?
那么其他可以接受相同类型值作为输入的函数又怎么样呢?
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
有一个数学术语来描述仅依赖输入来产生输出的函数:引用透明性。同样,这是来自维基百科的定义。
引用透明性和引用不透明性是计算机程序部分的特性。如果表达式可以用其值替换而不改变程序的行为,则称其为引用透明
如果您刚开始学习编程,可能有点难以理解这意味着什么,但我认为经过一些尝试后您就会明白。但一般来说,您可以在函数中执行诸如打印之类的操作,也可以在末尾使用 return 语句。
只要记住,当你使用 return 时,你基本上是在说“调用此函数与写入返回的值相同”
如果您拒绝输入自己的返回值,Python 实际上会为您插入一个返回值,该返回值称为“None”,它是一种特殊类型,表示什么都没有,或者为空。
解决方案 3:
我认为字典是你最好的参考资料
返回并打印
简而言之:
return 返回一些内容或回复函数的调用者,而print 则 生成文本
解决方案 4:
在 python 中,我们用 开始定义一个函数def
,并且通常(但不一定)用 结束该函数return
。
假设我们想要一个函数,将2
输入值加起来x
。在数学中,我们可能会写出类似 的内容f(x) = x + 2
来描述这种关系:在 处求值的函数值x
等于x + 2
。
在 Python 中,它看起来像这样:
def f(x):
return x + 2
也就是说:我们def
编写一个名为 的函数f
,该函数将被赋予一个x
值。当代码运行时,我们会计算出x + 2
和return
该值。我们不是描述关系,而是列出计算结果必须采取的步骤。
定义函数后,可以使用任何你喜欢的参数来调用它。它不必在调用代码中命名,甚至不必是变量:x
print f(2)
>>> 4
我们可以用其他方式编写该函数的代码。例如:
def f(x):
y = x + 2
return y
甚至
def f(x):
x = x + 2
return x
再次,我们按顺序执行以下步骤 -x = x + 2
改变所指的内容x
(现在它指的是总和的结果),这就是所得到的return
(return x
因为那是发生时的值return
)。
解决方案 5:
return
意思是“从这个函数输出这个值”。
print
表示“将该值发送到(通常)标准输出”
print
在 Python REPL 中,函数的返回值默认会输出到屏幕上(这与ing不同)。此输出仅发生在 REPL 中,而不是在运行文件中的代码时。它与REPL 中任何其他表达式.py
的输出相同。
这是一个打印的示例:
>>> 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
>>>
这是一个返回的示例:
>>> 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
>>>
解决方案 6:
这个答案涵盖了上面没有讨论过的一些情况。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'
解决方案 7:
请注意,它return
还可用于控制流。通过return
在函数中间放置一个或多个语句,我们可以说:“停止执行此函数。我们要么得到了想要的结果,要么出了问题!”
例如,想象一下尝试实现str.find(sub)
如果我们只有str.index(sub)
可用的(如果未找到子字符串index
则引发,而返回)。ValueError
`find`-1
我们可以使用一个try/except
块:
def find(s: str, sub: str) -> int:
try:
return s.index(sub)
except ValueError:
return -1
这很好,而且可以工作,但表达能力不强。目前还不清楚什么会导致str.index
引发ValueError
:阅读此代码的读者必须理解的工作原理str.index
才能理解的逻辑find
。
我们不用添加文档字符串,说“...除非sub
未找到,否则返回-1
”,而是可以让代码文档本身,如下所示:
def find(s: str, sub: str) -> int:
if sub not in s:
return -1
return s.index(sub)
这使得逻辑非常清晰。
关于这一点的另一个好处是,一旦我们到达那里,return s.index(sub)
我们就不需要将它包装起来,try/except
因为我们已经知道子字符串存在!
有关此使用方式的更多建议,请参阅Python 指南的代码样式部分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
因此,这段简单的代码会计算某些事物出现的次数。return 的位置很重要。它告诉您的程序您需要在哪里获取值。因此,当您打印时,您会将输出发送到屏幕。当您返回时,您会告诉值去某个地方。在这种情况下,您可以看到 count = 0 用 return 缩进 - 我们希望值 (count + 1) 替换 0。如果您尝试遵循代码逻辑,当您进一步缩进 return 命令时,输出将始终为 1,因为我们永远不会告诉初始计数发生变化。我希望我做对了。哦,return 始终在函数内部。
解决方案 11:
return
应该用于递归函数/方法,或者您想将返回的值用于算法中的后续应用。
print
当您想要向用户显示有意义且期望的输出,并且不想用用户不感兴趣的中间结果弄乱屏幕时,应该使用它们,尽管它们对于调试代码很有帮助。
以下代码显示如何正确使用return
和print
:
def fact(x):
if x < 2:
return 1
return x * fact(x - 1)
print(fact(5))
这个解释适用于所有的编程语言,而不仅仅是python。
解决方案 12:
return
是函数定义的一部分,而print
将文本输出到标准输出(通常是控制台)。
函数是接受参数并返回值的过程。return
是用于后者,而前者是用 完成的def
。
例子:
def timestwo(x):
return x*2
解决方案 13:
函数最好的一点return
是你可以从函数返回一个值,但你也可以用 做同样的事情,print
那么有什么区别呢?基本上不仅仅是return
返回它以对象形式提供输出,这样我们就可以将函数的返回值保存到任何变量中,但我们不能用 做,print
因为它和 一样。stdout/cout
`C Programming`
按照以下代码可以更好地理解
代码
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
。需要注意的重要一点是最后一行,我们说了 return a + b
(in add
)。它的作用如下:
我们的函数用两个参数调用:
a
和b
。我们打印出我们的函数正在做什么,在本例中是“添加”。
然后我们告诉 Python 做一些反向的事情:我们返回 的加法
a + b
。您可以这样说,“我将它们相加a
,b
然后返回。”Python 将这两个数字相加。然后当函数结束时,运行该函数的任何行都可以将此
a + b
结果赋给一个变量。
解决方案 14:
简单的事实是print
和彼此无关return
。用于在终端上显示内容(对于命令行程序) 。1用于在调用函数时返回结果,以便可以在程序逻辑的下一步中使用它。print
return
许多初学者在 Python解释器提示符2中尝试代码时会感到困惑,例如
>>> def example():
... return 1
...
>>> example()
1
值被显示了;这不意味着return
显示了东西吗?不。如果您在.py
文件中尝试相同的代码,您可以亲眼看到运行脚本不会导致1
显示。
这实际上不应该令人困惑,因为它的工作方式与任何其他表达式相同:
>>> 1 + 1
2
这会在交互式提示中显示,但如果我们编写一个只说1 + 1
并尝试运行它的脚本则不会显示。
再次强调:如果您需要将某些内容显示为脚本的一部分,print
那么它。如果您需要在计算的下一步中使用它,return
那么它。
秘诀在于,交互式提示会导致显示结果,而不是代码。这是提示为您执行的一个单独步骤,以便您可以一步一步地查看代码的运行情况,以进行测试。
现在,让我们看看会发生什么print
:
>>> def example():
... return 'test'
...
>>> print(example())
test
无论我们在交互式提示中还是在脚本中输入此命令,结果都会显示出来。print
明确用于显示值 - 我们可以看到,它的显示方式不同。交互式提示使用从repr
返回的值的example
,而print
使用str
值的。
从实际角度来说:以文本形式print
向我们展示值是什么样子(对于字符串,这仅意味着字符串的内容原封不动)。交互式提示向我们展示了值是什么——通常是通过编写一些看起来像我们用来创建它的源代码的东西。3
但是等一下 -print
是一个函数,对吧?(无论如何,在 3.x 中)。所以它返回了一个值,对吧?解释器提示符不是应该在其单独的步骤中显示该值吗?发生了什么?
还有一个技巧:print
返回特殊值None
,解释器提示符将忽略该值。我们可以通过使用一些结果为 None 的表达式来测试这一点:
>>> None
>>> [None][0]
>>> def example():
... pass # see footnote 4
...
>>> example()
>>>
在每种情况下,都没有单独的行用于输出,甚至没有空行- 解释器提示符只是返回到提示符。
1它也可以用于写入文件,尽管这是一个不太常见的想法,但通常使用该方法会更清楚.write
。
2这有时被称为 REPL,代表“读取-求值-打印循环”。
3这并不总是可行的,甚至不可能——尤其是当我们开始定义自己的类时。坚定的规则是,repr
将依靠.__repr__
对象的方法来完成脏活;同样,str
依靠.__str__
。
4如果Python 中的函数没有明确返回值,则会隐式返回None
。
解决方案 15:
返回语句——将根据您的功能返回一些值。
def example(n):
if n == 5:
return true
else:
return false
如果您调用上述函数并传递数字 5,那么它将返回 true,否则它将返回 false。
打印功能——它将打印您提供给打印功能或在打印功能括号内的内容。
def example(n):
if n == 5:
print("number is equal")
else:
print("number is not equal")
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件