tutorial español python

español - Python: ¿Me estoy perdiendo algo?



django tutorial (16)

¿Estás leyendo Python que no has escrito?

Aquí hay un script de la distribución de Python 2.6.1 que elimina los archivos .pyc y .pyo.

#!/usr/local/bin/python """Recursively zap all .pyc and .pyo files""" import os import sys # set doit true to actually delete files # set doit false to just print what would be deleted doit = 1 def main(): if not sys.argv[1:]: if os.name == ''mac'': import EasyDialogs dir = EasyDialogs.AskFolder(message=''Directory to zap pyc files in'') if not dir: sys.exit(0) zappyc(dir) else: print ''Usage: zappyc dir ...'' sys.exit(1) for dir in sys.argv[1:]: zappyc(dir) def zappyc(dir): os.path.walk(dir, walker, None) def walker(dummy, top, names): for name in names: if name[-4:] in (''.pyc'', ''.pyo''): path = os.path.join(top, name) print ''Zapping'', path if doit: os.unlink(path) if __name__ == ''__main__'': main()

¿Cuántos modismos de Python puedes encontrar en eso?

Estoy en el proceso de aprender Python al implementar scripts de compilación y demás. Y, por el momento, todo funciona bien, ya que los scripts hacen lo que deben hacer. Pero sigo teniendo la sensación de que me estoy perdiendo algo, como "The Python Way". Sé que los guiones de compilación y los guiones de pegamento no son realmente el trabajo de desarrollo más emocionante y difícilmente pueden ser un candidato para revelar el verdadero poder de Python, pero aún me gustaría tener la oportunidad de dejarme impresionar. Desarrollo principalmente en C # y encuentro que mi código de Python se ve muy similar en estructura y estilo a mucho de mi código C #. En otras palabras, siento que estoy pensando en C # pero escribiendo en Python.

¿Realmente me estoy perdiendo algo?

(Nota: me doy cuenta de que esto no es tanto una cuestión de programación y es bastante amplio y puede que no haya una respuesta definitiva, así que modérenme al olvido si es necesario).



No, esto es común para las personas que se trasladan a Python desde otros lenguajes tipo C. Creo que lo que estás buscando es maneras de hacer que tu código sea más "Pythonic" . La buena noticia es que cuanto más Python escribas, más Pythonic se convertirá en tu código. Es un desbordamiento natural de la actitud de "cómo puedo hacer esto más simplemente".

Otro buen lugar para mirar es The Zen of Python . Estas actitudes hacia el desarrollo de Python también te ayudarán en el mismo aspecto.



Para agregar a las respuestas de Andrew Hare y Baishampayan Ghose ...

Para aprender el idioma de cualquier idioma debe incluir la lectura de código escrito en ese idioma. Todavía estoy aprendiendo el modismo de Python, pero he pasado por esto con otros idiomas. Puedo leer acerca de la lista de comprensiones, pero la bombilla solo aparece cuando ves esas cosas en uso y dices: "¡Guau! ¡Es increíble! ¡Dos líneas de código y es muy claro!" Así que busca un código pitónico que te parezca interesante y comienza a leerlo y entenderlo. El conocimiento permanecerá en tu cabeza mejor si ves todo en el contexto de un programa en funcionamiento.


Recientemente he estado aprendiendo / mejorando mi python al resolver los problemas de Project Euler en python. Esto me ha funcionado muy bien porque:

  1. Es divertido y competitivo, así que estoy motivado para seguir
  2. Me obliga a utilizar las estructuras de datos de python de una manera realmente natural para obtener el rendimiento que necesito, por lo que me ha enseñado mucho sobre listas, conjuntos, cadenas, iteraciones, etc.
  3. La mayoría de los problemas necesitan menos de una página de código para resolver, por lo que tiene más tiempo para pensar en pulir o reescribir de una manera más elegante
  4. Python hace frente a enteros grandes muy fácilmente, por lo que se siente como el lenguaje correcto para usar

Lo recomendaría a fondo.


Si bien las secuencias de comandos de compilación y las secuencias de comandos [ sic ] no son realmente el trabajo de desarrollo más interesante, son completamente un candidato para revelar el verdadero poder de Python.

Primero, mira las diversas herramientas de creación ya escritas en Python.

El pez grande en este estanque es Scons: http://www.scons.org/ . Aprende sobre esto

Esta publicación del blog habla sobre las alternativas http://farmdev.com/thoughts/46/the-python-make-tool/

"Todavía me gustaría tener la oportunidad de darme un respiro". Comience con Google: encuentre las herramientas de Python que ya hacen todo o parte de lo que está tratando de hacer. Codifique menos, descargue y lea más.


Para repetir TLHOLADAY, lea la biblioteca estándar. Ahí es donde están las cosas "pitónicas". Si no te sientes bien ahí, lee la fuente de sqlachemy o django o tu proyecto de elección.


Sugeriría encontrar un gurú personal de Python. Muéstreles algo de su código y pídales que lo revisen o lo reescriban en idiomática python. Así serás iluminado.


Escriba un código de Python y publíquelo en SO para su revisión y comentarios si es pitónico.


Piensa así:

  • Si escribe demasiado para poco trabajo, algo está mal, esto no es pitónico.

La mayoría del código de Python que escribirás es muy simple y directo. Usualmente no necesitas mucho trabajo para nada simple. Si escribe demasiado, deténgase y piense si hay una mejor manera. (¡y así es como aprendí muchas cosas en Python!)



Estudie API / frameworks pythonic bien diseñados. Algunos de los mejores viven fuera de la biblioteca estándar. Tenga en cuenta lo que le permiten no hacer . Mis favoritos:

  • py.test es más pythonic que unittest (que se basó en JUnit). Simplemente escriba la función test_foo() lugar de heredar una clase de unittest.TestCase . Simplemente assert x == y lugar de self.assertEqual(x, y) . Muchos más regalos ...

    • Doctest también es más pitónico que unittest. Muchos se dan por vencidos debido a algunas molestias prácticas, pero la idea es brillante.

    • Si está profundamente interesado en las pruebas, la acción del modulo de simulacro -> enfoque de afirmación es más Pythonic que el registro de las bibliotecas competidoras -> paradigma de repetición.

  • request es una de las API más limpias que he visto, mucho mejor que httplib + urllib + urllib2.

  • JSON y YAML son más pitónicos que XML .

    • JSON-RPC es más pitónico que XMLRPC o SOAP estremecimiento .

    • ElementTree es mucho más API pythonic que DOM. Al optimizar las etiquetas que tienen .text o children, se reduce el desajuste de la impedancia de las estructuras de datos XML <-> (pero aún se puede redondear el contenido mixto a través del hack de .tail ).

  • Scapy es un marco sorprendentemente lacónico para enviar y diseccionar paquetes de red.

  • Creo que Storm es el mapeo relacional de objetos más pitónico que existe. Descargo de responsabilidad: casi no tengo experiencia con ORM.

  • heapq es un módulo bellamente implementado. Solo lee el código.

  • itertools es muy poderoso. Lea todos los ejemplos en la documentación.
    Las opiniones varían sobre si usarlo extensamente es pitónico o un dialecto extraño :-)

Lea "novedades en Python", al menos para la última versión que está utilizando. Lea algunas PEP. Comprenda por qué los cambios son una mejora.

Finalmente, asegúrate de aprovechar al máximo el Python interactivo. La mejor manera de aprender las API es probarlas y ver qué pasa. La edición de varias líneas, la finalización y el acceso fácil a la ayuda () son características imprescindibles: echa un vistazo a ipython (¡incluido el portátil!), Dreampie, bpython.


Además de cosas como Generadores, Iteradores, Comprensión de listas, etc., mencionadas por otras personas aquí, me gustaría sugerir algunos conceptos más que, sin duda, le agregan valor a alguien que intenta hacer las cosas de manera "pitónica". Estos son Decoradores y Meta Clases.

Para los decoradores, esta respuesta es muy recomendable y para Meta Classes puedes pasar por esto .


import this

Si puedes poner tu código al lado del Zen de Python y sentirte bien al respecto, estás a mitad de camino. También consulte el módulo this.py : un poco de ironía.

La otra mitad es aprender sobre cosas como: expresiones regulares , listas de comprensión , generadores , metaclases , desempaquetado de argumentos , decoradores , paso de lista , enunciado ''con'' , asignación condicional , poderosos complementos como enumerar () , mapa () , zip () , reduce () , any () y pow () , y muchos otros (revisa las características ocultas de Python para más información)

En el camino, puedes leer el código de otras personas y modificarlo.

Finnaly: aprende finally sobre e import antigravity


Yo recomendaría que lean Generators , itertools , itertools y sobre todo List Comprehensions .

Estos son los pilares de cualquier cosa Pythonic. Y para todo lo demás, está PEP-8 .

Lea sobre estos conceptos y trate de usarlos cuando sea apropiado. ¡Todo lo mejor!

PD: No te olvides de import this ;)

Adición : También agregaría algunas sugerencias excelentes dadas por otros en este hilo aquí: