Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4e4d125

Browse files
committed
Add python-types.md to german translation
1 parent 83777f0 commit 4e4d125

2 files changed

Lines changed: 315 additions & 0 deletions

File tree

docs/de/docs/python-types.md

Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
# Einführung in Python-Typen
2+
3+
Python unterstützt die optionalen "type hints".
4+
5+
Diese **"type hints"** sind eine spezielle Syntax, die es erlaubt, den <abbr title="zum Beispiel: str, int, float, bool">Typ</abbr> einer Variablen zu deklarieren.
6+
7+
Durch das Deklarieren von Typen für Ihre Variablen können Editoren und Tools bessere Unterstützung bieten.
8+
9+
Dies ist nur eine **schnelle Anleitung / Auffrischung** über Pythons Typ-Hinweise. Es deckt nur das Minimum ab, das nötig ist, um sie mit **FastAPI** zu verwenden... was eigentlich sehr wenig ist.
10+
11+
**FastAPI** basiert komplett auf diesen Typ-Hinweisen, sie geben der Anwendung viele Vorteile und Möglichkeiten.
12+
13+
Aber selbst wenn Sie **FastAPI** nie verwenden, würden Sie davon profitieren, ein wenig über sie zu lernen.
14+
15+
!!! note
16+
Wenn Sie ein Python-Experte sind und bereits alles über Typ-Hinweise wissen, überspringen Sie das nächste Kapitel.
17+
18+
## Motivation
19+
20+
Fangen wir mit einem einfachen Beispiel an:
21+
22+
```Python
23+
{!../../../docs_src/python_types/tutorial001.py!}
24+
```
25+
26+
Der Aufruf dieses Programms liefert die Ausgaben:
27+
28+
```
29+
John Doe
30+
```
31+
32+
Die Funktion bewirkt das Folgende:
33+
34+
* Nimmt einen `first_name` und `last_name`.
35+
* Konvertiert den ersten Buchstaben von jedem in Großbuchstaben mit `title()`.
36+
* <abbr title="Fügt sie zusammen, als eins. Mit dem Inhalt des einen nach dem anderen.">Verkettet sie mit einem Leerzeichen in der Mitte</abbr>.
37+
38+
```Python hl_lines="2"
39+
{!../../../docs_src/python_types/tutorial001.py!}
40+
```
41+
42+
### Bearbeite es
43+
44+
Es ist ein sehr einfaches Programm.
45+
46+
Aber nun stellen Sie sich vor, Sie würden es von Grund auf neu schreiben.
47+
48+
Irgendwann hätten Sie mit der Definition der Funktion begonnen, Sie hätten die Parameter parat...
49+
50+
Aber dann müssen Sie "die Methode aufrufen, die den ersten Buchstaben in Großbuchstaben umwandelt".
51+
52+
Was es `upper`? Was es `uppercase`? `first_uppercase`? `capitalize`?
53+
54+
Dann versuchen Sie es mit dem langjährigen Freund des Programmierers, der Editor-Autovervollständigung.
55+
56+
Sie geben den ersten Parameter der Funktion ein, `first_name`, dann einen Punkt (`.`) und drücken dann `Strg+Leertaste`, um die Vervollständigung auszulösen.
57+
58+
Aber leider erhalten Sie nichts Nützliches:
59+
60+
<img src="/img/python-types/image01.png">
61+
62+
### Typen hinzufügen
63+
64+
Lassen Sie uns eine einzelne Zeile aus der vorherigen Version ändern.
65+
66+
Wir werden genau diesen Teil, die Parameter der Funktion, ändern von:
67+
68+
```Python
69+
first_name, last_name
70+
```
71+
72+
zu:
73+
74+
```Python
75+
first_name: str, last_name: str
76+
```
77+
78+
Das war's.
79+
80+
Das sind die "Typ-Hinweise":
81+
82+
```Python hl_lines="1"
83+
{!../../../docs_src/python_types/tutorial002.py!}
84+
```
85+
86+
Das ist nicht dasselbe wie das Deklarieren von Standardwerten, wie es bei hier der Fall wäre:
87+
88+
```Python
89+
first_name="john", last_name="doe"
90+
```
91+
92+
Das ist eine andere Sache.
93+
94+
Wir verwenden Doppelpunkte (`:`), nicht Gleichheitszeichen (`=`).
95+
96+
Und das Hinzufügen von Typ-Hinweisen ändert normalerweise nichts an dem, was ohne sie passieren würde.
97+
98+
Aber jetzt stellen Sie sich vor, Sie sind wieder mitten in der Erstellung dieser Funktion, aber mit Typ-Hinweisen.
99+
100+
An der gleichen Stelle versuchen Sie, die Autovervollständigung mit "Strg+Leertaste" auszulösen, und Sie sehen:
101+
102+
<img src="/img/python-types/image02.png">
103+
104+
Damit können Sie durch die Optionen blättern, bis Sie diejenige finden, bei der es "Klick" macht:
105+
106+
<img src="/img/python-types/image03.png">
107+
108+
## Mehr Motivation
109+
110+
Prüfen Sie diese Funktion, sie hat bereits Typ-Hinweise:
111+
112+
```Python hl_lines="1"
113+
{!../../../docs_src/python_types/tutorial003.py!}
114+
```
115+
116+
Da der Editor die Typen der Variablen kennt, erhalten Sie nicht nur eine Vervollständigung, sondern auch eine Fehlerprüfung:
117+
118+
<img src="/img/python-types/image04.png">
119+
120+
Da Sie nun wissen, dass Sie das Problem beheben müssen, konvertieren Sie `age` mit `str(age)` in eine Zeichenkette:
121+
122+
```Python hl_lines="2"
123+
{!../../../docs_src/python_types/tutorial004.py!}
124+
```
125+
126+
## Deklarieren von Typen
127+
128+
Sie haben gerade den wichtigsten Einsatzort für die Deklaration von Typ-Hinweisen gesehen. Als Funktionsparameter.
129+
130+
Dies ist auch der häufigste Bereich, in dem sie mit **FastAPI** verwendet werden.
131+
132+
### Einfache Typen
133+
134+
Sie können alle Standard Python-Typen deklarieren, nicht nur `str`.
135+
136+
Sie können z.B. folgende verwenden:
137+
138+
* `int`
139+
* `float`
140+
* `bool`
141+
* `bytes`
142+
143+
```Python hl_lines="1"
144+
{!../../../docs_src/python_types/tutorial005.py!}
145+
```
146+
147+
### Generische Typen mit Typ-Parametern
148+
149+
Es gibt einige Datenstrukturen, die andere Werte enthalten können, wie `dict`, `list`, `set` und `tuple`. Und die internen Werte können auch ihren eigenen Typ haben.
150+
151+
Um diese Typen und die internen Typen zu deklarieren, können Sie das Standard Python-Modul `typing` verwenden.
152+
153+
Es existiert speziell für die Unterstützung dieser Typ-Hinweise.
154+
155+
#### `List`
156+
157+
Definieren wir zum Beispiel eine Variable, die eine `list` von `str` sein soll.
158+
159+
Von `typing`, importieren wir `List` (mit dem Großbuchstaben `L`):
160+
161+
```Python hl_lines="1"
162+
{!../../../docs_src/python_types/tutorial006.py!}
163+
```
164+
165+
Deklarieren Sie die Variable, mit der gleichen Doppelpunkt (`:`) Syntax.
166+
167+
Als Typ geben Sie `List` an.
168+
169+
Da die Liste ein Typ ist, der einige interne Typen enthält, setzen Sie diese in eckige Klammern:
170+
171+
```Python hl_lines="4"
172+
{!../../../docs_src/python_types/tutorial006.py!}
173+
```
174+
175+
!!! tip
176+
Die internen Typen in den eckigen Klammern werden als "Typparameter" bezeichnet.
177+
178+
In diesem Fall ist `str` der Typparameter, der an `List` übergeben wird.
179+
180+
Das bedeutet: "die Variable `items` ist eine `list`, und jedes der Elemente in dieser Liste ist ein `str`".
181+
182+
Auf diese Weise kann Ihr Editor auch bei der Bearbeitung von Einträgen aus der Liste unterstützen:
183+
184+
<img src="/img/python-types/image05.png">
185+
186+
Ohne Typen ist das fast unmöglich zu erreichen.
187+
188+
Beachten Sie, dass die Variable `item` eines der Elemente in der Liste `items` ist.
189+
190+
Und trotzdem weiß der Editor, dass es sich um eine `str` handelt, und bietet entsprechende Unterstützung.
191+
192+
#### `Tuple` und `Set`
193+
194+
Das Gleiche gilt für die Deklaration von `Tuple` und `Set`:
195+
196+
```Python hl_lines="1 4"
197+
{!../../../docs_src/python_types/tutorial007.py!}
198+
```
199+
200+
Das bedeutet:
201+
202+
* Die Variable `items_t` ist ein `Tupel` mit 3 Elementen, einem `int`, einem weiteren `int` und einem `str`.
203+
* Die Variable `items_s` ist ein `set`, und jedes ihrer Elemente ist vom Typ `bytes`.
204+
205+
#### `Dict`
206+
207+
Um ein `dict` zu definieren, übergeben Sie 2 Typ-Parameter, getrennt durch Kommas.
208+
209+
Der erste Typ-Parameter ist für die Schlüssel des `dict`.
210+
211+
Der zweite Typ-Parameter ist für die Werte des `dict`:
212+
213+
```Python hl_lines="1 4"
214+
{!../../../docs_src/python_types/tutorial008.py!}
215+
```
216+
217+
Dies bedeutet:
218+
219+
* Die Variable `prices` ist ein `dict`:
220+
* Die Schlüssel dieses `dict` sind vom Typ `str` (z.B. die Namen der einzelnen Artikel).
221+
* Die Werte dieses `dict` sind vom Typ `float` (z.B. der Preis jedes Artikels).
222+
223+
#### `Optional`
224+
225+
Sie können auch `Optional` verwenden, um zu deklarieren, dass eine Variable einen Typ hat, wie z. B. `str`, aber dass sie "optional" ist, was bedeutet, dass sie auch `None` sein könnte:
226+
227+
```Python hl_lines="1 4"
228+
{!../../../docs_src/python_types/tutorial009.py!}
229+
```
230+
231+
Wenn Sie `Optional[str]` statt nur `str` verwenden, kann der Editor Ihnen helfen, Fehler zu erkennen, bei denen Sie davon ausgehen, dass ein Wert immer ein `str` ist, obwohl er eigentlich auch `None` sein könnte.
232+
233+
#### Generische Typen
234+
235+
Diese Typen, die Typparameter in eckigen Klammern akzeptieren, wie:
236+
237+
* `List`
238+
* `Tuple`
239+
* `Set`
240+
* `Dict`
241+
* `Optional`
242+
* ...und andere.
243+
244+
werden **Generische Typen** oder **Generics** genannt.
245+
246+
### Klassen als Typen
247+
248+
Sie können auch eine Klasse als Typ einer Variablen deklarieren.
249+
250+
Nehmen wir an, Sie haben eine Klasse `Person`, mit einem Namen:
251+
252+
```Python hl_lines="1-3"
253+
{!../../../docs_src/python_types/tutorial010.py!}
254+
```
255+
256+
Dann können Sie eine Variable vom Typ `Person` deklarieren:
257+
258+
```Python hl_lines="6"
259+
{!../../../docs_src/python_types/tutorial010.py!}
260+
```
261+
262+
Und dann bekommen Sie wieder die volle Editorunterstützung:
263+
264+
<img src="/img/python-types/image06.png">
265+
266+
## Pydantic models
267+
268+
<a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> ist eine Python-Bibliothek zur Durchführung von Datenvalidierung.
269+
270+
Sie deklarieren die "Form" der Daten als Klassen mit Attributen.
271+
272+
Und jedes Attribut hat einen Typ.
273+
274+
Dann erzeugen Sie eine Instanz dieser Klasse mit einigen Werten, und sie validiert die Werte, konvertiert sie in den passenden Typ (wenn das der Fall ist) und gibt Ihnen ein Objekt mit allen Daten.
275+
276+
Und Sie erhalten die gesamte Editor-Unterstützung mit diesem resultierenden Objekt.
277+
278+
Entnommen aus den offiziellen Pydantic-Dokumenten:
279+
280+
```Python
281+
{!../../../docs_src/python_types/tutorial011.py!}
282+
```
283+
284+
!!! info
285+
Um mehr über <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic zu erfahren, schauen Sie in die Dokumentation</a>.
286+
287+
Die **FastAPI** basiert komplett auf Pydantic.
288+
289+
Viel mehr von all dem in der Praxis werden Sie im [Tutorial - Benutzerhandbuch](tutorial/index.md){.internal-link target=_blank} sehen.
290+
291+
## Typ-Hinweise in **FastAPI**
292+
293+
**FastAPI** macht sich diese Typ-Hinweise zunutze, um mehrere Dinge zu tun.
294+
295+
Mit **FastAPI** deklarieren Sie Parameter mit Typ-Hinweisen und Sie erhalten:
296+
297+
* **Editor-Unterstützung**.
298+
* **Typ-Prüfungen**.
299+
300+
...und **FastAPI** setzt die gleichen Deklarationen ein, um:
301+
302+
* **Anforderungen** definieren: aus Anfragepfad-Parametern, Abfrageparametern, Headern, Bodies, Abhängigkeiten, etc.
303+
* **Daten umwandeln**: aus der Anfrage in den erforderlichen Typ.
304+
* **Daten validieren**: aus jeder Anfrage:
305+
* **Automatische Fehler** generieren, die an den Client zurückgegeben werden, wenn die Daten ungültig sind.
306+
* **Dokumentieren** der API mit OpenAPI:
307+
* die dann von den Benutzeroberflächen der automatischen interaktiven Dokumentation verwendet wird.
308+
309+
Das mag alles abstrakt klingen. Machen Sie sich keine Sorgen. Sie werden all dies in Aktion sehen im [Tutorial - Benutzerhandbuch](tutorial/index.md){.internal-link target=_blank}.
310+
311+
Das Wichtigste ist, dass **FastAPI** durch die Verwendung von Standard-Python-Typen an einer einzigen Stelle (anstatt weitere Klassen, Dekoratoren usw. hinzuzufügen) einen Großteil der Arbeit für Sie erledigen wird.
312+
313+
!!! info
314+
Wenn Sie bereits das ganze Tutorial durchgearbeitet haben und mehr über Typen erfahren wollen, dann ist eine gute Ressource <a href="https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html" class="external-link" target="_blank">der "cheat sheet" von `mypy`</a>.

docs/de/mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ nav:
5353
- zh: /zh/
5454
- features.md
5555
- fastapi-people.md
56+
- python-types.md
5657
markdown_extensions:
5758
- toc:
5859
permalink: true

0 commit comments

Comments
 (0)