ami*_*ito 5 python arrays iterable list
我正在寻找一种方式来测试对象是否是一个"名单十岁上下"式的不行,那就是-不仅该对象不是可迭代(例如-你也可以运行ITER上的绳子,或简单实现iter的对象)但该对象不在列表系列中.我将" list "系列定义为list/tuple/set/frozenset,或者从那些继承的东西,但是 - 因为可能有一些我缺少的东西,我想找到一种更通用的方式而不是isinstance针对所有的那些类型.
我想到了两种可行的方法,但是它们看起来有点尴尬,因为它们针对每种可能的列表类型进行了很多测试,而我正在寻找更通用的解决方案.
第一种选择:
return not isinstance( value, (frozenset, list, set, tuple,) )
Run Code Online (Sandbox Code Playgroud)
第二种选择:
return not hasattr(value, '__iter__')
Run Code Online (Sandbox Code Playgroud)
是否__iter__足够测试该属性?有没有更好的方法来查找对象是否不是列表类型?
提前致谢.
编辑:
(引自对@Rosh Oxymoron的解决方案的评论):
现在更好地考虑定义,我认为我更需要在定义中找到不是数组类型的所有内容,但它仍然可以是字符串/其他简单的对象... 对于实现该方法的对象,
检查collections.Iterable仍然会给我True__iter__.
没有术语'list-ish'并且没有魔法内置check_if_value_is_an_instance_of_some_i_dont_know_what_set_of_types.
你的解决方案not isinstance( value, (frozenset, list, set, tuple,) )非常好 - 它清晰明了.