¿Qué significa pythonic? [cerrado]

88

En muchos sitios web, a menudo veo comentarios de que el código no es pitónico o que hay una forma más pitónica de lograr el mismo objetivo.

¿Qué significa pythonic en este contexto? Por ejemplo, ¿por qué

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

no pitónico mientras

for x in list:
   doSomething(x)

es pitónico?

Jon
fuente
11
El Zen de Python , ¿Qué es Pythonic , etc ...?
Martin Tournoij
Esta es una pregunta fuera de tema. Podría haber proporcionado una pequeña muestra de código para que sea más sobre el tema.
ρss

Respuestas:

103

Aprovechar las características del lenguaje Python para producir un código claro, conciso y fácil de mantener.

Pythonic significa código que no solo tiene la sintaxis correcta, sino que sigue las convenciones de la comunidad de Python y usa el lenguaje de la manera en que está destinado a ser usado.

Esto es quizás más fácil de explicar con un ejemplo negativo, como en el artículo vinculado de las otras respuestas. Los ejemplos de código no pitónico a menudo provienen de usuarios de otros lenguajes, que en lugar de aprender patrones de programación de Python, como listas de comprensión o expresiones generadoras, intentan utilizar la palanca en los patrones más comúnmente utilizados en C o Java. Los bucles son ejemplos particularmente comunes de esto.

Por ejemplo, en Java podría usar

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

En Python podemos intentar replicar esto usando bucles while, pero sería más limpio de usar

for i in items:
  i.perform_action()

O incluso una expresión generadora

(i.some_attribute for i in items)

Entonces, esencialmente, cuando alguien dice que algo no es pitónico, está diciendo que el código podría reescribirse de una manera que se ajuste mejor al estilo de codificación de pitones.

Escribir import thisen la línea de comandos ofrece un resumen de los principios de Python. Menos conocido es que el código fuente de import thises decididamente, y por diseño, ¡no pitónico! Échale un vistazo para ver un ejemplo de lo que no debes hacer.

James
fuente
26
Por cierto, el código fuente para "importar esto" está aquí: github.com/python/cpython/blob/master/Lib/this.py
Gautam
¿Cuál sería un ejemplo en un campo diferente? ¿Te gusta cocinar, diseñar, conducir ...?
Daniel Springer
2
Para obtener un ejemplo de un código más complejo, una implementación "no pitónica" del cifrado Vigenere se hace progresivamente más "pitónica" en esta respuesta (divulgación: mi código y opiniones): stackoverflow.com/questions/2490334/…
Nick
18
Creo que debería dejar un comentario aquí dado mi nombre de usuario
Pythonic
Quizás también valga la pena señalar que el término general es "idiomático"
Louis Maddox