[pyar] Cuestión de elegancia (?)

Hystrix ego en hystrix.com.ar
Mie Mayo 30 00:11:47 ART 2012


2012/5/26 Claudio <claudiobidau en gmail.com>:
> Hola!
> Tengo un código que funciona pero es horrible (sobre todo la linea del
> 'for') y me gustaría saber si existe alguna forma mas elegante de
> escribirlo.
>
> En la vista tengo lo siguiente (es el post de un form):
>
>     post = Post()
>
>     for tag_name in set(map(lambda tag:tag.strip(),
> form.tags.data.split(','))):
>       if len(tag_name) > 0:
>         t = Tag.query.filter_by(name=tag_name).first() or Tag(tag_name)
>         post.tags.append(t)
>
>     db.session.add(post)
>     db.session.commit()
>
> form.tags.data es un string separado por comas que puede traer cualquier
> verdura. Lo separo, le saco los espacios en blanco, quito los repetidos y
> por último chequeo si ya lo tengo en la base de datos. Increíblemente
> funciona
>
> Otra opción que encontre por ahi fue meter la "lógica guarda tags"
> directamente en el modelo pero no se si es lo correcto :S
>
> Saludos y muchas gracias
>
> Claudio

Supongo que hay mucho de gusto personal, yo lo separaría un poco más
en lugar de juntar todo en una sola linea. Tambien hice una funcion
para limpiar el tag, en tu caso por ahora es innecesario pero
eventualmente podes querer hacer otras cosas además de strip como
pasar todo a minuscula, eliminar caracteres no alfabeticos, etc.
Si usas Python >= 2.7 podes aprovechar set comprehension que son como
list comprehension pero con llaves y generan un set en lugar de una
lista.

    tags = 'animal, reptil, , anfibio , peligroso'

    def clean_tag(tag):
        return tag.strip()

    all_tags = tags.split(',')
    for tag_name in {map(clean_tag, all_tags)}:
        if tag_name:
            print tag_name


-- 
Hystrix



More information about the pyar mailing list