为什么python';有什么特别处理的吗?

为什么python';有什么特别处理的吗?,python,python-3.x,Python,Python 3.x,我在dict(del=“…”)中遇到了一个bug,python不允许在这里使用del作为键-进一步研究,我发现del在其他一些情况下也是不允许的 我试图理解为什么(可能还有其他关键字?)在其他关键字/标识符完全可以接受的情况下被特别处理(但可能不是最佳实践) >platform.python\u version() '3.8.5' >>>dict(foo='bar') {'foo':'bar'} >>>dict(del='bar') 文件“”,第1行 dict(del='bar') ^ 语法错误

我在
dict(del=“…”)
中遇到了一个bug,python不允许在这里使用
del
作为键-进一步研究,我发现
del
在其他一些情况下也是不允许的

我试图理解为什么(可能还有其他关键字?)在其他关键字/标识符完全可以接受的情况下被特别处理(但可能不是最佳实践)

>platform.python\u version()
'3.8.5'
>>>dict(foo='bar')
{'foo':'bar'}
>>>dict(del='bar')
文件“”,第1行
dict(del='bar')
^
语法错误:无效语法#但为什么?dict(abs='bar')可以
>>>dict(abs='foo')
{'abs':'foo'}
>>>类型(abs)
>>>类型(del)
文件“”,第1行
类型(del)
^
语法错误:无效语法#奇怪!!为什么?是什么赋予了‘德尔’这种特殊的力量?
>>>a=lambda foo,del:'
文件“”,第1行
a=lambda foo,del:'
^
SyntaxError:无效语法
>>>a=lambda列表,索引:del(列表,索引)
文件“”,第1行
a=lambda列表,索引:del(列表,索引)
^
SyntaxError:无效语法

del()
或python的语句标识符肯定有一些特殊之处,不能以这种方式使用。我希望能够深入了解这些限制的原因,以及可能的解决方法。

因为
del
是一个关键字,就像
class
for
while
True
False
等(最后两个仅是Python 3中的关键字)

当试图将其中任何一个用作标识符时,会复制相同的行为。这里的
del
没有什么特别之处

dict(class=...)
dict(for=...)
dict(while=...)
dict(True=...)
dict(False=...)
您仍然可以将其中任何一个用作dict中的键,只是在需要有效标识符的地方不这样做

d = {'class': 'a'}
而不是

d = dict(class='a')
关键字和内置函数/global之间的区别在于,内置函数可以被覆盖,因为解释器不会对它们进行不同的处理。将它们视为其他人在执行自己的代码之前已经为您定义并分配了函数的变量。如果你选择覆盖它们,那是你的问题


关键词是另一回事。解析器/解释器将它们视为一个特殊的标记,表示特殊的含义。它们不能在运行时被覆盖。

del
是一个关键字
abs
内置函数的名称。不同的
d = dict(class='a')