为什么我的函数输出后会打印“None”?
- 2024-11-19 08:38:00
- admin 原创
- 11
问题描述:
我尝试编写以下代码:
def smaller(x, y):
if x > y:
print(y)
else:
print(x)
print(smaller(2, 3))
我得到了这个结果:
>>>
2
None
这从何而来None
?是什么意思?
参见
接受的答案解释了return
从函数中获取值而不是print
ing 值的重要性。有关更多信息,请参阅return 语句的用途是什么?它与打印有何不同?。
要了解None
结果本身,请参阅什么是“NoneType”对象?。
如果您print
在函数内部执行以查看多个值,则最好收集这些值,以便调用代码可以打印它们。有关详细信息,请参阅如何使用“return”从循环中返回多个值?我可以将它们放在列表中吗?。
解决方案 1:
它是函数的返回值,您可以将其打印出来。如果没有 return 语句(或只有一个return
不带参数的语句),return None
则会在函数末尾添加一个隐式语句。
您可能希望返回函数中的值而不是打印它们:
def jiskya(x, y):
if x > y:
return y
else:
return x
print(jiskya(2, 3))
解决方案 2:
好的,首先执行以下操作:
print(jiskya(2, 3))
您将获得与此非常相似的东西:
print(print(2))
那么,发生了什么?print(2)
打印出 2,并返回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
解决方案 3:
“无”从何而来?
该功能。
那它是什么?
这就是函数返回的内容。
在 Python 中,每个函数都会返回一些内容。它可以使用元组来“返回多个内容”,也可以使用 来“返回任何内容” None
,但它必须返回一些内容。这就是我们处理无法指定返回类型的事实的方式(这毫无意义,因为您不会为其他任何内容指定类型)。当解释为要打印的字符串时,None
将替换为字符串“None”。
None
是一个特殊的对象,它应该表示不存在任何真实的东西。其类型是NoneType
(它是该类的一个实例)。每当您没有明确返回任何内容时,您都会隐式返回 None。
您编写了函数来打印两个值x
或中的一个y
,但不返回任何内容。因此None
返回 。然后您要求 Python 打印调用该函数的结果。因此它调用该函数(打印其中一个值),然后打印返回值,即None
,作为文本“None”。
解决方案 4:
您正在执行两次打印,第一次在函数语料库中,第二次打印函数的结果,实际上为 None。
你应该做这样的事:
def yourfunction(x, y):
if x > y:
return y
else:
return x
然后,
>>> print yourfunction(2, 3)
2
解决方案 5:
是的,基本上,您在函数中使用 print 语句作为返回信息的方式。您不应该这样做。print 与 return 语句不同。如果您只是希望函数给出答案而不带 none,只需键入 jiskya(2, 3)。您将看到函数抛出的内容,因为函数中有 print 语句。如果您在函数中键入“return”,则在函数调用之前没有“print”,它不会给您任何东西。
解决方案 6:
问题是你写了print jiskya(2,3)
。你正在将 的返回值传递jiskya
给print
函数。jiskya
它本身会打印x
或y
,这就是为什么你会看到 2。但是print
语句中的print jiskya(2, 3)
本身会在没有参数的情况下执行。
对于解释器来说,以下是所发生事情的简化:
print jiskya(2,3)
>> Executing jiskya with arguments 2, 3
>> jiskya evaulates `print x`
>> 2 is printed
>> Function jiskya exits with no return value
print None
>> None is printed
解决方案 7:
请考虑以下示例:
没有返回语句的函数
Print() 函数类型为无类型。
def test1():
print("code...!!!")
type(test1())
Output: code...!!!
NoneType
带有返回语句的函数
返回包含 print() 函数的变量“a”,这就是为什么 type() 返回打印函数的数据类型为 NoneType,而不是打印函数内部的数据类型:
def test1():
a= print("code...!!!")
return a
type(test1())
Output: code...!!!
NoneType
这里函数返回变量“a”的数据类型,其中包含一个字符串。
def test1():
a = "First code...!!!"
return a
type(test1())
Output: str
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件