我知道不能替换"del"("return"etc)关键字的行为,但我不明白为什么不能这样做:
myobj.del(mystr)
解析器会把它和什么混淆?有办法允许吗?
当然,我可以使用不同的名称,但我想在AWS工具s3cmd周围有一个小的自定义包装器,做一些类似s3cmd.del("s3://some/bucket/")
的事情,并让"del"由我的s3cmd类中的__getattr__
处理。。。所以"德尔"这个名字我很乐意使用。
这是因为这些词是关键字。Python中的关键字是不能用作普通标识符的保留字。
该列表包括来自文档功能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']
Konrad的评论中优美地提到了为什么
关键词并没有什么神奇之处。然而,当不允许标识符使用关键字时,它使解析器非常容易编写。特别是,它可以更容易地为解析错误提供人类可读的错误消息,因为解析器能够推断出更多关于错误的上下文。