L’obiettivo? Poter riscrivere qualsiasi loop tramite comprehensions. Perché? Parlando non-stop di tutte le funzionalità delle comprehension e del walrus operator, vi convincerò (facilmente!) che conoscere alcuni aspetti di Python al punto di abusarne vi aiuterà nello sviluppo di ogni giorno.
La struttura del talk sarà basata sul riscrivere snippet sempre più lunghi di codice apparentemente normale in comprehension non altrettanto normali.
E vi giuro che è una buona idea. Per esempio, questo ci darà modo di parlare di:
E.g.: sapreste distinguere tra [[x+y for y in range(10)] for x in range(10)]
e [x+y for y in range(10) for x in range(10)]
?
E.g.: cosa succede se rimuovete le []
da sum([x for x in range(10)])
? Funziona comunque?
E.g.: sapreste dire quale delle seguenti linee sono corrette e, in caso, come correggerle?
function(function := print)
assert ((value := 5) if value else 3) == 5
print(*[value := x for x in range(5)], sep=str(value))
E.g.: sapreste re-implementare tutte le funzioni built-in per dizionari in una sola riga?
and
perché possono confondervi or
rendere il codice più chiaro!E.g.: qual è il valore di a
dopo aver eseguito questa linea?
((a := 5) and (a := 0) or (a := a + 1)) and ((a := a + 1) and (a - 2) and (a := 5))
Eccetera. Si, tutti questi esempi sono costruiti ad arte per essere intenzionalmente incomprensibili; ma saperli comprendere tornerà utile quando incontrerete del codice inavvertitamente incomprensibile.