【问题标题】:Python multiprocessing manager dict bug?Python 多处理管理器 dict 错误?
【发布时间】:2018-08-07 22:05:25
【问题描述】:
当我偶然发现多处理管理器字典的这种奇怪行为时,我正在研究一个在多处理时共享数据的更大示例。
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
【问题讨论】:
标签:
python
python-3.x
python-2.7
python-multiprocessing
【解决方案1】:
不,这不是不一致,not d 和 d == None 测试两个不同的东西。
not d 返回 True 用于在布尔上下文中计算为 False 的任何 d。例如,对于以下所有 x,not x 是 True:
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
与您的输出相匹配。