Hacer una búsqueda en Google de "pitón" revela una amplia gama de interpretaciones. La página de wikipedia dice:
Un neologismo común en la comunidad de Python es pitónico, que puede tener una amplia gama de significados relacionados con el estilo del programa. Decir que el código es pitónico es decir que usa bien los modismos de Python, que es natural o muestra fluidez en el lenguaje. Del mismo modo, decir de una interfaz o función de lenguaje que es pitónico es decir que funciona bien con expresiones idiomáticas de Python, que su uso encaja bien con el resto del lenguaje.
También discute el término "no pitónico":
Por el contrario, una marca de código no pitónico es que intenta escribir código C ++ (o Lisp, Perl o Java) en Python, es decir, proporciona una transcripción aproximada en lugar de una traducción idiomática de formas de otro idioma. El concepto de pitonicidad está estrechamente vinculado a la filosofía minimalista de legibilidad de Python y evita el enfoque de "hay más de una forma de hacerlo". El código ilegible o los modismos incomprensibles no son pitónicos.
¿Qué significa el término "pitónico"? ¿Cómo aprendo a aplicarlo efectivamente en la práctica?
Respuestas:
He descubierto que la mayoría de la gente tiene sus propias interpretaciones de lo que realmente significa ser "pitón". De Wikipedia:
He descubierto que la mayoría de las veces, se derivan más ejemplos "pitónicos" de personas que intentan ser inteligentes con las expresiones idiomáticas de Python y (nuevamente, la mayoría de las veces) hacen que su código sea prácticamente ilegible (que no es Pythonic).
Mientras se apegue a los modismos de Python y evite tratar de usar estilos C ++ (u otro lenguaje) en Python, entonces estará siendo Pythonic.
Como señaló WorldEngineer, PEP8 es un buen estándar a seguir (y si usa VIM, hay complementos disponibles para el revestimiento PEP8).
Sin embargo, al final del día, si su solución funciona y no es absolutamente imposible de mantener y lenta, ¿a quién le importa? La mayoría de las veces, su trabajo es realizar una tarea, no escribir el código pitónico más elegante posible.
Otra nota al margen (solo mi opinión, siéntase libre de hacer un voto negativo por eso;)): También he encontrado que la comunidad de Python está llena de un montón de ego (no es que la mayoría de las comunidades no lo sean , es solo un poco más frecuente) en comunidades como C y Python). Entonces, combinar el ego con interpretaciones mal interpretadas de ser "pitónico" tenderá a producir una gran cantidad de negatividad sin fundamento. Toma lo que lees de los demás con un grano de sal. Cumpla con los estándares y la documentación oficiales y estará bien.
fuente
Pythonic es codificar idiomáticamente en Python. Significa utilizar estructuras y formatos que funcionen bien para Python desde el punto de vista de la programación, pero también desde el punto de vista de la lectura comunitaria. Es muy parecido a cómo K&R estableció el estándar para el estilo de programación C durante mucho tiempo. Esta guía muestra que debe codificar idiomáticamente en Python. Se hace referencia a PEP 8 en esa guía, por lo que probablemente valga la pena leerlo.
fuente
Escribir código "Pythonic" En mi humilde opinión, solo está haciendo un uso efectivo de las características (V) HLL que proporciona el lenguaje. Como un ejemplo omnipresente,
Eso es muy pitónico. Recuerdo cuando comencé a aprender C # después de meses de solo Python,
de alguna manera me confundió, pero me llevó un minuto volver a mis raíces C / C ++.
Otra forma pitónica es usar lambdas.
en realidad se imprimirá
l
ordenado en orden descendente.Luego está el "tipeo de patos" muy usado, pero menos entendido: si camina y habla como un pato, lo trata como un pato. Esto está poco relacionado con las interfaces en otros lenguajes OO.
Además, el uso de métodos de programación funcional cuando corresponda, como el uso de map y reduce se considera pitónico.
Vi que se publicaba una respuesta mientras escribía, y contiene un buen enlace. PD: No es que tu conocimiento de Python sea limitado. ¡Puedo apostar a que Python no fue su primer idioma y, por lo tanto, (como la mayoría de nosotros, los pitonistas) tendremos que aprender a ser "idiomáticos" con la serpiente! ¡Salud!
fuente
map
,reduce
,lambda
y tales son idiomática per se. Las comprensiones de listas y la expresión generadora son una alternativa y muchos las prefieren siempre que sea razonablemente posible (en particular, son menos ruidosas cuando se necesita una lambda de todos modos). Ciertamente tienen sus usos, y la programación funcional se muestra en otros idiomas (decorador, por ejemplo).(x, y) = (7, 'fuhrer')
pero casi siempre estoy "corregido" que sin parens es la mejor manera de escribirlo!print(sorted(l, reverse=True))
? También encontraría su primer ejemplo discutible. Son dos tareas comprimidas en una; está bien, pero no lo llamaría muy pitónico. Los lectores tienen que mirar más de largo lo que hace en comparación con tener dos tareas.El código pitónico es:
fuente
Cada vez que he tratado de aprender un nuevo idioma, he descubierto que leer código de personas que conocen el idioma como el dorso de la mano, mirar hacia arriba / preguntar sobre cualquier cosa que parezca extraña, y luego tratar de imitar su estilo es el Lo mejor que puedes hacer. Ejemplos:
En Python, ya que estamos en el tema, encontré los ejemplos de Dive Into Python increíblemente útiles para comenzar. Tienden a enseñar no solo los conceptos básicos de Python, sino también a enfatizar realmente la idiomática Python.
Al aprender D, dado que la documentación no era excelente en ese momento porque el lenguaje era muy avanzado, aprendí al leer el código en la biblioteca estándar, específicamente, algunas de las obras maestras de Andrei Alexandrescu .
Cuando aprendí C ++, heredé una base de código de un buen programador de C ++ y aprendí mucho sobre la programación idiomática de C ++ por su insistencia en pasar contenedores STL por referencia, etc.
En todos los idiomas, encuentro que explorar las preguntas de StackOverflow sobre el idioma y observar lo que la gente suele hacer para lograr cosas básicas ayuda.
fuente
Python no es Java podría darle algunos consejos útiles. No puedo decir más sin saber en qué tipo de problemas te encuentras, pero es un consejo muy concreto para los programadores que vienen de otro idioma (en este caso específicamente Java) sobre cómo hacer Python de manera diferente.
fuente
Alguien dijo parafrasear, para aprender qué es Pythonic, simplemente descifrar algo de código. No estoy de acuerdo con eso. Si te gusta escribir código muy denso, eso no lo hace más Pythonic.
Una forma de ayudarlo a definir qué es Pythonic en lo que a usted respecta, pregúntese: "¿Por qué (quiero decir) usaría el lenguaje Python?" ¿Qué te atrae de esto?
Para mí es legibilidad y falta de compilación y código abierto (casi todo). Puedo descargar toneladas de bibliotecas y leer su código fuente con menos estrés por las licencias que muchos otros idiomas.
Para mí, Python es hermosa visualmente. Guido (el creador de Python) también me sigue demostrando, a través de sus respuestas en PEPS y discusiones) que sus elecciones sobre cómo hizo el lenguaje son superiores a mis propias ideas sobre cómo debería haber sido creado.
Para mí, un gran programador es alguien con habilidades de toma de decisiones muy informadas sobre qué camino tomar al codificar. Para mí, Python ayuda a tomar esas decisiones rápidamente.
Al simplificar la sintaxis del código fuente al permitir la escritura de pato en lugar de la conversión de tipo explícito, y la expectativa de que los codificadores que revisan su código "deberían ser codificadores con buen comportamiento" conduce a algo que yo también llamo "Pythonic"
Entonces, hay dos lados de lo que es Pythonic. Uno es sintáctico, el otro es la práctica de. ¿Cómo explicar el lado más profundo de lo que es "Pitónico"?
En Python no es gran cosa hacer esto: alist = ['one', 'two', 'three \ n'] alist.append ((1234, 'Atuple'))
y la tupla se agregará a la lista sin preocuparse por los tipos de objetos. La parte de Pythonic no es que PUEDES hacer esto, sino que tu código debe ESPERAR esto y solo trabajar / adaptarse.
Cualquier cosa que funcione en el objeto -alista- debe escribirse con la idea de que algún otro codificador podría ingresar y agregar una no cadena a la lista y que la adaptación del código fuente por el nuevo codificador no debería ser difícil de hacer. Ese es el beneficio de ducktype después de todo.
fuente
Compra un libro recomendado. Léelo Debería proporcionarle una buena base para usar el idioma y un mecanismo que debe cumplir con el estilo de la comunidad
fuente