Prevod Marko Mitic

1.str

                                                                                                                                                        8.4. PRAVLJENJE IZJAVA

Poput mnogih programskih jezika, Python ima assert iskaz.Evo kako to funkcioniše.

>>>   assert 1 + 1 == 2                                                   ①

>>>   assert 1 + 1 == 3                                                   ②

Traceback (most recent call last):

   File "<stdin>", line 1, in <module>

AssertionError

>>> assert 2 + 2 == 5, "Only for very large values of 2" ③

Traceback (most recent call last):

   File "<stdin>", line 1, in <module>

AssertionError: Only for very large values of 2

1. assert iskaz prati svaki važeći Python izraz.U ovom slučaju, izraz 1  +  1 = = 2 daje vrednost TRUE, tako da naredba assert ne radi ništa.

2. Međutim, ako je Python izraz False, assert iskaz o sistemu će izazvati AssertionError.

3. Takođe, možete da uključite i poruku koju čovek može pročitati, i isprintaće se ako je došlo do AssertionError-a.

Sledi, da ova linija koda:

assert len(unique\_characters) <= 10, 'Too many letters'

raise AssertionError('Too many letters')

Alphametics programski dodatak koristi ovaj assert iskaz da bi se ranije prekinuo program ako slagalica sadrži više od deset jedinstvenih karaktera.Pošto se svakom pismu dodeljuje jedinstvena cifra, a postoji samo deset cifara, slagalica sa više od deset jedinstvenih pisama ne može da ima rešenje.

                                                                                                                                                                               2.str

                                                                                                                                                             8.5 GENERATORSKI IZRAZI

Generatorski izraz je nalik generatorskoj funkciji samo bez funkcije.

>>> unique\_characters = {'E',  'D' ,  'M' ,  'O' ,  'N' ,  'S' ,  'R' ,  'Y' }

>>> gen = (ord(c) for c in unique\_characters)    ①

>>> gen                                                              ②

<generator object <genexpr> at 0x00BADC10>

>>> next(gen)                                                     ③

69

>>> next(gen)

68

>>> tuple(ord(c) for c in unique\_characters)      ④

(69, 68, 77, 79, 78, 83, 82, 89)

1. Generatorski izraz je nalik anonimnoj funkciji koja daje vrednosti. Izraz izgleda kao da je lista shvatavanja, ali je umotana u običnim umesto uglastim zagradama.

2. Generatorski izraz  vraća... iterator.

3. Pozivanje next(gen) vraća sledeću vrednost od iteratora.

4. Ako želite, možete da probate da vršite iteraciju kroz sve moguće vrednosti i da vratite neku kombinaciju, listu ili skup, tako što ćete proslediti generatorski izraz kroz tuple(), list() ili set().U ovim slučajevima vam nije potreban dodatni skup zagrada – samo predajte "nag" izraz ord(c) for c in unique\_characters funkciji tuple(), i Python je shvatio da je to generatorski izraz.

☞Korišćenje generatorskog izraza umesto liste shvatavanja može da vam štedi i CPU i RAM-a.

Ako kreirate listu samo da biste je bacili  (npr.prosleđujući ga tuple() ili set() funkciji), koristite generatorski izraz.

Evo još jednog načina kako da ostvarite istu stvar, koristeći generatorsku funkciju:

            yield ord(c)

gen = ord\_map(unique\_characters)

Generatorska funkicja je više kompaktna ali funkcionalno ista.