【问题标题】:Better Python list Naming Other than "list"比“list”更好的 Python 列表命名
【发布时间】:2011-10-16 14:57:56
【问题描述】:

最好不要将列表变量命名为“列表”?因为它与 python 保留关键字冲突。那么,取什么名字比较好呢? “input_list”听起来有点尴尬。

我知道它可能是针对特定问题的,但是,假设我有一个快速排序函数,那么 quick_sort(unsorted_list) 仍然有点长,因为传递给排序函数的列表显然没有按上下文排序。

有什么想法吗?

【问题讨论】:

  • Nitpick: list 不是“保留关键字”(我假设您的意思是“保留标识符”或“关键字”),它只是一个常规标识符......它恰好被使用通过内置类型。
  • Python 确实有时会变得很冗长。设计者通常会选择可读性而不是简洁性,尽管请看一下反例的列表理解。所以不要太担心你要输入多少,因为它很难打,而且有利于可读性。

标签: python naming-conventions


【解决方案1】:

我喜欢用里面的任何东西的复数来命名它。因此,例如,如果我有一个姓名列表,我将其命名为names,然后我可以写:

for name in names:

我认为这看起来很不错。但通常为了您自己的理智,您应该命名您的变量,以便您可以从名称中知道它们是什么。这种约定具有与类型无关的额外好处,就像 Python 本身一样,因为names 可以是任何可迭代对象,例如元组、字典或您自己的自定义(可迭代)对象。您可以在其中任何一个上使用for name in names,如果您有一个名为names_list 的元组,那就太奇怪了。

(从下面的评论中添加:)在某些情况下您不必这样做。使用像i 这样的规范变量来索引一个短循环是可以的,因为i 通常是这样使用的。如果您的变量用于超过一页的代码,以至于您无法一次看到它的整个生命周期,您应该给它一个合理的名称。

【讨论】:

  • +1 如果没有什么特别的(例如一个通用的 slice 函数),有很多通用名称 - xs/ys/zs 用于数学倾向(在某些函数式编程语言中非常流行),@987654330 @、items
  • 我觉得它也是 Pythonic,虽然我不能指出确切的指导方针。
  • 出于好奇,如果你有一个绵羊列表(或任何其他在单数 -> 复数时不会改变的东西),你会怎么做?
  • @Kevin 哈哈哈好点。还有其他可以使用的约定,例如 sheep_listsheep_arr。如果是其他人看不到的代码,我可能会使用sheeps 来笑一笑。
  • flock_of_sheep,但只是goats,因为flock_of_goats 不是pythonic。
【解决方案2】:
goats

变量名称应该指代它们的含义,而不仅仅是它们的类型。

【讨论】:

    【解决方案3】:

    Python 代表可读性。所以基本上你应该命名提高可读性的变量。请参阅PEP20
    您应该只具有一般的一致性规则,并且应该在以下情况下打破这种一致性:

    1. 应用该规则会降低代码的可读性,即使对于 习惯于阅读遵守规则的代码的人。

    2. 为了与也破坏它的周围代码保持一致(也许是 历史原因)——虽然这也是一个清理的机会 别人的烂摊子(真正的 XP 风格)

    此外,请使用函数命名规则:小写字母,并根据需要使用下划线分隔单词以提高可读性。
    所有这些都取自PEP 8

    【讨论】:

      【解决方案4】:

      只需使用lstseq(用于序列)

      【讨论】:

      • 这很神秘,也不是很具描述性。 (虽然不是我的反对票。)
      【解决方案5】:

      我使用基于描述性名称和类型的命名约定。 (我想我是从 Jeff Atwood 的一篇博文中了解到这一点的,但我找不到。)

      goats_list
      for goat in goats_list : 
          goat.bleat()
      
      cow_hash = {}
      

      等等

      任何更复杂的(list_list_hash_list)我都做了一个类。

      【讨论】:

      • cow_hash +1。听起来很好吃。尽管我更喜欢 _dict 来表示该变量,因为它们仅在所有其他编程语言中被称为散列。所以,这不是一个完全合理的理由,但你去吧。至少对于不了解字典如何深入工作的新程序员来说,这更容易。
      【解决方案6】:

      L 呢?

      【讨论】:

      • 从现在开始,我将把你称为“用户”的 U。
      • @delnan 您能否详细说明为什么使用这些名称是一种不好的做法?我认为这个答案很适合与 cmets 在一起,为什么使用这样的名称不是一个好主意。
      • 我的评论旨在说明为什么这是一个坏主意。 L 用于列表 - 就像 U 用于用户 - 不传达真实信息,太短且神秘,并且不能用于区分多个此类对象(当您必须在一个范围内存储两个列表时,你怎么称呼他们?L1L2?)。
      • 我认为这里发生了两件事: 1. 很难记住较短的变量名。想象一下处理一个长脚本,其中事物被命名为Lls1s2 等。theListtheOtherList 等至少更容易跟踪。 2. 如果变量具有描述性名称,则更容易记住变量的作用。 linescrown_listlistOfCountries 都明确了列表中的内容。你大概能猜到我在想什么,而且都是编出来的!
      • 但是,使用像 i 这样的规范变量来索引短循环是可以的。如果变量用于超过一页的代码,您无法一次看到它的整个生命周期,您应该给它一个合理的名称。 (添加到我的答案中。)
      【解决方案7】:

      为什么不直接使用unsorted?我更喜欢有名字,它传达想法,而不是数据类型。在某些特殊情况下,变量的类型很重要。但在大多数情况下,从上下文中可以明显看出 - 就像你的情况一样。快速排序显然是在处理一个列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2011-12-06
        • 1970-01-01
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多