Aas*_*jan 0 python types iterable object python-3.x
可下标对象和可迭代对象有什么区别?什么是可下标但不可迭代的对象,反之亦然?
Ps 可下标的是其中包含其他对象的对象,迭代器是可下标的,可以迭代。但我能想到的也仅此而已。
可下标对象和可迭代对象有什么区别?
可下标的对象实现语法__getitem__
的评估obj[key]
。
可迭代对象实现__iter__
并因此支持迭代。
哪些对象是可下标但不可迭代的
一个示例是re.match()
返回不可迭代的可下标。
import re
m = re.match(r"\w+ (\w+)", "Isaac Newton, physicist")
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
print(m[1]) # "Newton"
Run Code Online (Sandbox Code Playgroud)
但这会产生一个异常:
for word in m: # TypeError: 're.Match' object is not iterable
print(word)
Run Code Online (Sandbox Code Playgroud)
反之亦然?
一个例子是 a set
,它支持迭代但不支持订阅。所以你可以这样做:
for x in set([42]):
print(x) # 42
Run Code Online (Sandbox Code Playgroud)
...但这会产生错误:
set([42])[0] # TypeError: 'set' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)