Python多处理管理器dict错误



我正在研究一个关于在多处理时共享数据的更大示例,这时我偶然发现了多处理管理器dict的这种奇怪行为。

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 中看到

不,这不是不一致,not dd == None测试两种不同的东西。


not d为布尔上下文中求值为False的任何d返回True。例如,对于以下所有x,not xTrue:

  • x = 0
  • x = []
  • x = ()
  • x = ""
  • x = {}
  • x = None

您可以通过显式转换为布尔值来询问Python是否将对象求值为True/False:

>>> 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

与您的输出相匹配。