Python多处理管理器dict错误?

时间:2018-08-07 22:05:25

标签: python python-3.x python-2.7 python-multiprocessing

当我偶然发现一个带有多处理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中见过

1 个答案:

答案 0 :(得分:1)

不,这不是不一致的地方,not dd == None测试了两种不同的事物。


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

  • 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

与您的输出匹配的