[Python] idio[ma]ticità

Riccardo Magliocchetti riccardo.magliocchetti a gmail.com
Lun 20 Apr 2015 15:04:40 CEST


Ciao Marco,

Il 20/04/2015 14:19, Marco De Paoli ha scritto:
> dopo il talk di Alex su codice pythonico/idiomatico...
> beh, non posso lasciar passare il seguente caso senza chiedervi un opinione
[snip]
>
> ok, show me the code!
>
>          import openpyxl as pyx
>          from .models import MyModel
>
>          CN = XLSX_COLUMN_NAMES
>
>          wb = pyx.load_workbook("sample.xlsx"))
>          ws = wb['DB']
>          columns = {c.column: CN.get(c.value) for c in ws.rows[0]}
>
>          MyModel.objects.all().delete()
>          for row in ws.rows[1:]:
>              kwargs = {columns[c.column]: c.value for c in row}
>              kwargs.pop(None)
>              MyModel(**kwargs).save()

[snip]

> E' quel kwargs.pop(None) che non mi piace
> Ci ho girato un po' intorno, ma non mi viene in mente come rimuoverlo a meno di
> introdurre degli "if" che mi piacciono ancora meno

Potevi mettere un commento sul perchè lo stai chiamando quel pop, tra un mese 
quello è un WTF assicurato. A quanto capisco io è perchè per qualche motivo ti 
ritrovi columns[c.column] a None. Questo lo fai probabilmente per prevenire di 
esplodere quando hai righe malformate con testo su colonne che non hanno 
intestazione. Se è questo non troverei vergogna a mettere un *esplicito* if 
c.column in columns nella dict comprehension di kwargs. Ma forse io non sono di 
gusti così raffinati :)

> P.P.S. boh, mi sa che vi ho dato un po' troppo contesto rispetto al problema
> vero e proprio.
> Ma diciamo che è stata anche l'occasione per citare qualche tecnologia che mi ha
> fatto comodo: openpyxl e ... Django!

hai fatto bene

-- 
Riccardo Magliocchetti
@rmistaken

http://menodizero.it


Maggiori informazioni sulla lista Python