6.3.2. 抽取

抽取就是在序列(字符串、元组或列表)或映射(字典)对象中选择一项:

  1. subscription ::= primary "[" expression_list "]"

此原型必须求值为一个支持抽取操作的对象(例如列表或字典)。 用户定义的对象可通过定义 __getitem__() 方法来支持抽取操作。

对于内置对象,有两种类型的对象支持抽取操作:

如果原型为映射,表达式列表必须求值为一个以该映射的键为值的对象,抽取操作会在映射中选出该键所对应的值。(表达式列表为一个元组,除非其中只有一项。)

如果原型为序列,表达式列表必须求值为一个整数或一个切片(详情见下节)。

正式句法规则并没有在序列中设置负标号的特殊保留条款;但是,内置序列所提供的 __getitem__() 方法都可通过在索引中添加序列长度来解析负标号 (这样 x[-1] 会选出 x 中的最后一项)。 结果值必须为一个小于序列中项数的非负整数,抽取操作会选出标号为该值的项(从零开始数)。 由于对负标号和切片的支持存在于对象的 __getitem__() 方法,重载此方法的子类需要显式地添加这种支持。

字符串的项是字符。 字符不是单独的数据类型而是仅有一个字符的字符串。