假设您有一个内置于Python数据结构中的任意JSON对象读入Python。假设您要递归遍历此结构并对所有原始值执行一些操作,然后对集合进行更深层次的递归。
def recursiveMap(something, func):
if isinstance(something, Collection):
for item in something:
return recursiveMap(item, func)
else:
return func(something)
所以我的问题是:是否有一个Collection类型,可以匹配列表和字典,但不能匹配字符串?
从https://docs.python.org/3.6/library/collections.abc.html#collections-abstract-base-classes采购我的类型,我还没有找到一个:
>>> isinstance("", c.Container)
True
>>> isinstance("", c.Hashable)
True
>>> isinstance("", c.Iterable)
True
>>> isinstance("", c.Sized)
True
>>> isinstance("", c.Callable)
False
>>> isinstance({}, c.Callable)
False
>>> isinstance("", c.Sequence)
True
这不是关于Python是否认为字符串是上面列出的类型中的任何一种的问题,而是关于是否存在其他类型的满足第一个代码中示例算法需求的实际问题。清单。
每种处理方法之一就是将您要匹配的所有类型组合在一起。isinstance
将使用一个元组类型和一个单一类型:
>>> CollectionTypes = list, dict, set
>>> isinstance("", CollectionTypes)
False
>>> isinstance({}, CollectionTypes)
True
>>>
如果确实找到了与这三种类型完全匹配且不匹配的预定义类型,str
则说明您已锁定自己,稍后再决定是否还需要将tuple
其他类型或某些其他类型包括在匹配中时,您将回到平方。这就是为什么最好在此处明确说明要匹配的类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句