这里有几个问题,一旦你开始挖掘:
有问题的项目称为“element_index”,定义为整数。
问题 1:除非用户从“整数”链接到语言参考手册,否则他们不会知道 -1 被视为表达式,而不是整数。顺便说一句,任何想要说“按文档工作”的人都应该首先看到问题 7 :-)
首选解决方案:更改定义,使“element_index”可以在整数前有一个可选的“-”。
这是一个整数,对吧?没那么快……后来文档说“'[index]' 形式的表达式使用__getitem__() 进行索引查找”
问题 3:应该说 '[element_index]'(索引未定义)。
问题 4:不是每个人都知道__getitem__() 做了什么。需要更清晰的文档。
所以我们可以在这里使用字典和整数,可以吗?是的,有一两个问题:
element_index 是一个整数?是的,这适用于 dict:
>>> "{0[2]}".format({2: 'int2'})
'int2'
似乎我们也可以使用非整数字符串,但这需要更明确的文档(问题 5):
>>> "{0[foo]}".format({'foo': 'bar'})
'bar'
但是我们不能使用带有 '2' 这样的键的字典(问题 6):
>>> "{0[2]}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 2
>>> "{0['2']}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: "'2'"
问题 7:“整数”确实应该被记录为“十进制整数”...... 0x22 和 0b11 被视为 str,010(“八进制整数”)被视为 10,而不是 8:
>>> "{0[010]}".format('0123456789abcdef')
'a'
更新:PEP 3101 讲述了真实的故事:
"""
解析项目键的规则非常简单。如果以数字开头,则视为数字,否则视为字符串。
由于键不是用引号分隔的,因此无法从格式字符串中指定任意字典键(例如字符串“10”或“:-]”)。
"""