如何将字典功能重新分配给 'dict'?
如何将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的方法更简单。
开玩笑的,我在我的帖子中提供了两种方法,并声称了副作用。
如何将字典的功能重新分配给'dict'呢?
在Python中,dict
是一个内置函数。内置函数被分组在builtin
包中。因此,可以使用以下代码将其重新分配给dict
:
import builtins dict = builtins.dict
不过,建议不要覆盖内置函数,不要将变量命名为list
、dict
、set
、int
、float
等。
即使如此,您也可以将dict
从作用域中移除。在这种情况下,Python将会回退到内置函数。因此,您需要删除该变量:
temp_dict = dict del dict # 移除`dict`,现在它将委托给内置的`dict`
例如:
>>> dict = {} >>> dict {} >>> del dict >>> dict <class 'dict'>
因此,您将其从作用域中删除,然后Python将再次将其绑定到"外部"作用域。
是的,我永远不会这样做。它一直困扰着我很长时间,所以我才提出这个问题。