您所指的书显然是试图大大简化的含义None
。Python的变量不具备初始,空状态- Python的变量绑定(只),他们定义的时候。如果不给它一个值,就不能创建一个Python变量。
>>> print(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> def test(x):
... print(x)
...
>>> test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: test() takes exactly 1 argument (0 given)
>>> def test():
... print(x)
...
>>> test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in test
NameError: global name 'x' is not defined
但是有时候您想让一个函数根据变量是否定义而具有不同的含义。您可以创建默认值为的参数None
:
>>> def test(x=None):
... if x is None:
... print('no x here')
... else:
... print(x)
...
>>> test()
no x here
>>> test('x!')
x!
None
在这种情况下,此值是特殊值并不十分重要。我可以使用任何默认值:
>>> def test(x=-1):
... if x == -1:
... print('no x here')
... else:
... print(x)
...
>>> test()
no x here
>>> test('x!')
x!
…但是None
到处都有给我们带来两个好处:
- 我们不必选择
-1
含义不明确的特殊值,并且
- 实际上,我们的函数可能需要
-1
作为普通输入处理。
>>> test(-1)
no x here
哎呀!
因此,这本书在使用“ 重设 ”一词时通常会产生一些误导–分配None
名称是向程序员发出信号,表明该值未在使用中,或者该函数应以某种默认方式运行,但需要重设一个值要恢复其原始的未定义状态,您必须使用del
关键字:
>>> x = 3
>>> x
3
>>> del x
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
None
不是变量的默认空状态。