None 应该被视为数据类型吗?(Python)

Kik*_*iko 1 python theory

我知道这听起来很愚蠢,但我正在读一本编程书,他们讨论了 print() 如何不返回任何内容(None)。他们使用这段代码来解释它。

a = 10
b = 15

c = print('a =', a, 'b=', b)

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

我明白了,c不是 print() 可以接受并打印它的任何数据类型。c只是有一个空值,因为它不是有效的数据类型。

但数据类型是什么cNone是什么数据类型?如果c不是字符串、整数、浮点数,也不是布尔值,那么它是什么?None不应该是它自己的数据类型吗?

PS 如果我转到 python 并分配一个变量None并打印它,它会识别数据值并且不会吐出名称错误。所以理论上来说, *None 是它自己的数据类型,对吧

哦,为什么Python不转换c成字符串然后打印呢?

Dan*_*erg 9

None是(就像Python中除了关键字之外的其他所有东西一样)一个对象。这意味着它是一个的实例(或者如果您愿意的话可以键入)。None是 的一个实例NoneType,如果执行以下操作,您可以找到它:

print(type(None))  # <class 'NoneType'>
Run Code Online (Sandbox Code Playgroud)

所以是的,NonePython 中有自己的数据类型。

该类的特殊之处在于它只有一个实例:None。是的,为该类定义了一个字符串表示形式NoneType。当你这样做时,字符串表示形式是"None",你会看到:(在这种情况下都是等价的)

print(None)
print(str(None))
print(repr(None))
Run Code Online (Sandbox Code Playgroud)

附:

还值得强调的是,这None实际上是一个。这意味着该类只有一个实例NoneType。这就是为什么您可以使用 进行身份比较None,即:

if my_variable is None:
    ...
Run Code Online (Sandbox Code Playgroud)

与这样的相等比较(当然也有效)相反:

if my_variable == None:
    ...
Run Code Online (Sandbox Code Playgroud)

当任何函数(包括诸如 之类的内置函数print)没有显式 return 语句或空语句(例如return后面没有任何内容)时,它们总是隐式返回该一个特殊None对象。