singular or plural identifier for a dictionary?
命名容器时,有什么更好的编码样式:
1 2 3 | source = {} #... source[record] = some_file |
要么
1 2 3 | sources = {} #... sources[record] = some_file |
复数在创造时更自然。 分配时的单数。
这不是一个无聊的问题。 当我不确定变量是容器还是单个值时,我确实陷入了旧代码的困惑。
UPDATE
似乎已经普遍同意,当将字典用作映射时,最好使用更详细的名称(例如
我认为有两个带有字典的非常特殊的用例应单独标识。但是,在处理它们之前,应注意,字典的变量名几乎应始终为单数,而列表应几乎始终为复数。
字典作为类对象的实体:有时您有一个字典来表示某种对象类数据结构。在这些情况下,字典几乎总是引用单个类似对象的数据结构,因此应为单数。例如:
1 2 3 4 5 | # assume that users is a list of users parsed from some JSON source # assume that each user is a dictionary, containing information about that user for user in users: print user['name'] |
字典作为映射实体:有时,字典的行为可能更像是典型的哈希映射。在这种情况下,最好使用更直接的名称,尽管仍为单数。例如:
1 2 3 4 | # assume that idToUser is a dictionary mapping IDs to user objects user = idToUser['0001a'] print user.name |
列表:最后,您有了列表,这是一个完全独立的想法。这些几乎应该总是复数,因为它们是其他实体的简单集合。例如:
1 2 3 | users = [userA, userB, userC] # makes sense for user in users: print user.name # especially later, in iteration |
我敢肯定,在某些晦涩或不太可能发生的情况下,可能需要在此处进行一些例外处理,但是我认为这是在命名字典和列表时遵循的非常有力的指导原则,不仅是Python,而且是所有语言。
应该是复数形式,因为这样程序的行为就像您大声朗读一样。让我告诉你为什么它不应该是奇异的(完全是人为的例子):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | c = Customer(name ="Tony") c.persist() [...] # # 500 LOC later, you retrieve the customer list as a mapping from # customer ID to Customer instance. # # Singular customer = fetchCustomerList() nameOfFirstCustomer = customer[0].name for c in customer: # obviously it's totally confusing once you iterate ... # Plural customers = fetchCustomerList() nameOfFirstCustomer = customers[0].name for customer in customers: # yeah, that makes sense!! ... |
此外,有时最好使用更明确的名称,从中可以推断映射(对于字典)和类型。当我引入字典变量时,通常会添加一个简单的注释。一个例子:
1 2 3 4 5 6 | # Customer ID => Customer idToCustomer = {} [...] idToCustomer[1] = Customer(name ="Tony") |
我更喜欢容器的复数形式。使用中只有一种可以理解的逻辑:
1 2 3 | entries = [] for entry in entries: #Code... |