函数返回None没有return语句

时间:2011-08-13 22:17:25

标签: python function

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

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

print(jiskya(2, 3))

给出了输出:

>>>
2
None

None来自哪里?它是什么?

7 个答案:

答案 0 :(得分:44)

这是您打印出来的函数的返回值。如果没有return语句(或just a return without an argument),则会在函数末尾添加隐式return None

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

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

print(jiskya(2, 3))

答案 1 :(得分:9)

好的,当你这样做时开始:

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

答案 2 :(得分:2)

  

'无'来自哪里?

功能。

  

它是什么?

这是函数返回的内容。

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

None是一个特殊的对象,应该代表没有任何真实的东西。它的类型是NoneType(它是该类的一个实例)。每当您没有显式返回任何内容时,您将隐式返回None。

您编写的函数可以打印两个值xy中的一个,但不能返回任何内容。所以None被退回了。然后你要求Python打印调用函数的结果。所以它调用了函数(打印其中一个值),然后将返回值打印为None,作为文本“无”。

答案 3 :(得分:1)

Ya,基本上你在函数中使用print语句作为返回信息的方法。你不应该这样做。打印与return语句不同。如果您只是希望函数在没有none的情况下给出答案,只需输入jiskya(2,3)即可。您将看到函数抛出的内容,因为函数中有print语句。如果你在函数中键入“return”,它就不会在函数调用之前没有“print”的情况下给你任何东西。

答案 4 :(得分:0)

问题是你写了print jiskya(2,3)。您将jiskya的返回值传递给print函数。 jiskya本身打印xy,这就是为什么你会看到2.然后print语句中的print jiskya(2, 3)本身执行时没有参数。< / p>

对于翻译来说,这是对所发生情况的简化:

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

答案 5 :(得分:0)

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

你应该做这样的事情:

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

然后,

>>> print yourfunction(2, 3)
2

答案 6 :(得分:0)

请考虑以下示例:

没有返回语句的功能

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