我刚刚学习(正在学习)函数参数如何在Python中工作,并且在没有明显原因的情况下,我开始尝试使用它:


def jiskya(x, y):
if x > y:
print y
else:
print x
print(jiskya(2, 3))

给出了输出:


>>>
2
None

None来自哪里? 还有,这是什么?

它是函数的返回值,您可以将其打印出来。如果没有return语句(或者只是没有参数的return),则将隐式return None添加到函数的末尾。

您可能想返回函数中的值,而不是打印它们:



7def jiskya(x, y):
if x > y:
return y
else:
return x
print(jiskya(2, 3))

有没有指定"添加隐式return None"的地方?

@MichaWiedenmann我在Python参考中找不到能达到这种效果的任何语句,但这是在cpython中添加return None的注释(和代码)。

好的,开始时要这样做:

1print(jiskya(2, 3))

您得到的东西几乎与此等效:

1print(print(2))

那么发生了什么? print(2)正在打印输出2,并返回None,该值由外部调用打印。直截了当。

现在来看这个:


def hello():
return 2

如果您这样做:

1print(hello())

之所以得到2,是因为如果您打印出一个函数,则无论得到什么return值。 (return值由return someVariable表示。

现在,即使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

如果print参数处于while循环中怎么办? 如果将" print"替换为" return",则只能打印一个值,而不是完整的迭代。

Where did the 'None' come from?

功能。

And what is it?

这就是函数返回的内容。

在Python中,每个函数都会返回一些信息。使用元组可以"是多件事",或者使用None它可以"什么都不是",但是它必须返回一些东西。这就是我们如何处理无法指定返回类型的事实(这没有意义,因为您没有为其他任何东西指定类型)。当解释为打印字符串时,None将替换为字符串" None"。

None是一个特殊的对象,应该表示没有任何真实的事物。它的类型是NoneType(它是该类的一个实例)。只要您不显式返回任何内容,就隐式返回None。

您编写了该函数以打印两个值x或y之一,但不返回任何值。因此,返回了None。然后,您要求Python打印调用该函数的结果。因此它调用了该函数(打印值之一),然后将返回值None打印为文本" None"。

是的,基本上,您在函数中使用print语句作为返回信息的方式。你不应该这样做。打印与return语句不同。如果您只是想让函数给出没有答案的答案,只需键入jiskya(2,3)即可。您将看到该函数抛出的结果,因为该函数中有print语句。相反,如果您在函数中键入" return",那么在函数调用之前没有" print"将不会给您任何东西。

您要进行两次打印,第一个打印在函数语料库中,第二个打印在打印函数的结果,实际上是"无"。

您应该这样做:


def yourfunction(x, y):
if x > y:
return y
else:
return x

然后,


2>>> print yourfunction(2, 3)


问题是您写了print jiskya(2,3)。您要将jiskya的返回值传递给print函数。 jiskya本身会打印x或y,这就是为什么看到2的原因。但是print jiskya(2, 3)语句中的print本身不会执行任何参数。

对于解释器,这是发生的事情的简化:


7print 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