如何将字典功能重新分配给 'dict'?

12 浏览
0 Comments

如何将字典功能重新分配给 'dict'?

我不小心将一个字典赋值给关键字dict,现在导致出现dict object not callable的错误。那么我如何在不重新启动内核的情况下重新赋予它原本的功能呢?

0
0 Comments

如何将dict功能重新分配给'dict'?

在Python中,覆盖关键字是一个不好的主意。如果你想要恢复你的dict,可以使用以下代码:

from builtins import dict
d = dict()

但是这段代码会再次覆盖你定义的dict。所以你可以使用以下代码来控制作用域:

dict = lambda: 'damn it, I override the buildins'
d = dict()
print(d)
from contextlib import contextmanager
def get_dict_back():
    import builtins
    yield builtins.dict
with get_dict_back() as build_dict:
    d = build_dict({'a': 1})
    print(d)
print(dict())

内置的dict只在with语句中可用。

输出:

damn it, I override the buildins
{'a': 1}
damn it, I override the buildins

这似乎是反直觉的,因为已经有一个名为"dict"的现有变量,你不想也遮蔽它。将其保持在其命名空间中会更好。

ᴏʟᴅsᴘᴇᴇᴅ,你是对的,我会改进它。

虽然我觉得Willem Van Onsem的方法更简单。

开玩笑的,我在我的帖子中提供了两种方法,并声称了副作用。

0
0 Comments

如何将字典的功能重新分配给'dict'呢?

在Python中,dict是一个内置函数。内置函数被分组在builtin包中。因此,可以使用以下代码将其重新分配给dict

import builtins
dict = builtins.dict

不过,建议不要覆盖内置函数,不要将变量命名为listdictsetintfloat等。

即使如此,您也可以将dict从作用域中移除。在这种情况下,Python将会回退到内置函数。因此,您需要删除该变量

temp_dict = dict
del dict  # 移除`dict`,现在它将委托给内置的`dict`

例如:

>>> dict = {}
>>> dict
{}
>>> del dict
>>> dict
<class 'dict'>

因此,您将其从作用域中删除,然后Python将再次将其绑定到"外部"作用域。

是的,我永远不会这样做。它一直困扰着我很长时间,所以我才提出这个问题。

0