让我澄清一下;假设您在Python中有2个函数:
def helloNot():
a = print("Heya!")
helloNot()
将打印出 Heya!,而没有 return 语句。
但是如果我们在此函数中使用 return 语句:
def hello():
a = print("Heya!")
return a
hello()
这也会打印出 Heya!。
我已阅读并了解到 return 语句会将结果返回给函数,但
在我们的例子中,我们使用函数helloNot()
(我们的函数没有return语句):
我们的变量a
,它是一个打印语句,当我们调用它或我遗漏了某些东西时,它会将结果返回给该函数?
在旁注,
为什么以及何时使用return语句?
开始使用return语句是个好习惯吗?
编辑:
使用print
语句是一个更好地表达我的问题的示例。我的问题不是 NOT 围绕 print 陈述。
谢谢。
答案 0 :(得分:2)
通常,当您调用函数时,您希望获得一些结果。例如,当我写s = sorted([3,2,1])
时,对sorted
的调用将返回[1,2,3]
。如果没有,我就没有理由叫它。
return
语句是函数提供该结果的方式。没有其他方法可以做到,所以这不是风格问题。如果函数产生有用的结果,则需要一个return
语句。
在某些情况下,您只是出于副作用而调用函数,并且 没有有用的结果。 print
就是这种情况。
在Python中,即使没有什么用处,函数也总是必须具有值,但是None
是通用的“无用值”值,而省略return
语句意味着您会自动返回None
。
因此,如果您的函数没有有用的返回值,请省略return
语句。您可以可以明确地return None
,但不要这样做—当您希望读者知道您要专门返回None
作为有用值时(例如,如果您的函数在星期二返回None
,在星期五返回3
,隔两天返回'Hello'
,则应该在星期二使用return None
,而不是返回)。当您编写“过程”时,该函数仅出于副作用而被调用且没有任何价值,只是不要return
。
现在,让我们看一下您的两个示例:
def helloNot():
a = print("Heya!")
这将打印出Heya!
,并将print
的返回值分配给您从未使用过的局部变量,然后从函数末尾掉落并隐式返回None
。
def hello():
a = print("Heya!")
return a
这将打印出Heya!
,并将print
的返回值分配给局部变量,然后返回该局部变量。
碰巧,print
总是返回None
,所以无论哪种方式,您碰巧都在返回None
。 hello
可能更清晰一些:它告诉读者我们正在返回print
的(可能是无用的)返回值。
但是编写此函数的更好方法是:
def hi():
print("Heya!")
毕竟,我们知道 print
永远不会有用。即使您不知道,您也知道您对于返回的任何内容都没有用。那么,为什么要存储它,为什么还要返回它呢?
答案 1 :(得分:1)
如果要从函数计算值并将其返回给调用方,则应使用return
语句。
以您的示例为例,如果该函数的目标只是打印固定的字符串,则没有充分的理由返回print
的返回值。
答案 2 :(得分:1)
如果您没有从函数中return
进行任何操作,则Python会return
隐式None
。 print
属于这一类别。
In [804]: a = print('something')
something
In [806]: print(a)
None
类似于用户定义的功能
In [807]: def f():
...: print('this is f')
...:
In [808]: fa = f() # Note this is assigning the *return value* of f()
this is f
In [809]: print(fa)
None
答案 3 :(得分:1)
您正在做的事情不需要return语句,您是对的,但是认为您要计算平均值。
def calculateAverage(x, y, z):
avg = ((x + y + z)/3)
return avg
现在,您已声明一个函数,该函数可以接受3个变量并返回计算得出的平均值,现在您可以从任何函数调用它,而不必使用笨拙的代码。
a = calculateAverage(7, 5, 9)
print("Average is:" + a)
哪个将打印到屏幕“平均为:7”
函数和返回值的作用是,您可以通过在主逻辑中进行一次对复杂函数的调用来使代码更具可读性,这意味着您现在拥有更少的代码行,而更多从长远来看清晰/可维护。
希望这会有所帮助。