python:打印列表,&;特殊套管
我有一个列表,其中包含python:打印列表,&;特殊套管,python,polymorphism,Python,Polymorphism,我有一个列表,其中包含dicts或其他项目 我想写一个方法来打印列表,每一项都在一行上,但特殊情况下会打印目录;比如: def printSpecialList(mylist): for item in mylist: if itemIsDict(item): printDictItem(item) else: print str(item) 我可以实现所有功能,但itemIsDict——最简单的方法是什么 只是澄清一下: 此列表的源使用字典文本生
dict
s或其他项目
我想写一个方法来打印列表,每一项都在一行上,但特殊情况下会打印目录;比如:
def printSpecialList(mylist):
for item in mylist:
if itemIsDict(item):
printDictItem(item)
else:
print str(item)
我可以实现所有功能,但itemIsDict
——最简单的方法是什么
只是澄清一下: 此列表的源使用字典文本生成项,例如
{'a':3,'b':4}
,这使得使用知道如何格式化自己的特殊字典类型很麻烦。此外,我的printSpecialList
方法有点复杂,并且它有自己的私有状态,因此实例测试,尽管“令人讨厌”(例如,有人无法创建一个模拟的dict类,该类不是dict的后代,可以与我的方法一起工作),似乎是最好的方法。使用type()
通过使用type()
isinstance(item,dict)
可以满足您的要求,但必须指出的是,变量类型上的分支是非Pythonic的。isinstance(item,dict)
可以满足您的要求,但必须指出的是,在变量类型上进行分支是相当非Pythonic的。您可以对dict
进行子类化,并实现\uuu repr\uu
或\uu str\uu
方法:
class MyDict(dict):
__str__(self):
# you write your custom string format
return 'my custom formatted string'
这样,您的代码将以相同的方式处理每个项目:
for item in mylist:
print item
注意:如果您想采用这种方法,可以在中找到更多信息,您可以对
dict
进行子类化,并实现\u repr\u
或\u str\u
方法:
class MyDict(dict):
__str__(self):
# you write your custom string format
return 'my custom formatted string'
这样,您的代码将以相同的方式处理每个项目:
for item in mylist:
print item
注意:如果您想采用这种方法,可以在中找到更多信息,除了它不能识别
dict
的子类型之外,就(几乎)所有意图和目的而言,即使这样的对象也是完全有效的字典。啊,这就是类型和isinstance之间的区别?谢谢,我不知道。除了它不能识别dict的子类型之外,就(几乎)所有的意图和目的而言,甚至这样的对象都是完全有效的字典。啊,这就是type和isinstance之间的区别?谢谢,我不知道。我知道这一点,但我没有看到任何真正的选择:一个dict
对象不知道如何按我想要的方式格式化自己,而我知道。我知道,但我没有看到任何真正的选择:一个dict
对象不知道如何按我想要的方式格式化自己,而我知道。我明白,但是我有现成的代码来制作这个列表,我不希望它必须使用MyDict而不是像{'a':3,'b':4}
这样的文字,我理解这一点,但是我有现成的代码来制作这个列表,我不希望它必须使用MyDict而不是像{'a':3,'b':4}