代码之家  ›  专栏  ›  技术社区  ›  non sequitor

“.join(reversed(val))vs val[::-1]…哪个是pythonic?

  •  14
  • non sequitor  · 技术社区  · 16 年前

    所以根据 ... ... 稀疏比密集好 可读性计数 …但话说回来 平的比嵌套的好 …那么哪个是 蟒蛇的 ?

    val = "which is pythonic?"
    print("".join(reversed(val)))
    

    print(val[::-1])
    

    蟒蛇的 有趣的东西,因为Java世界中没有类似的东西。

    4 回复  |  直到 16 年前
        1
  •  45
  •   Alex Martelli    16 年前

    我妻子安娜给我起了个外号 x[::-1] “火星人的笑脸”--在判断对大多数人来说什么是简单和自然的时候,我主要向她(以及她在训练和控制、人类心理学和控制方面的长期经验)鞠躬,她绝对是 微笑的微笑。“只是向后走”——比“反转它,然后重新连接它”的详细规范更直接、更抽象!

    也, python -mtimeit 通常是对什么是Pythonic的一个很好的判断:多年来,顶级Pythonistas当然倾向于优化他们最经常需要和使用的东西,因此一个非常显著的性能差异告诉你什么是该语言及其顶级实践者的“契合点”。根据这个分数,火星人的微笑轻而易举地击败了详细的规格…:

    $ python -mtimeit '"".join(reversed("hello there!"))'
    100000 loops, best of 3: 4.06 usec per loop
    $ python -mtimeit '"hello there!"[::-1]'
    1000000 loops, best of 3: 0.392 usec per loop
    

    数量级的性能差异不会留下太多怀疑的余地

        2
  •  4
  •   Andrew Hare    16 年前

    更多关于什么是 蟒蛇的 我推荐 The Zen of Python

    美胜于丑。
    显式比隐式好。
    简单总比复杂好。
    复杂总比复杂好。
    平的比嵌套的好。
    稀疏比密集好。
    可读性很重要。
    特殊情况不足以违反规则。

    错误永远不应该悄无声息地过去。

    面对模棱两可的情况,拒绝猜测的诱惑。
    应该有一个——最好只有一个——显而易见的解决方法 去做吧。
    虽然这种方式一开始可能并不明显,除非你是荷兰人。

    虽然从来没有比现在更好 现在。

    如果实现很容易解释,这可能是一个好主意。
    名称空间是一个非常好的主意——让我们做更多的工作吧!

    我认为你的第二个例子符合以下原则:

    美胜于丑。
    简单总比复杂好。
    稀疏比密集好。

        3
  •  0
  •   Daniel Pryden    16 年前

    对于字符串,正如您所做的,我将使用第一个选项,因为它清楚地表明您想要的结果是一个字符串。对于列表或其他可编辑的内容,我选择第二个。

    val 实际上不是一个字符串,而是一些其他的iterable字符(例如,某种生成器)。在某些情况下,这会产生很大的不同。

        4
  •  0
  •   J S    16 年前

    首先,如果你是一个初学者,不要担心什么更像蟒蛇。这是一种语言战争的味道,你最终会找到自己的观点。我想,只要用你认为更易读/更简单的方式,你就会找到光明。

    也就是说,我同意Alex的回答(因为他总是对的),我想补充一点,为什么你应该选择第二种方法——第一种方法只有在 val