Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 棘手的:';dict';对象不可调用_Python_Dictionary - Fatal编程技术网

Python 棘手的:';dict';对象不可调用

Python 棘手的:';dict';对象不可调用,python,dictionary,Python,Dictionary,下面是一个使用Python的字典可能会遇到的棘手错误: dict = {'a':5,'c':5} #Typing some codes 在程序的某个时刻,您决定创建一个空字典: new_dic = dict() 您将得到以下回溯: Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: 'dict' object is not callable 回溯(最近一次

下面是一个使用Python的字典可能会遇到的棘手错误:

dict = {'a':5,'c':5}
#Typing some codes
在程序的某个时刻,您决定创建一个空字典:

new_dic = dict()
您将得到以下回溯:

Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'dict' object is not callable
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“dict”对象不可调用

您能告诉我这是Python中的一个bug吗?或者我们在使用内置函数时必须小心,不要预先为某些变量指定它们的名称?

问题是您的第一行正在覆盖dict是什么。试试这个

dictA = {'a':5,'c':5}
new_dic = dict()

你的问题就会消失。

你遇到的被称为“阴影”。您已经在某个命名空间(模块的全局命名空间或函数的本地命名空间)中创建了一个对象,该对象与内置的dict类型同名。这会阻止您以常规方式访问内置的
dict

你仍然可以做到这一点,再努力一点。
内置对象
(或Python 2中的
\uuuuuuuuuu内置对象
)模块保存所有通常可以直接访问的内置对象。因此,要生成空词典,可以执行以下操作:

import builtins

dict = whatever

newdic = builtins.dict()
但是。。。最好不要在自己的对象中使用名称
dict

在Python中,函数(以及其他所有内容)都是一流的对象。因此Python将您的调用解释为:

dict() -> call value of variable "dict" as a function
在您的情况下,由于存储在
dict
中的值不是code,因此会出现异常

下面是一个快速示例,说明如何使用这种方法调用函数

>>> a = lambda x: x + 2
>>> a
<function <lambda> at 0x10116b230>
>>> a(3)
5
>>> a(7)
9
您还可以将此模式与嵌套函数一起使用来创建闭包

在任何情况下,如果您只是避免使用同时也是关键字或内置项的变量名,您的情况会更好


这是一种阴影情况。分配会隐藏内置的
dict
类型:

>>> type(dict)
<type 'type'>
>>> dict = {'a':5,'c':5}
>>> type(dict)
<type 'dict'>
>类型(dict)
>>>dict={'a':5,'c':5}
>>>类型(dict)
正如错误所描述的,
dict
istance是不可调用的


同样的事情经常发生在内置的
sum
上。

这不可能是一个bug。你能把代码的第一行pase一下吗?而且,不可能调用
int
。错误会说
TypeError:“dict”对象不可调用
。您可以将任何值绑定到任何非关键字名称(有些例外情况如
None=…
)。Python名称解析机制不允许您这样做,因此允许您这样做。这是一个语言设计的决定,不是一个bug。我们都是同意的成年人。我喜欢几乎每个答案都能像你在问题中所做的那样准确地说明问题。
>>> type(dict)
<type 'type'>
>>> dict = {'a':5,'c':5}
>>> type(dict)
<type 'dict'>