Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python Idiomático

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Python Idiomático

Avatar for Alejandro Gómez

Alejandro Gómez

October 20, 2013
Tweet

Other Decks in Programming

Transcript

  1. ☹ favorite_color = [0xBA, 0xDA, 0x55] red = favorite_color[0] green

    = favorite_color[1] blue = favorite_color[2]
  2. 3 head, *body, tail = range(5) # head == 0

    # body == [1, 2, 3] # tail == 4
  3. ☹ person_info = ('Alejandro', 19, 12, 1988, '#BADA55') person =

    Person(person_info[0], person_info[1:4], person_info[4])
  4. ☺ person_info = ('Alejandro', 19, 12, 1988, '#BADA55') NAME =

    slice(0, 1) BIRTH_DATE = slice(1, 4) FAVORITE_COLOR = slice(4, 5) person = Person(person_info[NAME], person_info[BIRTH_DATE], person_info[FAVORITE_COLOR])
  5. • ¿Necesitas definir el orden? – Prefiere key a cmp

    – key sólo se llama una vez por elemento – cmp compara pares de elementos, no está en Python 3
  6. d = { 'red': 0xBA, 'green': 0xDA, 'blue': 0x55 }

    # `for` itera sobre las claves for k in d: print(k)
  7. ☺ from itertools import izip d = {c: v for

    (c, v) in izip(colors, values)}
  8. one = { 'foo': 42 } another = { 'bar':

    None, 'baz': 8 } yet_another = { 'foo': 1, 'baz': 0 }
  9. Django from django.utils.datastructures import MergeDict # funciona al revés que

    `collections.ChainMap` ☹ d = MergeDict(yet_another, another, one)
  10. ☺ from itertools import izip d = {c: v for

    (c, v) in izip(colors, values)}
  11. results = search('#codemotion', 10) # ¿qué es 10? results =

    search('#codemotion', min_retweets=10) results = search('#codemotion', limit=10)
  12. • Argumentos con nombre – ☺ Código más legible –

    ☺ Parámetros documentados – ☹ Coste en rendimiento
  13. from collections import namedtuple TestResults = namedtuple('TestResults', [ 'passed', 'failed',

    'skipped']) def run_tests(): # … return TestResults(passed, failed, skipped)
  14. • Equivalentes a las comprensiones de listas pero perezosas –

    Manipulación de secuencias en múltiples pasos – Secuencias como resultados intermedios
  15. ☹ uppercase_lines = [l.upper() for l in open('readme.md')] filtered_lines =

    [l for l in uppercase_lines if l.startswith('#')] # ¿qué pasa si readme.md es un fichero ENORME? for l in filtered_lines: print(l)
  16. ☺ uppercase_lines = (l.upper() for l in open('readme.md')) filtered_lines =

    (l for l in uppercase_lines if l.startswith('#')) # la iteración dirige la evaluación de las genexpressions for l in filtered_lines: print(l)