2015-10-26 11 views
5

Nota: Questo non è un duplicato del linked answer, che si concentra sulle questioni relative alle prestazioni, e ciò che accade dietro le tende quando una chiamata di funzione dict() è fatto. La mia domanda riguarda gli argomenti delle parole chiave che risultano sempre nelle chiavi di tipo string. Sicuramente non un duplicato.Detterai (** kwargs) sempre un dizionario dove le chiavi sono di tipo stringa?


Metodo-1:

suit_values = {'spades':3, 'hearts':2, 'diamonds':1, 'clubs':0} 

Metodo-2:

suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) 

Metodo-1 ha senso per me. È come dire a Python di darmi un dizionario in cui le chiavi sono stringhe e i valori sono numeri. Ma in Method-2, come fa python a sapere che le chiavi sono stringhe e non qualcos'altro?

È una tendenza? se è così, alcuni altri esempi (oltre ai dizionari) che mostrano questo tipo di comportamento?

EDIT-1:

mia comprensione dalle risposte è:

  1. Metodo-2 è il modo dict(**kwargs) di creare un dizionario.
  2. In spades=3, spades è un identificatore Python valido, per cui si è presa come una chiave di tipo string.

Quindi, dict(**kwargs) sarà sempre risultato in un dizionario, dove le chiavi sono di tipo string?

EDIT-2: ^^ SÌ.

risposta

4

Nel secondo caso, la funzione dict accetta argomenti di parole chiave. E gli argomenti delle parole chiave possono essere passati solo come parametri di stringa.

Citando il documentation,

Fornire argomenti a parola chiave, come nel primo esempio funziona solo per le chiavi che sono identificatori Python validi. In caso contrario, è possibile utilizzare qualsiasi chiave valida.

Fintanto che la stringa è un identificatore Python valido, è possibile utilizzarlo come chiave nel secondo modulo.Ad esempio, il seguente non funzionerà con la seconda forma

>>> dict(1=2) 
    File "<input>", line 1 
SyntaxError: keyword can't be an expression 

Ma lo stesso funzionerà con la prima forma

>>> {1:2} 
{1: 2} 
+0

in realtà non ho ottenuto la parte "E gli argomenti della parola chiave possono essere passati solo con le stringhe come parametri". – Somjit

+0

@Somjit Hmmm, ho modificato un po '. Spero sia chiaro ora. – thefourtheye

+0

Ok. Ciò ha senso. Quindi gli argomenti delle parole chiave possono essere passati solo come stringhe. Ma dopo che sono passati, sono anche 'assorbiti' come stringhe, cioè memorizzati come oggetti di tipo stringa? La mia modifica pone questa domanda alla fine. – Somjit

2

Metodo 1, un letterale espressione dizionario, può utilizzare come chiavi qualsiasi valore hashable , come stringhe, numeri interi o tuple s.

Metodo 2 - la funzione integrata dict() - non "sa" che i tasti sono stringhe. Qualsiasi chiave tu usi con quel metodo deve seguire le tradizionali convenzioni di denominazione delle variabili, per essere convertita in stringhe. Ciò significa che ogni chiave deve iniziare con una lettera o un carattere di sottolineatura, contenere solo lettere, caratteri di sottolineatura o numeri e così via. Provare una chiave diversa, ad esempio 2a o (1,2), non riuscirà.

+0

puoi riaprire il post. Non è la stessa della domanda che hai contrassegnato come duplicata di. – Somjit

Problemi correlati