当我偶然发现一个带有多处理Manager指令的奇怪行为时,我正在研究一个更大的示例,即在多处理时共享数据。
from multiprocessing import Manager
mgr = Manager()
d = mgr.dict()
if not d:
print("not d is True")
if not d == None:
print("d == None is false")
输出:
not d is True
d == None is false
我做错什么了吗?如果可以,请告诉我这是什么。如果不是,这是一个错误吗?
在Python 2.7和Python 3中见过
答案 0 :(得分:1)
不,这不是不一致的地方,not d
和d == None
测试了两种不同的事物。
not d
对于在布尔上下文中计算为True
的任何d
返回False
。例如,对于以下所有x,not x
为True
:
x = 0
x = []
x = ()
x = ""
x = {}
x = None
您可以询问Python是否通过显式转换为布尔值将对象评估为是/否:
>>> bool(d)
False
d == None
测试d
是否正好是None
单例(因此,写d is None
而不是d == None
是惯用的)。使用与上述相同的示例:
>>> {} == None
False
>>> [] == None
False
>>> False == None
False
>>> None == None
True
将其全部归结,您的两个测试将减少:
if not d
if not bool(d)
if not False
if True
if not d == None
if not (d == None)
if not False
if True
与您的输出匹配的