我只是不明白函数结尾处return的重要性。无论如何,返回u必须输入print(function()),所以为什么我们不能只在函数的and处键入print(value),以及何时需要使用该函数就像调用function()一样?
def example():
value = 5+5
print(value)
example()
答案 0 :(得分:2)
print
和return
做的不是同一件事。前者向用户显示信息,而后者从功能中提供原始值。请考虑以下内容:
>>> def print_10():
... print(10)
...
>>> def return_10():
... return 10
...
>>> print(return_10() + return_10())
20
>>> print(print_10() + print_10())
Traceback (most recent call last):
...
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
return_10
返回数字10,而print_10
将值10
打印到控制台并返回None
(因为您未指定返回值)。尝试在其他地方使用该值是可能的(None
是有效的结果),但它可能并没有达到您想要的目的。
在显式输入中对此进行的思考使这一点很清楚:
def print_10() -> None:
print(10)
def return_10() -> int:
return 10
答案 1 :(得分:0)
print
语句仅将括号内的内容打印到控制台以供查看,并且不能存储在变量中或对其进行任何操作,因为它是NoneType
我将以一个示例向您展示:
def example():
a = 5
b = 6
print(a + b)
x = example() + 5
print(x)
以上代码将返回TypeError
。
但是如果您将其更改为此:
def example():
a = 5
b = 6
return(a + b)
x = example() + 5
print(x)
你得到16
如果要显示信息而不再次使用,请使用print
否则使用return
答案 2 :(得分:0)
有一个称为separation of concerns的原则,建议每个代码单元(函数,类,模块等)应仅负责做一件事(其中“一件事”的定义可以灵活说明) (用于讨论的代码单元的大小)。好处是遵循此原理的代码更易于测试,调试,组合和重用。
如果您编写了一个打印结果的函数,则在您不想打印结果而是以其他方式使用它的情况下,很难重用该代码。该函数执行两件事:计算其结果并打印。如果您不希望它做第二件事,或者希望它以稍微不同的方式做第二件事,那么您就是S.O.L。另一方面,如果该函数只是计算其结果,而仅做一件事,则调用者可以轻松地将其打印出来。
也就是说,如果您经常发现自己要打印结果,那么提供第二个函数来调用第一个函数并打印结果可能是有意义的,尤其是在打印复杂的情况下。但是拥有第一个可用功能是将来代码重用的胜利。
一些开发方法建议您编写最简单的方法。但我认为,在许多情况下,保持关注点分离是忽略此建议的明显且合乎逻辑的理由。