Cattiva pratica per definire le costanti in base a una chiamata di funzione?

7

In Python quando si scrivono script di gestione dei file ho spesso un percorso di base che è una costante,

BASE = "C:/"

Naturalmente userò il percorso di base per creare altri percorsi in seguito, compresi altri percorsi che non cambieranno in nessun altro posto. Quindi definisco costanti come questo:

SUB_FOLDER = os.path.join(PROJECT_BASE, "folder")

Tuttavia sembra che potrebbe essere contrario definire una costante basata sul risultato di una chiamata di funzione, anche se quella chiamata restituirà un risultato fisso e non verrà mai modificata.

Questo è considerato uno stile scadente che potrebbe confondere le persone?

    
posta SuperBiasedMan 13.11.2015 - 13:03
fonte

2 risposte

12

Questa sarà considerata una costante di runtime: il valore non può essere conosciuto prima dell'avvio del programma, ma rimane invariato nell'intera applicazione una volta impostato.

Il vantaggio principale di una costante di runtime è che rende ovvio a uno sviluppatore che il valore è invariato e che lo impone in qualche modo (per evitare assegnazioni errate quando il valore è già stato impostato), ma tu riconoscere che non può essere conosciuto fino all'ora di esecuzione. Confronta il valore di Pi (che può essere conosciuto e impostato prima del runtime) nel percorso di installazione di un'applicazione (che può essere scoperto solo all'avvio dell'applicazione, ma non cambia quando l'applicazione è in esecuzione).

Il tuo esempio si adatta perfettamente alla fattura per questo: è un valore che viene impostato una volta e non cambierà mai per tutta la tua applicazione e quindi può sembrare una costante. Nota che questa non è una costante costante poichè Python non li ha e avrai quindi bisogno di una sorta di soluzione alternativa per forzare la loro costanza.

    
risposta data 13.11.2015 - 14:06
fonte
2

L'impostazione di BASE e l'utilizzo del suo valore in questo modo è ciò che si desidera fare.

Ora se hai bisogno di modificare alcuni mesi da ora è solo definito in un posto nel codice. Immagina se il tuo capo ti abbia detto di archiviare nuovi file sul disco X; Dovresti trovare tutti i posti in cui menzioni "c: /" e cambiarli in "x: /". Non commettere errori o i file verranno scritti nel posto sbagliato e quelli che hai bisogno di leggere non saranno trovati.

SUB_FOLDER non è una costante. Il suo valore è determinato una frazione di secondo dopo l'inizio dell'esecuzione del programma. Di nuovo la definizione in questo modo aiuta nella manutenzione del programma.

    
risposta data 13.11.2015 - 14:06
fonte

Leggi altre domande sui tag