Scrivere codice come un Pythonista: Python Idiomatico
Lo Zen di Python (1)
Questi sono i princìpi guida di Python, sebbene siano aperti alle interpretazioni. Un certo senso dell'umorismo è richiesto per una loro corretta interpretazione.
D'altronde, se stai utilizzando un linguaggio di programmazione che richiama il nome di un gruppo di sketch comici, dovresti avere innato tale senso dell'umorismo.
Lo Zen di Python (2)
Sebbene mai è spesso meglio di subito.
- - Tim Peters
Questo particolare "poema" partì come una sorta di gioco ma racchiude al suo interno molte delle verità che stanno alla base di Python. Lo Zen di Python è stato formalizzato nel PEP 20, com'è possibile evincere dal suo abstract:
- Il Pythoneer di lunga data Tim Peters ha succintamente incanalato i principi guida di BDFL sul design in Python all'interno di 20 aforismi, dei quali solo 19 sono stati annotati.
Puoi decidere da solo se sei un "Pythoneer" o un "Pythonista". I termini hanno connotazioni alquanto differenti.
In caso di dubbi:
1 import this
Provandolo in un interprete interattivo Python:
1 >>> import this
Ecco un altro easter egg:
1 >>> from __future__ import braces
2 File "<stdin>", line 1
3 SyntaxError: not a chance
Che gruppo di buontemponi!
Stile di scrittura del codice: la leggibilità è importante
I programmi devono essere scritti per essere letti dalle persone, e solo casualmente per essere eseguiti da macchine.
- Abelson & Sussman, Structure and Interpretation of Computer Programs
Cerca di rendere leggibili e non ambigui i programmi che scrivi.
PEP 8: Guida stilistica per la scrittura di codice Python
Può essere utile la lettura di:
PEP = Python Enhancement Proposal (proposta di miglioramento per Python)
Un PEP è un documento di design che fornisce informazioni alla community di Python, o che descrive una nuova caratteristica del linguaggio, così come i sui processi e il suo ambiente.
La community di Python dispone di propri standard relativi a come dovrebbe essere strutturato del codice: essi sono scritti nel PEP 8. Tali standard sono differenti rispetto a quelli validi nell'ambito di altre community, come quelle relative a C, C++, C#, Java, VisualBasic e così via.
Poiché l'indentazione e gli spazi sono molto importanti in Python, la Guida stilistica per la scrittura di codice Python si avvicina a uno standard de facto. Sarebbe saggio, dunque, aderire a tale guida, anche perché molti progetti open source e (si spera) di taglio domestico la seguono piuttosto strettamente.
Gli spazi 1
- 4 spazi per ogni livello di indentazione.
- Nessuna hard tab.
- Non mischiare mai tab e spazi. Ciò è esattamente supportato da IDLE ed Emacs in Python mode. Anche altri editor potrebbero fornire tale supporto.
- Una riga vuota tra funzioni.
- Due righe vuote tra classi.
Gli spazi 2
- Aggiungi uno spazio dopo "," nei dizionari, nelle liste, nelle tuple, nelle liste di argomenti e dopo ":" all'interno dei dizionari, ma non prima.
- Inserisci degli spazi attorno agli assegnamenti e ai confronti (tranne che all'interno delle liste degli argomenti).
- Nessuno spazio solo all'interno delle parentesi o solo prima delle liste degli argomenti.
- Nessuno spazio all'interno delle docstring.
1 def make_squares(key, value=0):
2 """Return a dictionary and a list..."""
3 d = {key: value}
4 l = [key, value]
5 return d, l
Identificatori
minuscolo_connesso per funzioni, metodi e attributi
minuscolo_connesso o TUTTO_MAIUSCOLO per le costanti
MaiuscoloStudiato per le classi
notazioneCammello solo per conformità con convenzioni preesistenti
Attributi: interface, _internal, private. A ogni modo, cerca di evitare la forma private. Non la uso mai. Credimi. Se ne fai uso, te ne pentirai prima o poi.
Righe lunghe e continuazioni
Mantieni le righe a un massimo di 80 caratteri di lunghezza.
Usa la continuazione sottintesa della riga all'interno di parentesi:
1 def __init__(self, first, second, third,
2 fourth, fifth, sixth):
3 output = (first + second + third
4 + fourth + fifth + sixth)
Usa i backslash come ultima risorsa:
1 VeryLong.left_hand_side \
= even_longer.right_hand_side()
L'uso dei backslash è delicato: essi debbono necessariamente concludere la riga nella quale si trovano. Se aggiungi uno spazio dopo il backslash, esso non funzionerà più. Inoltre, essi sono decisamente poco gradevoli visivamente.
Stringhe lunghe
Le stringhe letterali adiacenti sono concatenate dal parser:
1 >>> print 'o' 'n' "e"
2 one
Gli spazi tra i letterali non sono obbligatori, ma aumentano la leggibilità. Qualsiasi tipo di virgolette può essere utilizzato:
1 >>> print 't' r'\/\/' """o"""
2 t\/\/o
La stringa preceduta da una "r" è una stringa "raw". I backslash non sono valutati come caratteri di escape all'interno delle stringhe raw. Tali stringhe sono utili all'interno di espressioni regolari o nei path all'interno di un filesystem Windows.
Nota come gli oggetti stringa nominali non vengano concatenati:
1 >>> a = 'three'
2 >>> b = 'four'
3 >>> a b
4 File "<stdin>", line 1
5 a b
6 ^
7 SyntaxError: invalid syntax
Questo perché la concatenazione automatica è una caratteristica del parser/compilatore, non dell'interprete Python. Hai bisogno di usare l'operatore "+" per concatenare stringhe a runtime.
1 text = ('Le stringhe lunghe possono essere composte da '
2 'diverse stringhe piccole.')
Le parentesi consentono un'implicita continuazione di riga.
Le stringhe multiriga fanno uso delle triple virgolette:
1 """Triple
2 virgolette
3 doppie"""
1 '''\
2 Triple
3 virgolette
4 singole\
5 '''
Nell'ultimo esempio (triple virgolette singole) nota come i backslash vengano usati come escape sulle nuove righe. Ciò elimina la necessità di righe aggiuntive, mantenendo al contempo sia il testo che le virgolette giustificati a sinistra. I backslash debbono essere posizionati a fine riga.