Ha senso utilizzare costanti di stringa in Python invece di stringhe letterali come chiavi?

4

C'è un dizionario nella mia classe con costanti di stringa brevi e informative come chiavi che identificano certe parti della soluzione, come "velocità", "morte_star_power_output". Il mio collega mi ha suggerito di usare VELOCITY="velocity" e DEATH_STAR_POWER_OUTPUT="death_star_power_output" per indicizzare questo dizionario in tutto il programma, perché è la pratica .

Anche se conosco tali pratiche da altri linguaggi di programmazione, in cui servono uno scopo pragmatico - cioè quello di avere un rapido errore in caso di errori di ortografia della stringa - in Python è lo stesso in un modo o nell'altro. Entrambi:

value = dictionary["death_star_powder_output"]

e

DEATH_STAR_POWER_OUTPUT="death_star_power_output"
[...]
value = dictionary[DEATH_STAR_POWDER_OUTPUT]

fallirà allo stesso tempo. Si prega di notare l'errore di ortografia di POWER come POWDER . Esistono alcune linee guida ufficiali relative a questo tipo di pratica in Python?

    
posta loa_in_ 14.03.2018 - 12:56
fonte

3 risposte

7

Non è così utile rifuggire i valori letterali delle stringhe in Python come in altri linguaggi, perché Python non applica una rigorosa predeterminazione degli identificatori, ma è comunque utile.

È vero che se esegui un errore di ortografia con un nome costante in Python, potresti non ricevere un avviso fino al momento dell'esecuzione. Ma analizzatori sufficientemente intelligenti possono ancora rilevare che stai usando una variabile che non sembra avere una dichiarazione, o che stai dichiarando una costante che non sembra essere usata. E dal momento che il supporto degli strumenti può diventare più intelligente nel tempo e il supporto degli strumenti cambia molto più velocemente dello standard di linguaggio, è necessario rispettare le convenzioni che consentono un migliore controllo degli errori, anche se è già presente o meno.

    
risposta data 14.03.2018 - 13:00
fonte
1

Oltre alle ragioni fornite da Kilian Foth, uno dei motivi basilari e indipendenti dalla lingua per usare le costanti in primo luogo è, paradossalmente, perché rende il codice più facile da cambiare.

Una costante è "costante" rispetto all'esecuzione del programma. Cioè, le costanti dovrebbero avere valori che non cambiano mai programmaticamente. Tuttavia, i requisiti del progetto possono cambiare e, quando lo fanno, tutto il tuo duro lavoro può essere riutilizzato senza spreco di tempo per il programmatore e introducendo potenziali bug.

Indipendentemente dal fatto che Python riceva in modo specifico benefici di fail-fast dalle costanti, almeno ottiene i benefici di base dell'uso delle costanti in generale.

    
risposta data 14.03.2018 - 21:35
fonte
0

Come qualcuno che ha usato Python dalla versione 1.5, questo non è "la pratica".

Posso pensare ad alcuni motivi per fare cose come questa. Uno sarebbe localizzazione. Un altro sarebbe il riutilizzo delle stringhe.

Nel caso della localizzazione, vorrai che tutte le stringhe di visualizzazione siano facilmente accessibili ai team di localizzazione, ma queste sarebbero solo stringhe che vengono visualizzate all'utente, non stringhe interne, come gli indici di dizionario.

In caso di riutilizzo, non vorrai che la variabile rispecchi l'intera stringa, è piuttosto inutile, ma qualcosa del genere potrebbe avere più senso:

user_error = "The software has encountered an error, probably your fault"
system_error = "This crummy software is bad, and it has hit a problem"

E quindi potresti usare quelle variabili altrove o più volte. E il messaggio esatto potrebbe essere cambiato in un secondo momento senza trovare ogni istanza in tutto il codice.

    
risposta data 15.03.2018 - 07:34
fonte

Leggi altre domande sui tag