2012-02-08 33 views
15

Al escribir el nombre de un contenedor, lo que es un estilo de codificación mejor:identificador singular o plural para un diccionario?

source = {} 
#... 
source[record] = some_file 

o

sources = {} 
#... 
sources[record] = some_file 

El plural lee más natural en la creación; el singular en la asignación.

Y no es una pregunta inactiva; Me sorprendí confundiéndome en un código antiguo cuando no estaba seguro de si una variable era un contenedor o un valor único.

ACTUALIZACIÓN

Parece que hay un acuerdo general de que cuando el diccionario se utiliza como una asignación, es mejor utilizar un nombre más detallada (por ejemplo, recordToSourceFilename); y si quiero usar un nombre corto, hazlo plural (por ejemplo, sources).

+3

Principalmente uso formularios en plural para contenedores, pero decido caso por caso. Si te confundieron con una forma singular, tal vez eso sea una pista. –

+1

@SvenMarnach: publique su respuesta como respuesta. –

Respuesta

11

Creo que hay dos casos de uso muy específico con los diccionarios que deben ser identificados por separado. Sin embargo, antes de abordarlos, debe tenerse en cuenta que los nombres de las variables para los diccionarios casi siempre deben ser únicos, mientras que las listas casi siempre deben ser plurales.

  1. Diccionarios como entidades a objetos como: Hay veces cuando se tiene un diccionario que representa algún tipo de estructura de datos a objetos similares. En estas instancias, el diccionario casi siempre se refiere a una única estructura de datos similar a un objeto y, por lo tanto, debe ser singular. Por ejemplo:

    # 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'] 
    
  2. Diccionarios como entidades de asignación: Otras veces, su diccionario podría estar comportándose más como un hash de ruta típica. En tal caso, es mejor usar un nombre más directo, aunque sea singular. Por ejemplo:

    # assume that idToUser is a dictionary mapping IDs to user objects 
    
    user = idToUser['0001a'] 
    print user.name 
    
  3. Listas: Por último, usted tiene listas, que son una idea totalmente independiente. Estos casi siempre deben ser plurales, porque son simples una colección de otras entidades.Por ejemplo:

    users = [userA, userB, userC] # makes sense 
    for user in users: 
        print user.name   # especially later, in iteration 
    

Estoy seguro de que hay algunas situaciones oscuras o de otra manera improbables que podrían requerir algunas excepciones que se hacen aquí, pero siento que esta es una pauta bastante fuerte como para seguir a la hora nombrando diccionarios y listas, no solo en Python, sino en todos los idiomas.

+0

El ejemplo en mi pregunta se encuentra en (2). El nombre completo es 'recordToSourceFile'. Puedo ver cómo está muy claro. ¿Alguna vez usarías una 'fuente' o 'fuentes' de taquigrafía en tal caso? – max

+0

Pude verme a mí mismo usando 'sources' en tal caso, pero solo si la instancia estaba particularmente bien documentada o era insoportablemente obvia. Taquigrafía es genial, pero ser vago no lo es. :) –

6

Debe ser plural porque luego el programa se comporta como lo leyó en voz alta. Te voy a enseñar por qué no debería ser singular (ejemplo totalmente artificial):

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!! 
    ... 

Por otra parte, a veces es una buena idea tener nombres aún más explícito desde el que se puede inferir el trazado (por diccionarios) y probablemente el tipo. Normalmente agrego un comentario simple cuando introduzco una variable de diccionario. Un ejemplo:

# Customer ID => Customer 
idToCustomer = {} 

[...] 

idToCustomer[1] = Customer(name = "Tony") 
+0

Si elige no usar un nombre más explícito 'idToCustomer' para el diccionario, ¿usaría el plural' customers'? – max

+0

@max: Definitivamente, tiene mucho más sentido, como traté de explicar con mis primeros ejemplos. – AndiDog

5

Prefiero los plurales para contenedores. Sólo hay una cierta lógica comprensible en el uso de:

entries = [] 
for entry in entries: 
    #Code... 
Cuestiones relacionadas