Interpretación de la palabra clave de Python

Estoy revisando el tutorial de Python 2.7 y observé el resultado de la siguiente statement:

def cheeseshop(kind, *arguments, **keywords): print "-- Do you have any", kind, "?" print "-- I'm sorry, we're all out of", kind for arg in arguments: print arg print "-" * 40 keys = sorted(keywords.keys()) for kw in keys: print kw, ":", keywords[kw] 

Entonces, si llamo al progtwig como tal:

 cheeseshop("Cheddar", "No.", "Seriously?", Shopkeeper="Michael Palin", Client="John Cleese") 

Produce:

 Do you have any Cheddar? I'm sorry, we're all out of Cheddar No. Seriously? -------------------------------------- Client: John Cleese Shopkeeper: Michael Palin 

Esto es correcto.

Si cambio esa statement de print keywords para print keywords , obtengo la siguiente representación:

     {'Shopkeeper': 'Ryan Lambert', 'Client': 'John Cleese'} 

    Estoy un poco confundido sobre cómo imprimir keywords[kw] simplemente vuelve con un nombre, y las keywords no.

    En Python, puede pasar parámetros opcionales de palabras clave colocando un ** delante de la lista de parámetros de la función.

    Así que la variable de keywords es en realidad un tipo de diccionario. Por lo tanto, si lo haces:

     print keywords 

    vuelves (reformateo para que el mapeo sea más obvio)

     { 'Shopkeeper': 'Ryan Lambert', 'Client': 'John Cleese' } 

    que es un diccionario. Y si lo haces:

     print keywords[kw] 

    recuperas el valor del diccionario asociado con la clave kw . Entonces, si kw era 'Shopkeeper' , entonces las keywords[kw] convierten en 'Ryan Lambert' , y si kw era 'Client' , entonces las keywords[kw] convierten en 'John Cleese'

    palabras clave se almacena como un diccionario . (Ver esto para más)

    Si imprime el diccionario, emitirá el conjunto completo de pares que contiene (clave, valor).

    En su progtwig:

    • Las claves son: ‘Comerciante’ y ‘Cliente’.
    • los valores son respectivamente: ‘Ryan Lambert’ y ‘John Cleese’

    Una forma de acceder a los valores es “buscarlo” con su clave: dict [clave]

    Así que cuando escribiste: “keywords [kw]” en realidad estás pasando una clave y python te dará el valor correspondiente.

    Puedes pensar que es similar a acceder a un valor de matriz:

     a = ['a', 'b', 'c'] 

    si tu:

     print a #output: ['a', 'b', 'c'] print a[0] # outputs: 'a' 

    a diferencia de las matrices, los datos no se almacenan “prolijamente” juntos en la memoria, sino que se utiliza el hash

    Espero que haya ayudado, Saludos.

    Cuando llamas a la función con

     cheeseshop("Cheddar", "No.", "Seriously?", Shopkeeper="Michael Palin", Client="John Cleese") 

    el parámetro de las keywords toma el valor {'Shopkeeper': 'Ryan Lambert', 'Client': 'John Cleese'} , es decir, es un diccionario.

    Esto es equivalente a (y mucho más fácil de leer que) llamar a la función como

     cheeseshop("Cheddar", *["No.", "Seriously?"], **{"Shopkeeper":"Michael Palin", "Client":"John Cleese"}) 

    Es decir, los valores de la primera llamada a la función se envuelven automáticamente dentro de los *arguments y **keywords parámetros de **keywords : para eso están los * y ** .

    Ahora, cuando haces esto:

     keys = sorted(keywords.keys()) for kw in keys: print kw, ":", keywords[kw] 

    keyword.keys() es ['Shopkeeper', 'Client'] , es decir, las “teclas” en el diccionario. A continuación, ordena esas claves y para cada clave, imprime la entrada correspondiente en el diccionario, por ejemplo, “John Cleese” para “Cliente”.