Come Verificare Se Una Chiave **kwargs Esiste?

Python 3.2.3. Ci sono alcune idee elencati qui, che di lavoro regolari, var, ma sembra **kwargs giocare con regole diverse… quindi perché non questo lavoro e come posso verificare se una chiave **kwargs esiste?

if kwargs['errormessage']:
    print("It exists")

Penso anche che questo dovrebbe funzionare, ma non —

if errormessage in kwargs:
    print("yeah it's here")

Sto cercando di indovinare perché kwargs è iterable? Devo scorrere solo per verificare se una chiave è lì?

  • Non c’è alcuna regola. Hai solo dimenticato le virgolette.
InformationsquelleAutor Zamphatta | 2012-09-13

 

6 Replies
  1. 132

    Si desidera

    if 'errormessage' in kwargs:
        print("found it")

    Per ottenere il valore di errormessage

    if 'errormessage' in kwargs:
        print("errormessage equals " + kwargs.get("errormessage"))

    In questo modo, kwargs è solo un altro dict. Il primo esempio, if kwargs['errormessage'], significa “ottenere il valore associato alla chiave “errormessage” in kwargs, e quindi controllare il suo valore bool”. Quindi, se non c’è il tasto, si otterrà un KeyError.

    Tuo secondo esempio, if errormessage in kwargs:, significa “se kwargs contiene l’elemento chiamato da “errormessage“, e se “errormessage” è il nome di una variabile, si otterrà un NameError.

    Devo dire che i dizionari hanno anche un metodo .get() che accetta un parametro predefinito (di per sé inadempiente per None), in modo che kwargs.get("errormessage") restituisce il valore se la chiave esiste e None altrimenti (analogamente kwargs.get("errormessage", 17) fa quello che si potrebbe pensare che lo fa). Quando non si cura circa la differenza tra la chiave esistente e avere None come valore o la chiave non esiste, questo può essere utile.

    • Grazie per l’ulteriore spiegazione!!! Sempre buona per python nuovi arrivati per ottenere alcune informazioni di base e ulteriori esempi di cosa è possibile e cosa non lo è. In questo spirito: penso, kwargs.get("errormessage", 17) potrebbe ritornare il suo valore o 17 se errormessage non esiste – ma non ne sono sicuro. È corretto?
    • Ah sì, lo fa. Trovato qui. Grazie… volevo solo essere sicuro.
  2. 19

    Del DSM e Tadeck le risposte di rispondere alla tua domanda direttamente.

    Nel mio script mi capita spesso di utilizzare la comoda dict.pop() per affrontare opzionale, e altri argomenti. Ecco un esempio di un semplice print() wrapper:

    def my_print(*args, **kwargs):
        prefix = kwargs.pop('prefix', '')
        print(prefix, *args, **kwargs)

    Quindi:

    >>> my_print('eggs')
     eggs
    >>> my_print('eggs', prefix='spam')
    spam eggs

    Come si può vedere, se prefix non è contenuta in kwargs, l’impostazione predefinita '' (stringa vuota) viene conservato in un locale prefix variabile. Se ne è data, allora il suo valore è di essere utilizzato.

    Questo è generalmente un compatto e leggibile ricetta per la scrittura di wrapper per qualsiasi tipo di funzione: Sempre e solo pass-through argomenti che non si capiscono, e non so nemmeno se esistono. Se avete sempre passare attraverso *args e **kwargs è rendere il codice più lento e richiede un po ‘ più di digitazione, ma se le interfacce della funzione chiamata (in questo caso print) modifiche, non c’è bisogno di cambiare il codice. Questo approccio riduce il tempo di sviluppo, supportando tutti cambiamenti di interfaccia.

    • Grazie per mostrare come assegnare un valore di default per prefix.
  3. 10

    È proprio questa:

    if 'errormessage' in kwargs:
        print("yeah it's here")

    È necessario controllare, se la chiave è nel dizionario. La sintassi che è some_key in some_dict (dove some_key è qualcosa di hashable, non necessariamente una stringa).

    Le idee si sono collegati (queste idee) contenute esempi per verificare se la chiave specifica che esisteva nei dizionari restituito da locals() e globals(). Il tuo esempio è simile, perché si sta verificando l’esistenza di specifiche chiave in kwargs dictionary (dizionario contenente parola chiave di argomenti).

  4. 2

    Un modo è quello di aggiungere da soli! Come? Dalla fusione di kwargs con un mazzo di default. Questo non essere appropriato in tutte le occasioni, per esempio, se le chiavi non sono noti in anticipo. Tuttavia, se lo sono, ecco un semplice esempio:

    import sys
    
    def myfunc(**kwargs):
        args = {'country':'England','town':'London',
                'currency':'Pound', 'language':'English'}
    
        diff = set(kwargs.keys()) - set(args.keys())
        if diff:
            print("Invalid args:",tuple(diff),file=sys.stderr)
            return
    
        args.update(kwargs)            
        print(args)

    I valori predefiniti sono impostati nel dizionario args, che include tutti i tasti ci aspettiamo. Il primo controllo per vedere se ci sono imprevisti chiavi in kwargs. Quindi aggiorniamo args con kwargs che andrà a sovrascrivere eventuali nuovi valori che l’utente ha impostato. Non abbiamo bisogno di verificare se una chiave esiste, si usa ora args come il nostro argomento dizionario e non hanno più bisogno di kwargs.

  5. 1

    È possibile scoprire le cose facilmente da soli:

    def hello(*args, **kwargs):
        print kwargs
        print type(kwargs)
        print dir(kwargs)
    
    hello(what="world")
    • Rimuovere il “facile” e poi è una risposta migliore. Se è stato facile per tutti, quindi noi non avremmo bisogno di questo sito. Trovare il in operatore, di per sé, non è facile, se hai mai programmato e/o Python. È solo accennata nel dict.get() e dict.setdefault() aiuto.

Lascia un commento