return 语句的用途是什么?它与打印有何不同?

2024-11-18 08:40:00
admin
原创
10
摘要:问题描述:该return语句起什么作用?在 Python 中应如何使用它?和 有何return不同print?参见人们经常尝试print在函数内部使用循环来查看多个值,并希望能够从外部使用结果。它们需要返回,但return第一次退出函数。请参阅如何使用“return”从循环中返回多个值?我可以将它们放在列表中...

问题描述:

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 + 2return该值。我们不是描述关系,而是列出计算结果必须采取的步骤。

定义函数后,可以使用任何你喜欢的参数来调用它。它不必在调用代码中命名,甚至不必是变量: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(现在它指的是总和的结果),这就是所得到的returnreturn 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 语句用于在条件执行后返回临时变量的值。

指出printreturn之间的区别:

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当您想要向用户显示有意义且期望的输出,并且不想用用户不感兴趣的中间结果弄乱屏幕时,应该使用它们,尽管它们对于调试代码很有帮助。

以下代码显示如何正确使用returnprint

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)。它的作用如下:

  1. 我们的函数用两个参数调用:ab

  2. 我们打印出我们的函数正在做什么,在本例中是“添加”。

  3. 然后我们告诉 Python 做一些反向的事情:我们返回 的加法a + b。您可以这样说,“我将它们相加ab然后返回。”

  4. 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")
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用