如何解决Python用列表扩展切片:文档正确吗?
| http://docs.python.org/reference/expressions.html#slicings上的文档说(带有一些摘录): 5.3.3。切片 切片选择序列对象中的一系列项目(例如,字符串,元组或列表)。slicing ::= simple_slicing | extended_slicing
simple_slicing ::= primary \"[\" short_slice \"]\"
extended_slicing ::= primary \"[\" slice_list \"]\"
slice_list ::= slice_item (\",\" slice_item)* [\",\"]
slice_item ::= expression | proper_slice | ellipsis
proper_slice ::= short_slice | long_slice
short_slice ::= [lower_bound] \":\" [upper_bound]
long_slice ::= short_slice \":\" [stride]
lower_bound ::= expression
upper_bound ::= expression
stride ::= expression
ellipsis ::= \"...\"
简单切片的语义如下。主要对象必须评估为序列对象...
扩展切片的语义如下。主要对象必须评估为映射对象,...
问题:
为了支持[1,2,3][a:b:c]
表示法,语言参考要求列表是映射对象((2ѭ仅带有\“ extended slicing \”,用于映射对象)。因此,该语言参考是否已损坏(可能是在引入Python2.3的新功能:扩展切片之后,他们只是忘了对其进行更新吗?)?
同样,切片显然不仅限于序列对象(请参见上面的第一个短语)。
还是只是我? ;)
附言
有趣的是,位于http://docs.python.org/release/3.1.3/reference/expressions.html#slicings的Python 3文档说:
切片选择序列对象中的一系列项目(例如,字符串,元组或
清单)...
[\“统一\”切片定义,此处不区分\“扩展\”和\“简单\”]
切片的语义如下。主要对象必须评估为映射对象,...
解决方法
有关映射的语言已损坏;在所有情况下都应说“顺序或映射”以匹配解释器的行为。两种协议都可以接受切片对象,并且解释器将在所有情况下进行转换。但是,对于内置类型,只有序列实际支持它:
>>> a = {\'a\': 1,\'c\': 2}
>>> a[\'a\':\'b\']
Traceback (most recent call last):
File \"<pyshell#32>\",line 1,in <module>
a[\'a\':\'b\']
TypeError: unhashable type: \'slice\'
请注意,这是词典中抱怨切片不是有效键,而不是解释器抱怨您无法在映射上进行切片。这是有道理的-字典没有隐含的键顺序,因此尚不清楚分片的含义。
, 不幸的是,新增功能和langref使用了“扩展切片”的两个不同定义。这两个文档对于各自的定义都是正确的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。