Cosa significa pitonico? [chiuso]


93

In molti siti Web vedo spesso commenti che il codice non è pitonico o che esiste un modo più pitonico per raggiungere lo stesso obiettivo.

Cosa significa pitonico in questo contesto? Ad esempio, perché è

while i < someValue:
   do_something(list[i])
   i += 1

non pitonico mentre

for x in list:
   doSomething(x)

è pitonico?



Questa è una domanda fuori tema. Avresti potuto fornire un piccolo esempio di codice per approfondire l'argomento.
ρss

Risposte:


104

Sfruttare le funzionalità del linguaggio Python per produrre codice chiaro, conciso e gestibile.

Pythonic significa codice che non si limita a ottenere la sintassi corretta, ma che segue le convenzioni della comunità Python e utilizza il linguaggio nel modo in cui è inteso essere utilizzato.

Questo è forse più facile da spiegare con un esempio negativo, come nell'articolo collegato alle altre risposte. Esempi di codice non pitonico provengono spesso da utenti di altri linguaggi, che invece di apprendere schemi di programmazione Python come comprensioni di elenchi o espressioni di generatori, tentano di utilizzare schemi più comunemente usati in C o java. I loop sono esempi particolarmente comuni di questo.

Ad esempio in Java potrei usare

for i in (i; i < items.length ; i++)
 {
  n = items[i];
 ... now do something
 }

In Python possiamo provare a replicarlo usando i cicli while, ma sarebbe più pulito da usare

for i in items:
  i.perform_action()

O anche un'espressione generatrice

(i.some_attribute for i in items)

Quindi, essenzialmente, quando qualcuno dice che qualcosa non è pitonico, sta dicendo che il codice potrebbe essere riscritto in un modo che si adatta meglio allo stile di codifica dei pitoni.

La digitazione import thissulla riga di comando fornisce un riepilogo dei principi di Python. Meno noto è che il codice sorgente di import thisè decisamente, e in base alla progettazione, non pitonico! Dai un'occhiata per un esempio di cosa non fare.


27
A proposito, il codice sorgente per "importa questo" è qui: github.com/python/cpython/blob/master/Lib/this.py
Gautam

Quale sarebbe un esempio in un campo diverso? Come cucinare, progettare, guidare ..?
Daniel Springer

2
Per un esempio di codice più complesso, un'implementazione "non pitonica" del cifrario Vigenere è resa progressivamente più "pitonica" in questa risposta (divulgazione: il mio codice e opinioni): stackoverflow.com/questions/2490334/…
Nick

18
Penso che dovrei lasciare un commento qui dato il mio nome utente
Pythonic

Inoltre forse vale la pena notare che il termine generale è "idiomatico"
Louis Maddox
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.