【问题标题】: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 dd == None 测试两个不同的东西。


    not d 返回 True 用于在布尔上下文中计算为 False 的任何 d。例如,对于以下所有 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

    与您的输出相匹配。

    【讨论】:

    • 非常感谢,这增加了我对None的理解
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2021-12-05
    • 2013-07-06
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多