概述
基于这个answer,我知道如何确定是否有某个序列,我可以在检查对象是否是地图后进行检查.
def ismap(arg): # How to implement this? def isseq(arg): return hasattr(arg,"__iter__") def operation(arg): if ismap(arg): # Do something with a dict-like object elif isseq(arg): # Do something with a sequence-like object else: # Do something else
因为序列可以看作键是整数的映射,我应该尝试找到一个不是整数的键吗?或者我可以查看字符串表示?要么…?
UPDATE
我选择了SilentGhost的答案,因为它看起来是最“正确”的答案,但根据我的需要,这是我最终实现的解决方案:
if hasattr(arg,'keys') and hasattr(arg,'__getitem__'): # Do something with a map elif hasattr(arg,'__iter__'): # Do something with a sequence/iterable else: # Do something else
本质上,我不想依赖ABC,因为有许多自定义类的行为类似于序列和字典,但仍然没有扩展python集合ABCs(参见@Manoj评论).我认为键属性(由删除他/她的答案的人提到)对映射是一个很好的检查.
扩展序列和映射ABC的类也将与此解决方案一起使用.
>>> from collections import Mapping,Sequence >>> isinstance('ac',Sequence) True >>> isinstance('ac',Mapping) False >>> isinstance({3:42},Mapping) True >>> isinstance({3:42},Sequence) False
collections
abstract base classes (ABCs)
总结
以上是编程之家为你收集整理的python – 如何区分序列和映射全部内容,希望文章能够帮你解决python – 如何区分序列和映射所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧