擅长:python、mysql、java
<p>一种可能是使用<code>isinstance(val, collections.Sequence)</code>测试该项是否为序列。非消耗性仍然不能完全保证,但我认为这是你能得到的最好的。Python序列必须有一个长度,这意味着至少它不能是一个开放的迭代器,并且通常意味着必须提前知道元素,这反过来意味着可以在不消耗元素的情况下迭代它们。仍然可以编写符合序列协议但不可编辑的病理类,但您永远无法处理这些类。在</p>
<p>注意,<code>Iterable</code>和{<cd3>}都不是合适的选择,因为这些类型不能保证长度,因此不能保证迭代是有限的,更不用说可重复了。但是,您可以同时检查<code>Sized</code>和{<cd2>}。在</p>
<p>重要的是要记录下你的函数将迭代它的参数两次,从而警告用户他们必须传入一个支持此操作的对象。在</p>