函数返回None没有return语句

Gra*_*ant 38 python function

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

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

print(jiskya(2, 3))
Run Code Online (Sandbox Code Playgroud)

给出了输出:

>>>
2
None
Run Code Online (Sandbox Code Playgroud)

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

phi*_*hag 45

它是您打印出的函数的返回值.如果没有return语句(或者只是return没有参数),则会return None在函数末尾添加一个隐式语句.

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

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

print(jiskya(2, 3))
Run Code Online (Sandbox Code Playgroud)

  • @MichaWiedenmann我在[Python参考](https://docs.python.org/dev/reference/index.html)中找不到能达到这种效果的任何语句,但是[这里是添加`的注释(和代码)。在cpython中返回None`](https://github.com/python/cpython/blob/23cee80cfade1a9019c52b3a17d8e5c1b5db17e2/Python/compile.c#L5501-L5510)。 (2认同)

Dai*_*air 9

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

print(jiskya(2, 3))
Run Code Online (Sandbox Code Playgroud)

你得到的东西几乎相当于:

print(print(2))
Run Code Online (Sandbox Code Playgroud)

那么发生了什么?所述print(2)被打印出如图2所示,并返回None其由外呼叫打印.直截了当.

现在看看这个:

def hello():
    return 2
Run Code Online (Sandbox Code Playgroud)

如果你这样做:

print(hello())
Run Code Online (Sandbox Code Playgroud)

你得到2,因为如果你打印出一个函数你会得到任何return价值.(该return值用return someVariable.表示.

现在即使print没有像大多数函数那样的括号,但在这方面它只是一个特殊功能.什么打印返回?没有.因此,当你print print someVariable,你将获得None第二部分,因为print的返回值是None.

正如其他人所说:

def jiskya(x, y):
    if x > y:
        print(y)
    else:
        print(x)
Run Code Online (Sandbox Code Playgroud)

应该重写:

def jiskya(x, y):
    if x > y:
        return y
    else:
        return x
Run Code Online (Sandbox Code Playgroud)


Kar*_*tel 5

“无”从何而来?

功能。

还有,这是什么?

这就是函数返回的内容。

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

None是一个特殊的物体,应该代表任何真实事物的缺失。它的类型是NoneType(它是该类的一个实例)。每当您没有显式返回任何内容时,您就会隐式返回 None 。

您编写了函数来打印两个值x或 之一y,但不返回任何内容。于是就None被退回了。然后你要求 Python 打印调用该函数的结果。因此它调用了该函数(打印其中一个值),然后打印返回值,即None文本“None”。