代码之家  ›  专栏  ›  技术社区  ›  gath

巨蟒有一种做事方式吗?

  •  0
  • gath  · 技术社区  · 14 年前

    在python的文章/书籍中,我总是看到python很简单,而且它只有一种方式可以做事情。我想找个人 向我解释这个概念 记住下面的例子,如果我想得到序列的最小值和最大值,我会做以下的事情:

    seq=[1,2,3,4,5,6]
    
    min(seq) #1
    
    max(seq) #6
    

    但我也可以这样做;

    seq[:1]  #1
    
    seq[-1]  #6
    

    当然,这是做一件简单事情的两种方式。这让我有点困惑。

    6 回复  |  直到 12 年前
        1
  •  26
  •   Łukasz    14 年前

    不是说它“有一种做事情的方式”,而是“应该有一种——最好只有一种——显而易见的方式来做它。”(来自于Python的禅)。

    这并不排除有不止一种做事方式的可能性。我们谈论的是编程,其中创造力是最重要的技能之一,必须找到解决问题的新方法。

    在您的示例中,您要做两件不同的事情:

    1. 获取列表的最小值和最大值
    2. 获取列表的第一个和最后一个元素

    在这种特殊情况下,结果是完全相同的。

        2
  •  15
  •   balpha    14 年前

    这是两件不同的事情。 max() 给你 最大的 列表元素(默认情况下使用常规数字比较),而 [-1] 给你 最后的 元素——在您的示例中,这恰好是相同的事情。但是考虑一下:

    >>> seq = [2, 7, 5, 4]
    >>> max(seq)
    7
    >>> seq[-1]
    4
    

    顺便说一句, seq[:1] 又给了你不同的东西——即 [1] (或 [2] 在我的示例中),一个元素列表。你的意思可能是 seq[0] ,这就是 第一 列表元素,与 min(seq) , the 最小的 一个。

        3
  •  7
  •   Ignacio Vazquez-Abrams    14 年前

    明显的 方式。

    >>> import this
    
        4
  •  3
  •   Thomas Wouters    14 年前

    在您的例子中,实际上您做了两件不同的事情——它们恰好给出了相同的结果。 结果 ,因为输入列表已排序。然而,做事情的方式总是多种多样的。python的方法并不是真正避免或禁止使用多种方法来做同一件事,而是使用一种——最好只有一种——显而易见的方法来做事情。

        5
  •  1
  •   ghostdog74    14 年前

    max()、min()和索引切片都有不同的功能。在您的列表中,顺序可能不会像您的示例那样排序,因此在这些情况下,使用切片不会为您获得最大/最小值。如果您想获得最大/最小值,只需使用 max()/min() 功能

        6
  •  0
  •   mikerobi    14 年前

    解决问题的方法总是不止一种,但是Python开发人员尝试不添加提供冗余功能的语言功能,这与Perl非常不同。