我明白一个人不应该能够取代" del" (" return" etc)关键字,但我不明白为什么不可能这样做:
myobj.del(mystr)
解析器可以将它与什么混淆?有没有办法允许它?
当然,我可以使用不同的名称,但我希望在AWS工具s3cmd周围有一个小的自定义包装器并执行s3cmd.del("s3://some/bucket/")
之类的操作并使用" del"由我的s3cmd类中的__getattr__
处理...所以名称" del"是我真的很乐意使用的东西。
答案 0 :(得分:8)
这是因为这些词是关键词。 Python中的关键字是不能用作普通标识符的保留字。
该列表包含from the doc function keyword
>>> import keyword
>>> import pprint
>>> pprint.pprint(keyword.kwlist)
['and',
'as',
'assert',
'break',
'class',
'continue',
'def',
'del',
'elif',
'else',
'except',
'exec',
'finally',
'for',
'from',
'global',
'if',
'import',
'in',
'is',
'lambda',
'not',
'or',
'pass',
'print',
'raise',
'return',
'try',
'while',
'with',
'yield']
中提到的原因很明显
关键词并不神奇。但是,当禁用标识符的关键字时,它使解析器极大更容易编写。特别是,它可以更容易地为解析错误提供人类可读的错误消息,因为解析器能够推断出更多关于错误的上下文。