C'è una ragione per cui gli sviluppatori Python (entrambi manutentori di Python stesso e autori di moduli) tendono a passare stringhe speciali come argomenti per le funzioni invece di definire simboli per lo stesso scopo? Piuttosto che far cercare ad altri sviluppatori o indovinare i valori speciali consentiti per alcuni argomenti, perché non definire i simboli per rappresentarli?
L'esempio più semplice di ciò a cui posso pensare in base Python è open()
funzione. Per specificare la modalità in cui viene aperto un file, l'argomento mode
può assumere uno dei vari valori stringa. Ad esempio, per aprire un file per la scrittura:
fileObject = open('/tmp/tarfu.txt', 'w')
Perché non definire i simboli per rappresentare i valori consentiti per mode
? Cioè costanti, enumerazioni, membri della classe o qualcosa di simile.
Una semplice definizione potrebbe essere aggiunta allo stesso modulo che definisce open()
( io
, credo):
OPEN_MODE_WRITE = 'w'
Quindi potrebbe essere utilizzato con open()
:
fileObject = open('/tmp/tarfu.txt', OPEN_MODE_WRITE)
Sarebbe simile ad altri linguaggi, come PHP, Java, C e altri. Sebbene le funzioni di apertura di file corrispondenti di quelle altre lingue potrebbero non essere esempi dell'ideale, quelle lingue hanno più esempi di essa rispetto a Python. Tutti comunemente definiscono simboli per tali scopi. Usarli aiuta a ottenere il giusto valore, specialmente se l'editor dello sviluppatore ha funzionalità per completare automaticamente o suggerire simboli. Se i simboli sono di un tipo specifico (come nelle enumerazioni o nei membri della classe), anche i tipi degli argomenti possono essere controllati.
Usando le stringhe per questi valori speciali, gli errori nel codice possono essere rilevati solo in fase di esecuzione, il che potrebbe essere difficile da rintracciare nel codice all'origine del problema. Usare i simboli renderebbe anche il codice più facile da capire, il che credo lo renderebbe più Pythonic .
Tutto ciò che ho scritto qui in riferimento alle stringhe si applica anche ai numeri. Sono stato ispirato a scrivere questa domanda dopo aver usato i panda per un po '. Diverse funzioni consentono allo sviluppatore di specificare se un'operazione si applica a righe o colonne di un oggetto DataFrame
fornendo i numeri 0
e 1
o le stringhe rows
e columns
per l'argomento axis
. Preferirei avere simboli come AXIS_ROWS
e AXIS_COLUMNS
definiti per questo scopo.