为什么我的函数输出后会打印“None”?
我尝试写了这段代码:
def smaller(x, y):
if x > y:
print(y)
else:
print(x)
print(smaller(2, 3))
我得到了这个结果:
>>>
2
None
那里的 None
是怎么来的?它是什么意思呢?
另见
被接受的答案解释了从函数中 return
一个值的重要性,而不是直接 print
出来。想了解更多,可以查看 return 语句的目的是什么?它和打印有什么不同?。
要理解 None
这个结果本身,可以查看 什么是 'NoneType' 对象?。
如果你在函数内部使用 print
来查看多个值,可能更好的是先 收集 这些值,这样可以让调用代码来打印它们。详情请见 我如何使用 `return` 从循环中返回多个值?可以把它们放在一个列表里吗?。
7 个回答
‘None’是从哪里来的?
是函数的结果。
那它是什么?
它就是函数返回的东西。
在Python中,每个函数都会返回一些东西。它可以返回多个值,像用元组那样,也可以什么都不返回,用None
表示,但总是得有个返回值。这是因为Python不要求你指定返回值的类型(这其实也没什么意义,因为其他地方你也不需要指定类型)。当你想打印None
时,它会显示成字符串“None”。
None
是一个特殊的对象,用来表示没有任何实际的东西。它的类型是NoneType
(它是这个类型的一个实例)。每当你没有明确返回任何东西时,实际上就是返回了None
。
你写的函数是用来打印两个值中的一个x
或y
,而不是返回任何东西。所以它返回了None
。然后你让Python打印调用这个函数的结果。于是它调用了函数(打印了其中一个值),然后打印了返回值,这个返回值是None
,所以显示成了文本“None”。
好的,首先当你这样做的时候:
print(jiskya(2, 3))
你得到的结果基本上是这个:
print(print(2))
那么,这到底发生了什么呢?print(2)
是在输出数字2,然后返回None
,这个None
又被外部调用打印出来。这个过程很简单明了。
现在看看这个:
def hello():
return 2
如果你这样做:
print(hello())
你会得到2,因为如果你打印一个函数,你会得到它的return
(返回)值。return
值是通过return someVariable
来表示的。
虽然print
没有像大多数函数那样有括号,但它也是一个函数,只是在这方面有点特别。print
返回什么呢?什么都不返回。所以当你print print someVariable
的时候,你会得到None
作为第二部分,因为print
的返回值就是None
。
所以正如其他人所说:
def jiskya(x, y):
if x > y:
print(y)
else:
print(x)
应该改写为:
def jiskya(x, y):
if x > y:
return y
else:
return x
这是函数的返回值,你可以把它打印出来。如果函数里没有写返回语句(或者只是写了一个没有参数的 return
),那么在函数的最后会自动加上一个 return None
。
你可能想在函数里返回值,而不是直接打印出来:
def jiskya(x, y):
if x > y:
return y
else:
return x
print(jiskya(2, 3))