作为一个Pythoner,你真的懂None么?
2024-06-05 加入收藏
先来俩问题
今天上来先问大家两个问题,考察下大家对None
了解如何:
既然在Python中万物皆对象,那么 None
是谁的对象呢?或者说None
是什么类型的呢?你知道 None
有什么属性?或使用过None
的什么方法吗?
能回答上来吗?
什么是None?
None是Python中一个特殊的常量;
None与False
、""
、[]
...这些表示空
的概念不同,None表示的是一种虚无
。
None也是某个类型的实例,但是你创建不了另一个None;
None的应用场景
这个....
说实话我用的场景非常单一,就是在声明变量时不知道该赋什么值就会赋它为None。
就类似于Java中,先给变量定义下类型,但未赋予任何值。
还有一种是在函数中使用return语句时,如果return后面没有值,会隐式返回None
。这种情况下我们更多的作用是中断函数的执行,所以并不关心它返回了什么。
❝对于
❞None
的使用远不如""
,[]
,{}
,False
来得多。小伙伴如果有更多的应用场景,欢迎评论留言。
剖析下None值到底是什么?
先回答,开篇第一个问题:
❝既然在Python中万物皆对象,那么
❞None
是谁的对象呢?或者说None
是什么类型的呢?
答案:
>>> type(None)
<class 'NoneType'>
None是NoneType的实例。
再来第二个问题:
❝你知道
❞None
有什么属性?或使用过None
的什么方法吗?
答案:
>>> dir(None)
['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
对比下False
的内置方法,None真是可怜:
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
我试了几个内置的魔术方法,希望能提高大家对None的了解:
>>> None.__str__()
'None'
>>> None.__bool__()
False
>>> None.__hash__()
-9223372036573184122
>>> None.__repr__()
'None'
>>> None.__sizeof__()
16
只能有一个None
None作为NoneType的单例,在Python运行的解释环境中只有一个(解释器启动时实例化,解释器退出时销毁)
>>> a = None
>>> b = None
>>> a is b
True
>>> id(a)
4505466984
>>> id(b)
4505466984
最后
最后教大家一个没啥用的None使用场景,看代码吧:
a = None
b = False
if not a:
print("maishu")
if not b:
print("K")
输出结果:
maishu
K
❝在if、while 等条件语句时,
❞None
和False
两者都表示假值。