Assegnazione dei valori del dizionario alle variabili prima di utilizzarle come argomenti della funzione

1

Mi trovo spesso ad avere una funzione, ad esempio autenticarsi:

authenticate(user, token):
    # do authentication

e un dizionario creato leggendo un file di configurazione, come questo:

conf['general']['auth_user']
conf['general']['auth_token']

La mia domanda è, in termini di best practice (python in specifico), dovrei semplicemente chiamare la mia funzione dando direttamente gli argomenti, in questo modo:

authenticate(conf['general']['auth_user'], conf['general']['auth_token'])

o dovrei assegnare i valori in variabili più leggibili e poi chiamare la funzione?

user = conf['general']['auth_user']
token = conf['general']['auth_token']

authenticate(user, token)

Personalmente, trovo il secondo modo più leggibile, specialmente quando la funzione ha bisogno di più di 2 argomenti.

    
posta Cobra Kai Dojo 08.06.2017 - 16:24
fonte

2 risposte

4

Questa domanda ha poco a che fare con Python o con i dizionari. La domanda più generale è quando dovrei introdurre variabili per sottoespressioni di un'espressione ? Vedi anche questa domanda SE per ulteriori discussioni. Ecco alcuni buoni motivi per cui posso pensare di farlo

  1. Estrarre la sotto-espressione rende l'espressione più facile da leggere.
  2. La sottoespressione produce un oggetto di dominio abbastanza importante da giustificare un nome.
  3. Estrarre la sottoespressione consente di evitare calcoli ripetuti.

Penso che in questo caso hai una buona causa per cui il tuo cambiamento soddisfa 1 e 2 e quindi sicuramente, è un bel cambiamento da fare.

    
risposta data 08.06.2017 - 16:46
fonte
3

In Python, il modo migliore che riesco a pensare è usare gli argomenti con nome per questo:

 authenticate(user = conf['general']['auth_user'], 
              token = conf['general']['auth_token'])

(ovviamente, dovrai dividerlo su due righe per mantenere leggibile il codice). In questo modo, non solo fornisci le variabili esplicative, ma rendi la dichiarazione indipendente dall'ordine in cui i parametri vengono passati a authenticate .

    
risposta data 08.06.2017 - 16:45
fonte

Leggi altre domande sui tag