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

时间:2017-09-17 12:08:07

标签: python

我不小心为关键字dict分配了一个字典,现在它已经导致dict object not callable。那么如何在不重新启动内核的情况下重新分配功能呢?

2 个答案:

答案 0 :(得分:3)

dict是内置的。 内置组合在builtin中组合在一起。所以你可以使用:

import builtins
dict = builtins.dict

建议是永不覆盖内置:不要分配给名为listdictsetint的变量, float等等。

话虽如此,您也可以从范围中删除dict 。在这种情况下,Python将在内置组件上回退。所以你删除变量

temp_dict = dict
del dict  # remove the `dict`, now it will delegate to the `dict` builtin

例如:

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

所以你将它从范围中删除,然后Python再次将它绑定到&#34;外部&#34;范围。

答案 1 :(得分:2)

覆盖Python中的关键词是一个坏主意。

如果你想要回头,请使用:

from builtins import dict
d = dict()

但是这些代码会再次覆盖你定义的dict。因此,您可以使用以下代码来控制范围:

dict = lambda: 'damn it, I override the buildins'

d = dict()
print(d)

from contextlib import contextmanager


@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())

buildin dict仅在with语句中可用。

输出:

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