5

Itating nested list inside-out 中,有人告诉我“类型检查不是 Pythonic”。一般来说,这是真的:我们只想查看界面(duck-typing)而不是特定类型。

该问题询问表单的嵌套列表['a', ['c', ['e'], 'd'], 'b'],我们特别考虑字符串原子(不可迭代)。所以,我们不能使用毯子collections.Iterable,但另一方面isinstance(x, list)看起来确实有点老套。

我的回答是

def traverse(l):
    for x in l:
        if isinstance(x, list):
            traverse(x)
    callback(l)

有什么更好的方法?或者isinstance这里可以吗?

4

1 回答 1

7

我认为您的答案在这里还可以-尽管我可能会将其更改为

if not isinstance(x,basestring):
   ...

根据预期的输入使其更容易接受。最终,您需要一些问题,isinstance这就是它仍然存在于语言中的原因。

话虽如此,关于这个问题的非pythonic是数据结构。在python中,如果一个问题看起来真的很难,这可能意味着你以错误的方式存储数据......(当然,我意识到你无法控制另一个问题的数据结构的原始海报是什么; -)。

基本上,我想我的观点是,isinstance当你的同事/某个图书馆作家给你柠檬时,你需要制作柠檬水——否则你会尽可能避免

于 2013-02-19T16:00:03.513 回答