Stile Python: 5 strumenti per ripulire il tuo codice Python

In teoria, qualsiasi codice Python va bene fintanto che è sintatticamente corretto e funziona come previsto. In pratica, vuoi adottare uno stile coerente nei tuoi progetti, preferibilmente uno guidato dai consigli di stile di Python. La buona notizia è che non devi farlo a mano. L'ecosistema Python contiene una varietà di strumenti, da quelli altamente mirati a quelli ad ampio raggio, per garantire che il codice sorgente Python aderisca alle convenzioni di stile.

In questo articolo esamineremo quattro strumenti popolari per controllare gli stili di codice Python, più uno per riformattare il codice per essere coerente. Gli IDE Python come PyCharm o Visual Studio Code li supportano in modo nativo o con un'estensione, in modo che possano essere prontamente integrati nel flusso di lavoro di sviluppo.

Pycodestyle

PEP 8 è il documento che enuncia le convenzioni di codifica di Python: tutto, dall'uso di tabulazioni o spazi durante l'indentazione (usa quattro spazi, problema risolto) a come nominare variabili e oggetti. Pycodestyle è il modulo Python che controlla il codice Python rispetto alle raccomandazioni PEP 8 e fornisce un rapporto su dove il codice analizzato è fuori specifica.

Pycodestyle non fornisce correzioni automatiche per i problemi; questo è su di te. Ma Pycodestyle è altamente configurabile, consentendo di sopprimere tipi specifici di errori o analizzare solo file specifici in un albero di origine. E quasi tutti gli IDE con supporto Python supportano anche Pycodestyle, quindi è la scelta facile per la compatibilità universale, se non la funzionalità.

Molti linter di codice Python possono funzionare come moduli in Python e Pycodestyle non fa eccezione. Puoi usarlo per verificare il codice a livello di codice, ad esempio come parte di una suite di test.

Ideale per:  verifica di base della conformità PEP 8.

Autopep8

Autopep8 riprende da dove si interrompe Pycodestyle. Usa Pycodestyle per determinare quali modifiche devono essere apportate, quindi riformatta il codice per conformarsi ai suggerimenti forniti. I file esistenti possono essere riformattati sul posto o scritti in nuovi file. Autopep8 risolve anche una serie di altri problemi che possono insinuarsi, come la pulizia del codice convertito da Python 2 a Python 3 o file con marcatori di fine riga misti. Inoltre, Autoprep8 può essere utilizzato a livello di codice per riformattare il codice fornito come stringhe.

Ideale per: convertire i file in modo che siano conformi a PEP-8.

Flake8

Flake8 racchiude diversi strumenti in stile codice e linting Python in un unico pacchetto. Insieme a PyFlakes, che utilizza il controllo della sintassi per rilevare errori di base, e Pycodestyle, di cui abbiamo discusso sopra, Flake8 fornisce uno strumento aggiuntivo per controllare la "complessità ciclomatica" di un progetto, ovvero il numero di percorsi di codice indipendenti trovati nel programma . (La complessità ciclomatica è una metrica potenzialmente utile se si desidera evitare che un modulo di base diventi troppo poco basilare, ad esempio.) Alla fine di ogni analisi, Flake8 fornisce una metrica percentile per la qualità complessiva del codice analizzato, un utile modo per avere un'idea rapida di quali parti di una base di codice sono più problematiche.

Flake8 ha anche un sistema di plug-in, quindi il linting può essere accoppiato con commit Git o altre azioni automatizzate, ad esempio per fornire codice problematico a un riformattatore.

Ideale per:  valutazione della qualità complessiva del codice, con raccomandazioni specifiche.

Pylint

Pylint è probabilmente il linter Python più ampiamente utilizzato e supportato in circolazione. Come gli altri, cerca errori e deviazioni dagli standard di codifica nel tuo codice Python e offre modifiche su come correggerli.

Pylint è anche probabilmente il più completo dei controllori di codice, nel senso che può avvisarti di molti problemi con il tuo codice, alcuni dei quali potrebbero non essere nemmeno rilevanti nel tuo contesto particolare. I risultati possono essere dettagliati, ma possono anche essere adattati alle peculiarità di un particolare progetto.

Pylint cerca cinque classi di problemi progressivamente più problematiche. Le "convenzioni" sono violazioni di PEP 8 o altre regole di coerenza in Python. I "refactors" indicano odori di codice, errori comuni o codice che potrebbe essere rielaborato per essere più efficiente o meno confuso, come importazioni cicliche o file con troppe righe simili che potrebbero essere condensate in una funzione comune. Gli "avvisi" sono problemi specifici di Python, come codice non raggiungibile (tutto dopo una  return in una funzione) o classi prive di un  __init__ metodo. Gli "errori" sono veri e propri bug del codice, come le variabili non definite, e i problemi "fatali" sono quelli che impediscono a Pylint di funzionare.

Di nuovo, ciò che rende Pylint sia più utile che più pesante è la quantità di feedback che fornisce. La buona notizia è che per coloro che vogliono ottimizzarlo, la verbosità e la granularità di Pylint possono essere modificate per progetto o anche per file. Inoltre, puoi attingere a una gamma di plug-in Pylint che aggiungono tipi specifici di controlli, ad esempio per il codice troppo complesso (lunghe catene di  ifs, ecc.) O lanugine per incorporati deprecati.

Ideale per:  controllo di qualità per il codice da zuppa a noci, supponendo che non ti dispiaccia modificare le sue impostazioni per evitare il sovraccarico.

Nero

Il nero non è uno strumento di analisi del codice o di linter, ma uno strumento per applicare lo stile come un modo per garantire una migliore qualità del codice. Per questo motivo si trova comodamente accanto agli altri strumenti descritti qui, poiché è un modo per evitare preventivamente molti errori di stile di base.

Il nero è descritto come "il formattatore di codice senza compromessi" - intransigente perché non ha opzioni impostabili ad eccezione della lunghezza della riga. Black riformatta il codice Python in uno stile unico, coerente e leggibile, attingendo a regole interne per la gestione di problemi complessi come le espressioni multilinea, quindi anche quelle vengono riformattate in modo coerente.

Un vantaggio pubblicizzato dell'utilizzo del nero è che risolve tutte le controversie sulla formattazione, quindi elimina il "bikehedding" e rende anche meno rumoroso l'output di linter. Non devi discutere su come formattare il codice per un progetto, o anche fare gran parte di esso manualmente. Devi solo usare il nero e farla finita; puoi persino configurare molti IDE per formattare automaticamente il codice con Black. Un altro vantaggio dichiarato è che rende i  git commit più puliti, poiché riduce il numero di modifiche apportate a un determinato file.

Ideale per: montare basi di codice in conformità stilistica di base in massa .

Come fare di più con Python:

  • Come lavorare con il tipo di dati dell'elenco Python
  • Come creare pacchetti di app Python con BeeWare Briefcase
  • Come eseguire Anaconda fianco a fianco con altri Pythons
  • Come usare le dataclass Python
  • Inizia con async in Python
  • Come usare asyncio in Python
  • 3 passaggi per una revisione asincrona di Python
  • Come utilizzare PyInstaller per creare eseguibili Python
  • Tutorial Cython: come velocizzare Python
  • Come installare Python in modo intelligente
  • Come gestire i progetti Python con Poetry
  • Come gestire progetti Python con Pipenv
  • Virtualenv e venv: spiegazione degli ambienti virtuali Python
  • Python virtualenv e venv cosa fare e cosa non fare
  • Spiegazione del threading e dei sottoprocessi di Python
  • Come utilizzare il debugger Python
  • Come usare timeit per profilare il codice Python
  • Come usare cProfile per profilare il codice Python
  • Come convertire Python in JavaScript (e viceversa)