Skip to content

Commit

Permalink
add generator example
Browse files Browse the repository at this point in the history
This addresses issue fsr#18 and adds correct syntax.
  • Loading branch information
Deric-W committed Oct 15, 2021
1 parent 46698ac commit e5a217b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 6 deletions.
8 changes: 5 additions & 3 deletions latex/slides/06_comprehensions.tex
Original file line number Diff line number Diff line change
Expand Up @@ -62,16 +62,18 @@ \section{Generators}
\begin{description}
\item[Generator] Ein Objekt, \"uber das iteriert werden kann. Wenn ein Element daraus verwendet wurde, ist es nicht mehr in dem Generatorobjekt enthalten.\\[.5cm]
\end{description}

Die grundlegende Syntax ist gleich der einer \textit{List Comprehension}.
Grundlegender Syntax: \alert{\texttt{( EXPRESSION for LAUFVARIABLE in ITERABLE (if FILTER) )}}\\
Da sich \alert{\texttt{list}} und \alert{\texttt{dict}} auch aus Iterables bauen lassen, gilt prinzipiell:\\[.25cm]

\alert{\texttt{list(EXPRESSION for VARIABLE in ITERABLE) == [EXPRESSION for VARIABLE in ITERABLE]}}\\[.25cm]
und\\[.25cm]
\alert{\texttt{dict((KEY, VALUE) for VARIABLE in ITERABLE) == \{KEY:VALUE for VARIABLE in ITERABLE\}}}\\[.25cm]

\textbf{Aber:} Generators verhalten sich anders als Lists oder Dicts!
\textbf{Aber:} Generatoren sind lazy, sie erzeugen die Elemente erst wenn sie iteriert werden.
\end{frame}

\begin{frame}{Generators - Beispiel}
\lstinputlisting{resources/06_comprehensions/generators.py}
\end{frame}


Expand Down
14 changes: 14 additions & 0 deletions latex/slides/resources/06_comprehensions/generators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# liefert gerade Zahlen von 0 bis 10 (10 nicht enthalten)
generator = (i for i in range(10) if i % 2 == 0)

# gibt 0, 2, 4, 6 und 8 aus
for number in generator:
print(number)

# gibt nichts aus, generator ist erschöpft
for number in generator:
print(number)

# wenn alle Elemente sofort erzeugt werden würde mindestens 4GB Speicher benötigt
for number in (i for i in range(2**32)):
print(number)
31 changes: 28 additions & 3 deletions md/06_comprehensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ Grundlegender Syntax:
Fast der gleiche Syntax, nur diesmal mit 2 Expressions: __KEY__ und
__VALUE__. Ansonsten gelten die gleichen Regeln.

---

## Beispiel

Expand All @@ -99,8 +100,13 @@ enthalten.

---

Die grundlegende Syntax ist gleich der einer *List Comprehension*. Da
sich `list` und `dict` auch aus Iterables bauen lassen, gilt prinzipiell:
Grundlegender Syntax:

```python
(EXPRESSION for LAUFVARIABLE in ITERABLE (if FILTER))
```

Da sich `list` und `dict` auch aus Iterables bauen lassen, gilt prinzipiell:

```python
list(EXPR for VAR in ITERABLE) == [EXPR for VAR in ITERABLE]
Expand All @@ -110,6 +116,25 @@ und
dict((KEY, VAL) for VAR in ITERABLE) == {KEY: VAL for VAR in ITERABLE}
```

**Aber:** Generatoren sind lazy, sie erzeugen die Elemente erst wenn sie iteriert werden.

---

**Aber:** Generators verhalten sich anders als Lists oder Dicts!
## Beispiel

```python
# liefert gerade Zahlen von 0 bis 10 (10 nicht enthalten)
generator = (i for i in range(10) if i % 2 == 0)

# gibt 0, 2, 4, 6 und 8 aus
for number in generator:
print(number)

# gibt nichts aus, generator ist erschöpft
for number in generator:
print(number)

# wenn alle Elemente sofort erzeugt werden würde mindestens 4GB Speicher benötigt
for number in (i for i in range(2**32)):
print(number)
```

0 comments on commit e5a217b

Please sign in to comment.