diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..3a626c3a
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,6 @@
+version: 2
+updates:
+ - package-ecosystem: github-actions
+ directory: /
+ schedule:
+ interval: monthly
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ee1fbe84..a88c88aa 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -22,10 +22,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
+ - uses: pandoc/actions/setup@v1
- uses: actions/setup-python@v5
with:
# Keep in sync with .readthedocs.yaml
python-version-file: .python-version
+ - name: Install plantuml
+ run: |
+ sudo apt install plantuml
- name: Setup cached uv
uses: hynek/setup-cached-uv@v2
- name: Create venv and install docs dependencies
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index d2f0721c..fc103c8d 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -19,25 +19,25 @@ repos:
- id: sphinx-lint
types: [rst]
- repo: https://github.com/pycqa/isort
- rev: 5.13.2
+ rev: 6.0.1
hooks:
- id: isort
additional_dependencies: ["toml"]
entry: isort --profile=black
name: isort (python)
- repo: https://github.com/psf/black
- rev: 24.10.0
+ rev: 25.1.0
hooks:
- id: black
- repo: https://github.com/adamchainz/blacken-docs
- rev: "1.19.0"
+ rev: "1.19.1"
hooks:
- id: blacken-docs
args: [--line-length=79]
additional_dependencies:
- black
- repo: https://github.com/codespell-project/codespell
- rev: v2.3.0
+ rev: v2.4.1
hooks:
- id: codespell
- repo: local
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 793af89f..b20a0ceb 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,55 +1,199 @@
Changelog
=========
-The versions follow `Semantic Versioning `_:
-``MAJOR.MINOR.PATCH``.
+Alle nennenswerten Änderungen an diesem Projekt werden in dieser Datei
+dokumentiert.
-``MAJOR``
- is increased when incompatible changes are published.
-``MINOR``
- is increased when new compatible functionalities are released.
-``PATCH``
- is increased if the changes include only compatible bug fixes.
+Das Format basiert auf `Keep a Changelog
+`_ und dieses Projekt hält sich an
+`Calendar Versioning `_.
-.. _changelog
+Die erste Zahl der Version ist das Jahr. Die zweite Zahl wird mit jeder Version
+erhöht, beginnend bei 1 für jedes Jahr. Die dritte Zahl ist für Notfälle, wenn
+wir Zweige für ältere Versionen starten müssen.
-24.2.0
+.. unreleased
+
+`Unreleased `_
+---------------------------------------------------------------------------------------
+
+`25.1.0 `_
+-------------------------------------------------------------------------------------
+
+Added
+~~~~~
+
+* 📝 Add type hints
+* 👥 Add license and acknowledgement
+* 📝 Add logging section from Python4DataScience
+* 🔧 📝 Add social media support
+
+ * Add OpenGraph tag for mastodon
+ * Add social media links
+
+* 📝 Add PyPI digital attestations
+* 📝 Add tip for a stride of -1
+* 📝 Add What’s new?
+* 📝 Add conversion to reST
+
+Changed
+~~~~~~~
+
+* 📝 Update cookiecutter templates
+
+ * Add badges
+ * Remove deprecated templates
+ * Add Jupyter Notebook section
+
+* 📝 Update glossary
+
+ * Add constant, singleton and immutable objects
+
+* 📝 Update uv sections
+
+ * Reproducing and updating uv environments
+
+* 🎨 Rearrange glossaries
+* 📝 Update conda term
+* 📝 Update GitLab package registry
+* 📝 Expand the pytest plugins section
+* 📝 Rearrange functions section
+* 📝 Update installation of freethreaded Python
+* 📝 Expand the contextmanager section
+* 🎨 Restructure the documentation
+
+ * Move packages outside libraries
+ * Move apps in packages
+ * Remove unittest2
+ * Move doctests to Sphinx
+ * Move the sqlite database test to unittest
+ * Move Sphinx to a subchapter
+
+Removed
+~~~~~~~
+
+* Remove OOP design
+
+`24.3.0 `_
+-------------------------------------------------------------------------------------
+
+Added
+~~~~~
+
+* 📝 Add humanize
+* 📝 Add testing code to documentation
+* 📝 Add bump-my-version
+* 📝 Add vale
+* 📝 Add codespell
+* 📝 Add checks
+* 📝 Add LBYL and EAFP to exceptions
+* 📝 Add the series of tutorials and trainings
+* 📝 Adopt SOLID principles from Python4DataScience
+
+Changed
+~~~~~~~
+
+* 📝 Update description for init files
+* 📝 Update pytest plugins
+
+ * Add pytest-freethreaded to plugins for modified test sequences
+ * Add pytest-edit to modified output plugins
+ * Add playwright and pyleniumio to web dev plugins
+ * Add pytest-patterns to various plugins
+ * Remove pytest-splinter, pytest-mimesis and pytest-freezegun
+
+* 📝 Switch to uv for building envs, packaging etc.
+
+ * Install different Python versions in parallel including PyPy and
+ free-threaded Python 3.13.
+ * Add tox-uv
+ * Publishing packages
+ * Update uv.lock file with a pre-commit hook
+
+* 📝 Update cibuildwheel
+* 👷 Switch to uv in ci
+* 📝 Switch to .venv directory
+* 📝 Update to Python 3.13
+* 🔧 Switch to pyproject.toml
+* 📝 Rearrange documentation tests
+* 📝 Extend documentation of the string type
+* 📝 Extend documentation of the tuple type
+* 📝 Extend documentation of the list type
+* 📝 Add sphinx-issues
+* 📝 Add direnv tip
+* 📝 Update instructions for installing packages
+* 📝 Add proxy config for PyPI
+
+Fixed
+~~~~~
+
+* 📝 Fix coverage pipeline
+* ✏️ Workaround for pytest lexer warnings
+
+`24.2.0 `_
+-------------------------------------------------------------------------------------
+
+Added
+~~~~~
-* 📝 Update Python on mobile devices
* 📝 Add design patterns
-* 📝 Update Tiobe Index
* 📝 Add frozenset
* 📝 Add git filter for pytest
* 📝 Add interrogate for docstring coverage
+
+Changed
+~~~~~~~
+
+* 📝 Update Python on mobile devices
+* 📝 Update Tiobe Index
* 📝 Expand section for testing the documentation
-24.1.0
+`24.1.0 `_
+-------------------------------------------------------------------------------------
+
+Added
+~~~~~
* 🌱 Add matplotlib for social cards
-* 🔧 Use git tag for versioning the docs
* 📝 Add links for strftime
+* 📝 Add link to dataclasses
+* 📝 Add exclude_also to coverage configs
+
+Changed
+~~~~~~~
+
+* 🔧 Use git tag for versioning the docs
* 📝 Update None type
* 📝 Update the review of values and identity
* 📝 Update comparative expressions
* 📝 Update dataprep example
-* 🎨 pre-commit fixes
-* 📝 Add link to dataclasses
-* 📝 Update publishining gpackages
+* 📝 Update publishining packages
* Add trusted publisher
-* 📝 Add exclude_also to coverage configs
+Fixed
+~~~~~
+
+* 🎨 pre-commit fixes
+
+`v1.0.0 `_: 2023-11-28
+-------------------------------------------------------------------------------------------------------------------------
+
+Added
+~~~~~
-1.0.0
+* 📝 Add dataclasses
+* 📝 Add striding and link to slicing with pandas
+* 📝 Add lambda functions
+
+Changed
+~~~~~~~
* 🔖 Update to 1.0.0, add changelog
* 💄 Switch to furo theme
-* 📝 Add dataclasses
* 📝 Switch to intersphinx links
* 📝 Add note to Unicode help
* 📝 Add link to pandas I/O tools and examples for serialisation files
-* 📝 Add striding and link to slicing with pandas
-* 📝 Add lambda functions
* 📝 Update dicts type
* Add setdefault
diff --git a/README.rst b/README.rst
index 6f5ac46c..ddece280 100644
--- a/README.rst
+++ b/README.rst
@@ -117,7 +117,13 @@ Installation
Folgt uns
---------
+.. _follow-us:
+
* `GitHub `_
+* `Mastodon `_
+* `Bluesky `_
+
+.. _end-follow-us:
Pull-Requests
-------------
diff --git a/docs/_static/css/cusy.css b/docs/_static/css/cusy.css
new file mode 100644
index 00000000..2cf30257
--- /dev/null
+++ b/docs/_static/css/cusy.css
@@ -0,0 +1,12 @@
+.accelerator {
+ text-decoration: underline;
+}
+
+.field-list dt,
+.option-list dt,
+dl.footnote dt,
+dl.glossary dt,
+dl.simple dt,
+dl:not([class]) dt {
+ font-weight: 700;
+}
diff --git a/docs/_templates/base.html b/docs/_templates/base.html
new file mode 100644
index 00000000..c65a9139
--- /dev/null
+++ b/docs/_templates/base.html
@@ -0,0 +1,105 @@
+
+
+
+ {%- block site_meta -%}
+
+
+
+
+
+ {%- if metatags %}{{ metatags }}{% endif -%}
+
+ {%- block linktags %}
+ {%- if hasdoc('about') -%}
+
+ {%- endif -%}
+ {%- if hasdoc('genindex') -%}
+
+ {%- endif -%}
+ {%- if hasdoc('search') -%}
+
+ {%- endif -%}
+ {%- if hasdoc('copyright') -%}
+
+ {%- endif -%}
+ {%- if next -%}
+
+ {%- endif -%}
+ {%- if prev -%}
+
+ {%- endif -%}
+ {#- rel="canonical" (set by html_baseurl) -#}
+ {%- if pageurl %}
+
+ {%- endif %}
+ {%- endblock linktags %}
+
+ {# Favicon #}
+ {%- if favicon_url -%}
+
+ {%- endif -%}
+
+
+
+ {%- endblock site_meta -%}
+
+ {#- Site title -#}
+ {%- block htmltitle -%}
+ {% if not docstitle %}
+ {{ title|striptags|e }}
+ {% elif pagename == master_doc %}
+ {{ docstitle|striptags|e }}
+ {% else %}
+ {{ title|striptags|e }} - {{ docstitle|striptags|e }}
+ {% endif %}
+ {%- endblock -%}
+
+ {%- block styles -%}
+
+ {# Custom stylesheets #}
+ {%- block regular_styles -%}
+ {%- for css in css_files -%}
+ {% if css|attr("filename") -%}
+ {{ css_tag(css) }}
+ {%- else -%}
+
+ {%- endif %}
+ {% endfor -%}
+ {%- endblock regular_styles -%}
+
+ {#- Theme-related stylesheets -#}
+ {%- block theme_styles %}
+ {% include "partials/_head_css_variables.html" with context %}
+ {%- endblock -%}
+
+ {%- block extra_styles %}
+ {%- endblock -%}
+
+ {%- endblock styles -%}
+
+ {#- Custom front matter #}
+ {%- block extrahead -%}{%- endblock -%}
+
+
+ {% block body %}
+
+ {% endblock %}
+
+ {%- block scripts -%}
+
+ {# Custom JS #}
+ {%- block regular_scripts -%}
+ {% for path in script_files -%}
+ {{ js_tag(path) }}
+ {% endfor -%}
+ {%- endblock regular_scripts -%}
+
+ {# Theme-related JavaScript code #}
+ {%- block theme_scripts -%}
+ {%- endblock -%}
+
+ {%- endblock scripts -%}
+
+
diff --git a/docs/appendix/checks.rst b/docs/appendix/checks.rst
index 7c92da06..61563d19 100644
--- a/docs/appendix/checks.rst
+++ b/docs/appendix/checks.rst
@@ -52,12 +52,12 @@ Checks
✅ ok, aber sehr lang und daher nur zu empfehlen, wenn zwischen vielen
sehr ähnlichen Variablen unterschieden werden soll
-:doc:`/types/numbers`
----------------------
+:doc:`/types/numbers/index`
+---------------------------
* Erstellt einige Zahlenvariablen (Ganzzahlen, Gleitkommazahlen und komplexe
Zahlen). Experimentiert ein wenig damit, was passiert, wenn ihr Operationen
- mit ihnen durchführt, auch typübergreifend.
+ mit ihnen durchführt, auch Typ-übergreifend.
.. blacken-docs:off
@@ -83,6 +83,9 @@ Checks
.. blacken-docs:on
+:doc:`/types/numbers/complex`
+-----------------------------
+
* Ladet das Modul :mod:`math` und probiert einige der Funktionen aus. Ladet dann
auch das Modul :mod:`cmath` und macht dasselbe.
@@ -103,6 +106,9 @@ Checks
>>> sqrt(3)
1.7320508075688772
+:doc:`/types/numbers/bool`
+--------------------------
+
* Entscheidet, ob die folgenden Aussagen wahr oder falsch sind:
* ``1`` → True
@@ -112,8 +118,8 @@ Checks
* ``1 and 0`` → False
* ``1 > 0 or []`` → True
-:doc:`/types/lists`
--------------------
+:doc:`/types/sequences-sets/lists`
+----------------------------------
* Was gibt :func:`len` für jeden der folgenden Fälle zurück:
@@ -164,8 +170,8 @@ Checks
.. note::
Mit diesem Code wird nur das erste Vorkommen von ``i`` entfernt. Um alle
Vorkommen von ``i`` aus der Liste zu entfernen, könnte die Liste
- :abbr:`z.B. (zum Beispiel)` in den :doc:`Set `-Typ umgewandelt
- werden:
+ :abbr:`z.B. (zum Beispiel)` in den :doc:`Set
+ `-Typ umgewandelt werden:
.. code-block:: pycon
@@ -175,6 +181,8 @@ Checks
...
>>> l = list(l)
+ Dies ändert jedoch auch die Reihenfolge der Elemente.
+
* Wenn ihr eine verschachtelte Liste ``ll`` habt, wie könnt ihr eine Kopie
``nll`` dieser Liste erhalten, in der ihr die Elemente ändern könnt, ohne den
Inhalt von ``ll`` zu verändern?
@@ -198,8 +206,8 @@ Checks
* Welche anderen Optionen könntet ihr neben der expliziten Überprüfung des Typs
haben?
-:doc:`/types/tuples`
---------------------
+:doc:`/types/sequences-sets/tuples`
+-----------------------------------
* Erläutert, warum die folgenden Operationen nicht auf das Tuple ``t``
angewendet werden können:
@@ -217,8 +225,8 @@ Checks
>>> sorted(t)
-:doc:`/types/sets`
-------------------
+:doc:`/types/sequences-sets/sets`
+---------------------------------
* Wieviele Elemente hat ein Set, wenn es aus der folgenden Liste
``[4, 2, 3, 2, 1]`` gebildet wird?
@@ -268,9 +276,9 @@ Checks
>>> d[("Veit", "Tim", "Monique")] = None
* Ihr könnt ein :doc:`Dictionary ` verwenden, und das wie ein
- Tabelle einer Tabellenkalkulation verwenden, indem ihr :doc:`/types/tuples`
- als Schlüssel Zeilen- und Spaltenwerte verwendet. Schreibt Beispielcode, um
- Werte hinzuzufügen und wieder abzufragen.
+ Tabelle einer Tabellenkalkulation verwenden, indem ihr
+ :doc:`/types/sequences-sets/tuples` als Schlüssel Zeilen- und Spaltenwerte
+ verwendet. Schreibt Beispielcode, um Werte hinzuzufügen und wieder abzufragen.
.. code-block:: pycon
@@ -282,8 +290,17 @@ Checks
>>> print(sheet[("A", 1)])
2
-:doc:`/types/strings`
----------------------
+* Wie könnt ihr alle Dubletten aus einer Liste entfernen **ohne** die
+ Reihenfolge der Elemente in der Liste zu ändern?
+
+ Hierfür können die Schlüssel eines :doc:`/types/dicts` verwendet werden:
+
+ .. code-block:: pycon
+
+ >>> list(dict.fromkeys(l))
+
+:doc:`/types/strings/index`
+---------------------------
* Könnt ihr :abbr:`z.B. (zum Beispiel)` eine Zeichenkette mit einer ganzen Zahl
addieren oder multiplizieren, oder mit einer Gleitkommazahl oder einer
@@ -309,15 +326,8 @@ Checks
File "", line 1, in
TypeError: can't multiply sequence by non-int of type 'complex'
-* Wie könnt ihr eine Überschrift wie ``variables and expressions`` so abändern,
- dass sie statt Leerzeichen Bindestriche enthält und so besser als Dateinamen
- verwendet werden kann?
-
- .. code-block:: pycon
-
- >>> ve = "variables and expressions"
- >>> "-".join(ve.split())
- 'variables-and-expressions'
+:doc:`/types/strings/operators-functions`
+-----------------------------------------
* Welche der folgenden Zeichenketten können nicht in Zahlen umgewandelt werden
und warum?
@@ -341,6 +351,19 @@ Checks
.. blacken-docs:on
+:doc:`/types/strings/built-in-modules/string`
+---------------------------------------------
+
+* Wie könnt ihr eine Überschrift wie ``variables and expressions`` so abändern,
+ dass sie statt Leerzeichen Bindestriche enthält und so besser als Dateinamen
+ verwendet werden kann?
+
+ .. code-block:: pycon
+
+ >>> ve = "variables and expressions"
+ >>> "-".join(ve.split())
+ 'variables-and-expressions'
+
* Wenn ihr überprüfen wollt, ob eine Zeile mit ``.. note::`` beginnt, welche
Methode würdet ihr verwenden? Gibt es auch noch andere Möglichkeiten?
@@ -352,7 +375,7 @@ Checks
True
* Angenommen, ihr habt eine Zeichenkette mit Ausrufezeichen, Anführungszeichen
- und Zeilenumbrruch. Wie können diese aus der Zeichenkette entfernt werden?
+ und Zeilenumbruch. Wie können diese aus der Zeichenkette entfernt werden?
.. code-block:: pycon
@@ -372,6 +395,9 @@ Checks
>>> hipy.translate(subs)
'Hello-Pythonistas--'
+:doc:`/types/strings/built-in-modules/re`
+-----------------------------------------
+
* Welchen regulären Ausdruck würdet ihr verwenden, um Zeichenfolgen zu finden,
die die Zahlen zwischen -3 und +3 darstellen?
@@ -388,137 +414,8 @@ Checks
kleinen oder großen ``x``, gefolgt von einem oder mehreren Zeichen in den
Bereichen ``0-9``, ``a-f`` oder ``A-F``.
-:doc:`/types/files`
--------------------
-
-* Verwendet die Funktionen des :mod:`python3:os`-Moduls, um einen Pfad zu einer
- Datei namens :file:`example.log` zu nehmen und einen neuen Dateipfad im selben
- Verzeichnis für eine Datei namens :file:`example.log1` zu erstellen.
-
- .. code-block:: pycon
-
- >>> import os
- >>> path = os.path.abspath("example.log")
- >>> print(path)
- /Users/veit/python-basics-tutorial-de/example.log
- >>> new_path = f"{path}2"
- >>> print(new_path)
- /Users/veit/python-basics-tutorial-de/example.log2
-
-* Welche Bedeutung hat das Hinzufügen von ``b`` als Parameter von
- :func:`python3:open`?
-
- Dadurch wird die Datei im Binärmodus geöffnet, :abbr:`d.h. (das heißt)` es
- werden Bytes und keine Zeichen gelesen und geschrieben.
-
-* Öffnet eine Datei :file:`my_file.txt` und fügt zusätzlichen Text am Ende der
- Datei ein. Welchen Befehl würdet ihr verwenden, um :file:`my_file.txt` zu
- öffnen? Welchen Befehl würdet ihr verwenden, um die Datei erneut zu öffnen und
- von Anfang an zu lesen?
-
- .. code-block:: pycon
-
- >>> with open("my_file", "a") as f:
- ... f.write("Hi, Pythinistas!\n")
- ...
- 17
- >>> with open("my_file") as f:
- ... print(f.readlines())
- ...
- ['Hi, Pythinistas!\n', 'Hi, Pythinistas!\n']
-
-* Welche Anwendungsfälle könnt ihr euch vorstellen, in denen das
- :mod:`python3:struct`-Modul für das Lesen oder Schreiben von Binärdaten
- nützlich wäre?
-
- * beim Lesen und Schreiben einer Binärdatei
- * beim Lesen von einer externen Schnittstelle, wobei die Daten genau so
- gespeichert werden sollen, wie sie übermittelt wurden
-
-* Warum könnte :doc:`pickle ` für die folgenden
- Anwendungsfälle geeignet sein oder auch nicht:
-
- #. Speichern einiger Zustandsvariablen von einem Durchlauf zum nächsten ✅
- #. Aufbewahren von Auswertungsergebnissen ❌, da Pickle abhängig von der
- jeweiligen Python-Version sind
- #. Speichern von Benutzernamen und Passwörtern ❌, da Pickle nicht sicher sind
- #. Speichern eines großen Wörterbuchs mit englischen Begriffen ❌, da der
- gesamte Pickle in den Speicher geladen werden müsste
-
-* Wenn ihr euch die `Manpage für das wc-Dienstprogramm
- `_ anseht, seht ihr zwei
- Befehlszeilenoptionen:
-
- ``-c``
- zählt die Bytes in der Datei
- ``-m``
- zählt die Zeichen, die im Falle einiger Unicode-Zeichen zwei oder mehr
- Bytes lang sein können
-
- Außerdem sollte unser Modul, wenn eine Datei angegeben wird, aus dieser Datei
- lesen und sie verarbeiten, aber wenn keine Datei angegeben wird, sollte es aus
- ``stdin`` lesen und verarbeiten.
-
- .. seealso::
- :ref:`_wcargv_stdin.py `
-
-* Wenn ein Kontext-Manager in einem Skript verwendet wird, das mehrere Dateien
- liest und/oder schreibt, welche der folgenden Ansätze wäre eurer Meinung nach
- am besten?
-
- #. Legt das gesamte Skript in einen Block, der von einer ``with``-Anweisung
- verwaltet wird.
- #. Verwendet eine ``with``-Anweisung für alle Lesevorgänge und eine weitere
- für alle Schreibvorgänge.
- #. Verwendet jedes Mal eine ``with``-Anweisung, wenn ihr eine Datei lest oder
- schreibt, :abbr:`d.h. (das heißt)` für jede Zeile.
- #. Verwendet für jede Datei, die ihr lest oder schreibt, eine
- ``with``-Anweisung.
-
- Wahrscheinlich ist 4. der beste Ansatz, da ein Teil der Aufgabe des
- Kontextmanagers beim Dateizugriff darin besteht, sicherzustellen, dass eine
- Datei geschlossen ist.
-
-* Archiviert :file:`*.txt`-Dateien aus dem aktuellen Verzeichnis im Verzeichnis
- :file:`archive` als :file:`*.zip`-Dateien mit dem aktuellen Datum als
- Dateiname.
-
- * Welche Module benötigt ihr hierfür?
-
- :mod:`python3:datetime`, :mod:`python3:pathlib` und :mod:`python3:zipfile`.
-
- * Schreibt eine mögliche Lösung.
-
- .. code-block:: pycon
- :linenos:
-
- >>> import datetime
- >>> import pathlib
- >>> import zipfile
- >>> file_pattern = "*.txt"
- >>> archive_path = "archive"
- >>> today = f"{datetime.date.today():%Y-%m-%d}"
- >>> cur_path = pathlib.Path(".")
- >>> paths = cur_path.glob(file_pattern)
- >>> zip_path = cur_path.joinpath(archive_path, today + ".zip")
- >>> zip_file = zipfile.ZipFile(str(zip_path), "w")
- >>> for path in paths:
- ... zip_file.write(str(path))
- ... path.unlink()
- ...
-
- Zeile 9
- erstellt den Pfad zur ZIP-Datei im Archivverzeichnis.
- Zeile 10
- öffnet das neue ZIP-Dateiobjekt zum Schreiben; :func:`str` wird
- benötigt, um einen Pfad in eine Zeichenkette umzuwandeln.
- Zeile 12
- schreibt die aktuelle Datei in die Zip-Datei.
- Zeile 13
- entfernt die aktuelle Datei aus dem Arbeitsverzeichnis.
-
-:doc:`/input`
--------------
+:doc:`/types/strings/input`
+---------------------------
* Wie könnt ihr mit der :func:`input`-Funktion String- und Integer-Werte
erhalten?
@@ -597,8 +494,8 @@ Checks
>>> print(personal_data[who])
60
-:doc:`/control-flows/loops`
----------------------------
+:doc:`/control-flow/loops`
+--------------------------
* Entfernt aus der Liste ``x = [ -2, -1, 0, 1, 2, 3]``, alle negativen Zahlen.
@@ -664,8 +561,8 @@ Checks
>>> {x: x**3 for x in range(1, 5)}
{1: 1, 2: 8, 3: 27, 4: 64}
-:doc:`/control-flows/exceptions`
---------------------------------
+:doc:`/control-flow/exceptions`
+-------------------------------
* Schreibt Code, der zwei Zahlen erhält und die erste Zahl durch die zweite
dividiert. Prüft, ob der :class:`python3:ZeroDivisionError` auftritt, wenn die
@@ -760,8 +657,9 @@ Checks
:doc:`/functions/variables`
---------------------------
-* Angenommen, ``x = 1``, welchen Wert hat ``x`` nach der Ausführung von
- ``func()`` und ``gfunc()``?
+* Angenommen, ``x = 1``, :func:`func` setze die lokale Variable ``x`` auf ``2``
+ und :func:`gfunc` die globale Variable ``x`` auf ``3``, welchen Wert nimmt
+ ``x`` an, nachdem :func:`func` und :func:`gfunc` durchlaufen wurden?
.. code-block:: pycon
@@ -935,7 +833,7 @@ Checks
``.y`` verfügbar.
* Aktualisiert die Dimensionen der Klasse :class:`Triangle`, damit sie
- Eigenschaften mit Gettern und Settern sind, die keine negativen Größen
+ Eigenschaften mit Getter- und Setter-Methoden sind, die keine negativen Größen
zulassen.
.. code-block:: pycon
@@ -974,8 +872,8 @@ Checks
>>> t1.x
3
-:doc:`/libs/distribution`
--------------------------
+:doc:`/packs/distribution`
+--------------------------
* Wenn ihr ein Paket für eine Aufgabenverwaltung erstellen wollt, das die
Aufgaben in eine Datenbank schreibt und über ein Python-:abbr:`API (engl.:
@@ -1112,3 +1010,132 @@ Checks
.. seealso::
Ein vollständiges Beispiel findet ihr in `github.com/veit/items
`_.
+
+:doc:`/save-data/files`
+-----------------------
+
+* Verwendet die Funktionen des :mod:`python3:os`-Moduls, um einen Pfad zu einer
+ Datei namens :file:`example.log` zu nehmen und einen neuen Dateipfad im selben
+ Verzeichnis für eine Datei namens :file:`example.log1` zu erstellen.
+
+ .. code-block:: pycon
+
+ >>> import os
+ >>> path = os.path.abspath("example.log")
+ >>> print(path)
+ /Users/veit/python-basics-tutorial-de/example.log
+ >>> new_path = f"{path}2"
+ >>> print(new_path)
+ /Users/veit/python-basics-tutorial-de/example.log2
+
+* Welche Bedeutung hat das Hinzufügen von ``b`` als Parameter von
+ :func:`python3:open`?
+
+ Dadurch wird die Datei im Binärmodus geöffnet, :abbr:`d.h. (das heißt)` es
+ werden Bytes und keine Zeichen gelesen und geschrieben.
+
+* Öffnet eine Datei :file:`my_file.txt` und fügt zusätzlichen Text am Ende der
+ Datei ein. Welchen Befehl würdet ihr verwenden, um :file:`my_file.txt` zu
+ öffnen? Welchen Befehl würdet ihr verwenden, um die Datei erneut zu öffnen und
+ von Anfang an zu lesen?
+
+ .. code-block:: pycon
+
+ >>> with open("my_file", "a") as f:
+ ... f.write("Hi, Pythonistas!\n")
+ ...
+ 17
+ >>> with open("my_file") as f:
+ ... print(f.readlines())
+ ...
+ ['Hi, Pythonistas!\n', 'Hi, Pythonistas!\n']
+
+* Welche Anwendungsfälle könnt ihr euch vorstellen, in denen das
+ :mod:`python3:struct`-Modul für das Lesen oder Schreiben von Binärdaten
+ nützlich wäre?
+
+ * beim Lesen und Schreiben einer Binärdatei
+ * beim Lesen von einer externen Schnittstelle, wobei die Daten genau so
+ gespeichert werden sollen, wie sie übermittelt wurden
+
+* Warum könnte :doc:`pickle ` für die folgenden
+ Anwendungsfälle geeignet sein oder auch nicht:
+
+ #. Speichern einiger Zustandsvariablen von einem Durchlauf zum nächsten ✅
+ #. Aufbewahren von Auswertungsergebnissen ❌, da Pickle abhängig von der
+ jeweiligen Python-Version sind
+ #. Speichern von Benutzernamen und Passwörtern ❌, da Pickle nicht sicher sind
+ #. Speichern eines großen Wörterbuchs mit englischen Begriffen ❌, da der
+ gesamte Pickle in den Speicher geladen werden müsste
+
+* Wenn ihr euch die `Manpage für das wc-Dienstprogramm
+ `_ anseht, seht ihr zwei
+ Befehlszeilenoptionen:
+
+ ``-c``
+ zählt die Bytes in der Datei
+ ``-m``
+ zählt die Zeichen, die im Falle einiger Unicode-Zeichen zwei oder mehr
+ Bytes lang sein können
+
+ Außerdem sollte unser Modul, wenn eine Datei angegeben wird, aus dieser Datei
+ lesen und sie verarbeiten, aber wenn keine Datei angegeben wird, sollte es aus
+ ``stdin`` lesen und verarbeiten.
+
+ .. seealso::
+ :ref:`_wcargv_stdin.py `
+
+* Wenn ein Kontext-Manager in einem Skript verwendet wird, das mehrere Dateien
+ liest und/oder schreibt, welche der folgenden Ansätze wäre eurer Meinung nach
+ am besten?
+
+ #. Legt das gesamte Skript in einen Block, der von einer ``with``-Anweisung
+ verwaltet wird.
+ #. Verwendet eine ``with``-Anweisung für alle Lesevorgänge und eine weitere
+ für alle Schreibvorgänge.
+ #. Verwendet jedes Mal eine ``with``-Anweisung, wenn ihr eine Datei lest oder
+ schreibt, :abbr:`d.h. (das heißt)` für jede Zeile.
+ #. Verwendet für jede Datei, die ihr lest oder schreibt, eine
+ ``with``-Anweisung.
+
+ Wahrscheinlich ist 4. der beste Ansatz, da ein Teil der Aufgabe des
+ Kontextmanagers beim Dateizugriff darin besteht, sicherzustellen, dass eine
+ Datei geschlossen ist.
+
+* Archiviert :file:`*.txt`-Dateien aus dem aktuellen Verzeichnis im Verzeichnis
+ :file:`archive` als :file:`*.zip`-Dateien mit dem aktuellen Datum als
+ Dateiname.
+
+ * Welche Module benötigt ihr hierfür?
+
+ :mod:`python3:datetime`, :mod:`python3:pathlib` und :mod:`python3:zipfile`.
+
+ * Schreibt eine mögliche Lösung.
+
+ .. code-block:: pycon
+ :linenos:
+
+ >>> import datetime
+ >>> import pathlib
+ >>> import zipfile
+ >>> file_pattern = "*.txt"
+ >>> archive_path = "archive"
+ >>> today = f"{datetime.date.today():%Y-%m-%d}"
+ >>> cur_path = pathlib.Path(".")
+ >>> paths = cur_path.glob(file_pattern)
+ >>> zip_path = cur_path.joinpath(archive_path, today + ".zip")
+ >>> zip_file = zipfile.ZipFile(str(zip_path), "w")
+ >>> for path in paths:
+ ... zip_file.write(str(path))
+ ... path.unlink()
+ ...
+
+ Zeile 9
+ erstellt den Pfad zur ZIP-Datei im Archivverzeichnis.
+ Zeile 10
+ öffnet das neue ZIP-Dateiobjekt zum Schreiben; :func:`str` wird
+ benötigt, um einen Pfad in eine Zeichenkette umzuwandeln.
+ Zeile 12
+ schreibt die aktuelle Datei in die Zip-Datei.
+ Zeile 13
+ entfernt die aktuelle Datei aus dem Arbeitsverzeichnis.
diff --git a/docs/appendix/glossary.rst b/docs/appendix/glossary.rst
new file mode 100644
index 00000000..23c852b4
--- /dev/null
+++ b/docs/appendix/glossary.rst
@@ -0,0 +1,763 @@
+Glossar
+=======
+
+.. glossary::
+ :sorted:
+
+ Argument
+ Ein Wert, der einer :term:`Funktion` übergeben wird. Es gibt zwei Arten
+ von Argumenten:
+
+ Schlüsselwortargument
+ ein Argument, dem ein Bezeichner (:abbr:`z.B. (zum Beispiel)`
+ ``name=``) in einem Funktionsaufruf vorangestellt ist oder das als
+ Wert in einem Wörterbuch übergeben wird, dem ``**`` vorangestellt
+ ist.
+ Positionsargument
+ ein Argument, das kein Schlüsselwortargument ist. Positionsargumente
+ können am Anfang einer Argumentliste stehen und/oder als Elemente
+ einer Iteration mit vorangestelltem ``*`` übergeben werden.
+
+ Ausnahme
+ Ausnahmebehandlung
+ Exception
+ Eine Ausnahme (englisch *exception*) reicht bestimmte Programmzustände –
+ meistens Fehlerzustände – an andere Programmebenen weiter. Sie ist eine
+ anpassbare Form von :term:`assert`.
+
+ .. seealso::
+ * :doc:`/control-flow/exceptions`
+ * `Ausnahmen (englisch exceptions) loggen
+ `_
+ * :ref:`pytest_fail`
+ * :class:`python3:Exception`
+
+ Dekorator
+ Decorator
+ Eine Funktion, die eine andere Funktion zurückgibt, normalerweise als
+ Funktionstransformation unter Verwendung der ``@wrapper``-Syntax
+ angewandt. Übliche Beispiele für Dekoratoren sind :ref:`classmethod` und
+ :ref:`staticmethod`.
+
+ .. seealso::
+ * :doc:`/functions/decorators`
+
+ Docstring
+ Ein :doc:`/types/strings/built-in-modules/string`-Literal, das als erster
+ Ausdruck in einer Klasse, Funktion oder einem Modul erscheint. Es wird
+ vom Python-Compiler erkannt und in das ``__doc__``-Attribut der
+ umschließenden Klasse, Funktion oder des Moduls aufgenommen.
+
+ .. seealso::
+ * :doc:`/document/sphinx/docstrings`
+
+ Duck-Typing
+ Programmierstil, bei dem nicht der Typ eines Objekts untersucht wird, um
+ festzustellen, ob es die richtige Schnittstelle hat, sondern stattdessen
+ die Methode oder das Attribut einfach aufgerufen wird.
+
+ „Wenn es wie eine Ente aussieht und wie eine Ente quakt, muss es eine
+ Ente sein.“
+
+ Durch die Betonung von Schnittstellen anstelle spezifischer Typen
+ verbessert gut gestalteter Code seine Flexibilität, indem er polymorphe
+ Substitution ermöglicht. Duck-Typing vermeidet Tests mit :class:`type`
+ oder :func:`isinstance` und verwendet stattdessen typischerweise
+ :func:`hasattr`-Tests oder :term:`EAFP`-Programmierung.
+
+ .. seealso::
+ * :ref:`duck-typing`
+
+ EAFP
+ Easier to ask for forgiveness than permission (englisch: Es ist
+ einfacher, um Vergebung zu bitten als um Erlaubnis). Dieser gängige
+ Python-Stil geht von der Existenz gültiger Schlüssel oder Attribute aus
+ und fängt :term:`Ausnahmen ` ab, wenn sich diese Annahme als
+ falsch erweist. Er zeichnet sich durch viele :term:`try`- und
+ :term:`except`-Anweisungen aus. Diese Technik steht im Gegensatz zum
+ :term:`LBYL`-Stil, der in vielen anderen Sprachen wie C üblich ist.
+
+ F-String
+ :doc:`String `-Literal, denen ein
+ ``f`` oder ``F`` vorangestellt ist.
+
+ .. seealso::
+ * :ref:`f-strings`
+ * :pep:`498`
+
+ Funktion
+ Eine Reihe von Anweisungen, die einen Wert zurückgibt. Ihr können auch
+ null oder mehr Argumente übergeben werden, die bei der Ausführung des
+ Hauptteils verwendet werden können.
+
+ .. seealso::
+ * :doc:`/functions/index`
+
+ Garbage Collection
+ Prozess der Freigabe von Speicher, wenn dieser nicht mehr verwendet wird.
+
+ .. seealso::
+ * :py:mod:`gc`
+
+ Konstante
+ Python hat zwar :term:`unveränderliche ` Objekte, aber
+ keine konstanten Variablen. Variablen verweisen auf Objekte, es gibt
+ jedoch keine Möglichkeit, zu verhindern, dass eine neue Zuweisung
+ erfolgt.
+
+ Kontrollfluss
+ Control flow
+ Zeitliche Abfolge der einzelnen Befehle eines Computerprogramms.
+
+ .. seealso::
+ * :doc:`/control-flow/index`
+
+ LBYL
+ Look before you leap (englisch: Schaue, bevor du springst). Bei diesem
+ Stil werden vor dem Aufruf explizit die Vorbedingungen geprüft. Dieser
+ Stil steht im Gegensatz zum :term:`EAFP`-Ansatz und ist durch das
+ Vorhandensein vieler ``if``-Anweisungen gekennzeichnet.
+
+ Methode
+ Eine :term:`Funktion`, die innerhalb einer Klasse definiert ist. Wenn sie
+ als Attribut einer Instanz dieser Klasse aufgerufen wird, erhält die
+ Methode das Instanzobjekt als erstes :term:`Argument` (das normalerweise
+ ``self`` heißt).
+
+ Parameter
+ :term:`Argument` einer :term:`Funktions `- (oder
+ :term:`Methoden `-) Definition.
+
+ .. seealso::
+ * :doc:`/functions/params`
+
+ Singleton-Objekt
+ Eine Singleton-Klasse kann nur eine Instanz von sich selbst erzeugen.
+ :doc:`../types/none` ist ein Beispiel für eine Singleton-Klasse in
+ Python.
+
+ Unveränderlich
+ Immutable
+ Ein Objekt, das nicht verändert (:abbr:`d.h. (das heißt)` mutiert) werden
+ kann. Der Wert eines unveränderlichen Objekts kann sich nicht ändern.
+ :doc:`Tupel <../types/sequences-sets/tuples>` sind Beispiele für
+ unveränderliche Objekte.
+
+ Zen of Python
+ Auflistung von Python-Designprinzipien und -Philosophien, die für das
+ Verständnis und die Verwendung der Sprache hilfreich sind. Die Liste kann
+ durch Eingabe von ``import this`` ausgegeben werden.
+
+ .. _start-packaging:
+
+ build
+ ``build`` ist ein :pep:`517`-kompatibler Python-Paket-Builder. Er bietet
+ eine :abbr:`CLI (Command Line Interface)` zum Erstellen von Paketen
+ sowie eine Python-:abbr:`API (Application Programming Interface)`.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ Built Distribution
+ bdist
+ Eine Struktur aus Dateien und Metadaten, die bei der Installation nur an
+ den richtigen Speicherort auf dem Zielsystem verschoben werden müssen.
+ :term:`wheel` ist ein solches Format, nicht jedoch *distutil’s*
+ :term:`Source Distribution`, die einen Build-Schritt erfordern.
+
+ cibuildwheel
+ :doc:`/packs/cibuildwheel` ist ein Python-Paket, das :term:`wheels
+ ` für alle gängigen Plattformen und Python-Versionen auf den
+ meisten :term:`CI`-Systemen erstellt.
+
+ .. seealso::
+ * :term:`multibuild`
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ conda
+ Paketmanagement-Tool für die `Anaconda-Distribution
+ `_. Sie ist speziell auf
+ die wissenschaftliche Gemeinschaft ausgerichtet, insbesondere auf
+ Windows, wo die Installation von binären Erweiterungen oft schwierig ist.
+
+ Conda installiert keine Pakete von :term:`PyPI` und kann nur von den
+ offiziellen Continuum-Repositories oder von `anaconda.org
+ `_ oder lokalen (:abbr:`z.B. (zum Beispiel)`
+ Intranet-) Paketservern installieren.
+
+ .. note::
+ :term:`pip` kann in conda installiert werden und Seite an Seite
+ arbeiten kann, um Distributionen von :term:`PyPI` zu verwalten.
+
+ .. seealso::
+ * `Conda: Myths and Misconceptions
+ `_
+ * `Conda build variants
+ `_
+ * `Docs `__
+ * `GitHub `__
+
+ devpi
+ `devpi `_ ist ein leistungsstarker
+ :term:`PyPI`-kompatibler Server und ein PyPI-Proxy-Cache mit einem
+ Befehlszeilenwerkzeug um Paketierungs-, Test- und
+ Veröffentlichungsaktivitäten zu ermöglichen.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ Distribution Package
+ Eine versionierte Archivdatei, die Python-:term:`Pakete
+ `, -:term:`Module ` und andere Ressourcendateien
+ enthält, die zum Verteilen eines :term:`Releases ` verwendet
+ werden.
+
+ distutils
+ Paket der Python-Standardbibliothek, das Unterstützung für das
+ Bootstrapping von :term:`pip` in eine bestehende Python-Installation oder
+ :term:`virtuelle Umgebung` bietet.
+
+ .. seealso::
+ * :doc:`Docs `
+ * `GitHub `__
+
+ Egg
+ Ein :term:`Built Distribution`-Format, das von :term:`Setuptools`
+ eingeführt wurde und nun durch :term:`wheel` ersetzt wird. Weitere
+ Informationen findet ihr unter `The Internal Structure of Python Eggs
+ `_
+ und `Python Eggs `_.
+
+ enscons
+ enscons ist ein Python-Paketierungswerkzeug, das auf `SCons
+ `_ basiert. Es erstellt :term:`pip`-kompatible
+ :term:`Source Distributions ` und :term:`wheels
+ ` ohne Verwendung von :term:`distutils` oder :term:`setuptools`,
+ einschließlich Distributionen mit C-Erweiterungen. enscons hat eine
+ andere Architektur und Philosophie als :term:`distutils`, da es
+ Python-Paketierung zu einem allgemeinen Build-System hinzufügt. enscons
+ kann euch helfen, :term:`sdists ` und :term:`wheels ` zu
+ bauen.
+
+ .. seealso::
+ * `GitHub `__
+ * `PyPI `__
+
+ Flit
+ Flit bietet eine einfache Möglichkeit, reine Python-Pakete und -Module zu
+ erstellen und auf den :term:`Python Package Index` hochzuladen. Flit kann
+ eine Konfigurationsdatei generieren, um schnell ein Projekt einzurichten,
+ eine :term:`Source Distribution` und ein :term:`wheel` zu erstellen und
+ sie zu PyPI hochzuladen.
+
+ Flit verwendet :term:`pyproject.toml`, um ein Projekt zu konfigurieren.
+ Flit ist nicht auf Werkzeuge wie :term:`setuptools` angewiesen, um
+ Distributionen zu erstellen, oder auf :term:`twine`, um sie auf
+ :term:`PyPI` hochzuladen.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ Hatch
+ Hatch ist ein Kommandozeilenwerkzeug, das ihr zum Konfigurieren und
+ Versionieren von Paketen, zum Spezifizieren von Abhängigkeiten genutzt
+ werden kann. Das Plugin-System ermöglicht die einfache Erweiterung der
+ Funktionalitäten.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ hatchling
+ Build-Backend von :term:`Hatch`, das auch zum Veröffentlichen auf dem
+ :term:`Python Package Index` genutzt werden kann.
+
+ Import Package
+ Ein Python-Modul, das andere Module oder rekursiv andere Pakete enthalten
+ kann.
+
+ maturin
+ Vormals pyo3-pack, ist ein :pep:`621`-kompatibles Build-Tool für
+ :doc:`binäre Erweiterungen <../packs/binary-extensions>` in Rust.
+
+ meson-python
+ Build-Backend, das das `Meson `_-Build-System
+ verwendet. Es unterstützt eine Vielzahl von Sprachen, einschließlich C,
+ und ist in der Lage, die Anforderungen der meisten komplexen
+ Build-Konfigurationen zu erfüllen.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ Modul
+ Ein Objekt, das als organisatorische Einheit von Python-Code dient.
+ Module haben einen :doc:`Namensraum `, der beliebige
+ Python-Objekte enthält. Sie werden durch Importieren in Python
+ geladen.
+
+ Python-Module können in zwei verschiedenen Varianten existieren:
+
+ Pure Module
+ Ein Modul, das in Python geschrieben wurde und in einer einzigen
+ ``.py``-Datei enthalten ist (und möglicherweise zugehörigen
+ ``.pyc``- und/oder ``.pyo``-Dateien).
+
+ Extension Module
+ In der Regel in eine einzelne dynamisch ladbare vorkompilierte
+ Datei, :abbr:`z.B. (zum Beispiel)` einer gemeinsamen Objektdatei
+ (``.so``).
+
+ .. seealso::
+ * :doc:`/libs/batteries`
+
+ multibuild
+ ``multibuild`` ist ein Satz von CI-Skripten zum Erstellen und Testen von
+ Python-:term:`wheels ` für Linux, macOS und Windows.
+
+ .. seealso::
+ :term:`cibuildwheel`
+
+ pdm
+ Python-Paketmanager mit :pep:`582`-Unterstützung. Er installiert und
+ verwaltet Pakete ohne dass eine :term:`virtuelle Umgebung ` erstellt werden muss. Er verwendet auch
+ :term:`pyproject.toml`, um Projekt-Metadaten zu speichern, wie in
+ :pep:`621` definiert.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ pex
+ Bibliothek und Werkzeug zur Erzeugung von Python Executable
+ (:file:`.pex`)-Dateien, die eigenständige Python-Umgebungen sind.
+ :file:`.pex`-Dateien sind Zip-Dateien mit ``#!/usr/bin/env python`` und
+ einer speziellen :file:`__main__.py`-Datei, die das Deployment von
+ Python-Applikationen stark vereinfachen können.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ pip
+ Beliebtes Werkzeug für die Installation von Python-Paketen, das in
+ neuen Versionen von Python enthalten ist.
+
+ Es bietet die wesentlichen Kernfunktionen zum Suchen, Herunterladen und
+ Installieren von Paketen aus dem :term:`Python Package Index` und andere
+ Python-Paketverzeichnissen und kann über eine Befehlszeilenschnittstelle
+ (CLI) in eine Vielzahl von Entwicklungsabläufen eingebunden werden.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ pip-tools
+ Reihe von Werkzeugen, die eure Builds deterministisch halten und dennoch
+ mit neuen Versionen eurer Abhängigkeiten auf dem Laufenden halten können.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ Pipenv
+ Pipenv bündelt :term:`Pipfile`, :term:`pip` und :term:`virtualenv` in
+ einer einzigen Toolchain. Es kann die ``requirements.txt`` automatisch
+ importieren und mithilfe von `safety `_ die
+ Umgebung auch auf CVEs prüfen. Schließlich erleichtert es auch die
+ Deinstallation von Paketen und deren Abhängigkeiten.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ Pipfile
+ Pipfile.lock
+ ``Pipfile`` und ``Pipfile.lock`` sind eine übergeordnete,
+ anwendungsorientierte Alternative zu :term:`pip`’s
+ ``requirements.txt``-Datei. Die :pep:`PEP 508 Environment Markers
+ <508#environment-markers>` werden ebenfalls unterstützt.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+
+ pipx
+ pipx unterstützt euch, Abhängigkeitskonflikte mit anderen auf dem System
+ installierten Paketen zu vermeiden.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ piwheels
+ Website und zugrundeliegende Software, die
+ :term:`Source Distribution`-Pakete von :term:`PyPI` holt und sie in
+ binäre :term:`wheels ` kompiliert, die für die Installation auf
+ Raspberry Pis optimiert sind.
+
+ .. seealso::
+ * `Home `__
+ * `Docs `__
+ * `GitHub `__
+
+ poetry
+ Eine All-in-One-Lösung für reine Python-Projekte. Es ersetzt
+ :term:`setuptools`, :term:`venv`/:term:`pipenv`, :term:`pip`,
+ :term:`wheel` und :term:`twine`. Sie macht jedoch einige schlechte
+ Standardannahmen für Bibliotheken und die
+ :term:`pyproject.toml`-Konfiguration ist nicht standardkonform.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ pybind11
+ Dies ist :term:`setuptools`, aber mit einer C++-Erweiterung und von
+ :term:`cibuildwheel` generierten :term:`wheels `.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ pypi.org
+ `pypi.org `_ ist der Domain-Name für den
+ :term:`Python Package Index` (:term:`PyPI`). Er löste 2017 den alten
+ Index-Domain-Namen ``pypi.python.org`` ab. Er wird von :term:`warehouse`
+ unterstützt.
+
+ pyproject.toml
+ Werkzeugunabhängige Datei zur Spezifikation von Projekten, die in
+ :pep:`518` definiert ist.
+
+ .. seealso::
+ * :ref:`pyproject-toml`
+ * `Docs
+ `__
+
+ Python Package Index
+ PyPI
+ :term:`pypi.org` ist der Standard-Paket-Index für die Python-Community.
+ Alle Python-Entwickler können ihre Distributionen nutzen und verteilen.
+
+ Python Packaging Authority
+ PyPA
+ Die `Python Packaging Authority `_ ist
+ eine Arbeitsgruppe, die mehrere Softwareprojekte für die Paketierung,
+ Verteilung und Installation von Python-Bibliotheken verwaltet. Die in
+ `PyPA Goals `_ genannten Ziele
+ sind jedoch noch während der Diskussionen um :pep:`516`, :pep:`517` und
+ :pep:`518` entstanden, die mit dem :term:`pyproject.toml`-basierten
+ Build-System konkurrierende Workflows erlaubten, die nicht interoperabel
+ sein müssen.
+
+ readme_renderer
+ ``readme_renderer`` ist eine Bibliothek, die verwendet wird, um
+ Dokumentation aus Auszeichnungssprachen wie Markdown oder
+ reStructuredText in HTML zu rendern. Ihr könnt sie verwenden, um zu
+ prüfen, ob eure Paketbeschreibungen auf :term:`PyPI` korrekt angezeigt
+ werden.
+
+ .. seealso::
+ * `GitHub `__
+ * `PyPI `__
+
+ Release
+ Der Snapshot eines Projekts zu einem bestimmten Zeitpunkt, gekennzeichnet
+ durch eine Versionskennung.
+
+ Eine Veröffentlichung kann mehrere :term:`Built Distributions
+ ` zur Folge haben.
+
+ scikit-build
+ Build-System-Generator für ``C``-, ``C++``-, ``Fortran``- und
+ ``Cython``-Erweiterungen, der :term:`setuptools`, :term:`wheel` und
+ :term:`pip` integriert. Er verwendet intern ``CMake``, um eine bessere
+ Unterstützung für zusätzliche Compiler, Build-Systeme, Cross-Compilation
+ und das Auffinden von Abhängigkeiten und deren zugehörigen
+ Build-Anforderungen zu bieten. Um die Erstellung großer Projekte zu
+ beschleunigen und zu parallelisieren, kann zusätzlich `Ninja
+ `_ installiert werden.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ setuptools
+ setuptools sind das klassische Build-System, das sehr leistungsfähig ist,
+ aber mit steiler Lernkurve und hohem Konfigurationsaufwand. Ab Version
+ 61.0.0 unterstützen die setuptools auch :term:`pyproject.toml`-Dateien.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+ * `Packaging and distributing projects
+ `_
+
+ shiv
+ Kommandozeilenprogramm zur Erstellung von Python-Zip-Apps, wie sie in
+ :pep:`441` beschrieben sind, aber zusätzlich mit allen Abhängigkeiten.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ Source Distribution
+ sdist
+ Ein Verteilungsformat (das normalerweise mithilfe von ``python setup.py
+ sdist`` generiert wird).
+
+ Es stellt Metadaten und die wesentlichen Quelldateien bereit, die für die
+ Installation mit einem Tool wie :term:`Pip` oder zum Generieren von
+ :term:`Built Distributions ` benötigt werden.
+
+ Spack
+ Flexibler Paketmanager, der mehrere Versionen, Konfigurationen,
+ Plattformen und Compiler unterstützt. Beliebig viele Versionen von
+ Paketen können auf demselben System koexistieren. Spack wurde für die
+ schnelle Erstellung von wissenschaftlichen Hochleistungsanwendungen auf
+ Clustern und Supercomputern entwickelt.
+
+ .. seealso::
+ * :doc:`Python4DataScience:productive/envs/spack/index`
+ * `Docs `__
+ * `GitHub `__
+
+ trove-classifiers
+ trove-classifiers sind zum einen Klassifikatoren, die im :term:`Python
+ Package Index` verwendet werden, um Projekte systematisch zu beschreiben
+ und besser auffindbar zu machen. Zum anderen sind sie ein Paket, das eine
+ Liste gültiger und veralteter Klassifikatoren enthält, das zur
+ Überprüfung verwendet werden kann.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ twine
+ Kommandozeilenprogramm, das Programmdateien und Metadaten an eine
+ Web-API übergibt. Damit lassen sich Python-Pakete auf den :term:`Python
+ Package Index` hochladen.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ uv
+ Ein extrem schneller Python-Paket- und Projektmanager, geschrieben in
+ `Rust `_.
+
+ uv vereinfacht Entwicklung und Deployment von Python-Projekten erheblich:
+
+ * :ref:`Installation `
+ * :ref:`Pakete erstellen ` und auf :doc:`PyPI
+ <../packs/publish>` oder :doc:`GitLab <../packs/gitlab>`
+ veröffentlichen
+ * :doc:`Entwickeln von Anwendungen <../packs/apps>`
+ * Testen von Bibliotheken mit verschiedenen :ref:`Python-Versionen
+ ` und :ref:`tox_uv`
+ * :ref:`Reproduzieren ` und :ref:`aktualisieren
+ ` der Python-Umgebung,
+ :abbr:`ggf. (gegebenenfalls)` auch mit einem
+ :doc:`Python4DataScience:productive/envs/uv/dependency-bot`
+ * :doc:`Python4DataScience:productive/envs/uv/cicd`
+ * :doc:`Python4DataScience:productive/envs/uv/docker`
+ * Schwachstellen überprüfen mit :ref:`uv-secure `
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+ * `PyPI `__
+
+ venv
+ Paket, das ab Python ≥ 3.3 in der Python-Standardbibliothek ist und zur
+ Erstellung :term:`virtueller Umgebungen ` gedacht
+ ist.
+
+ .. seealso::
+ * :doc:`Docs `
+ * `GitHub `__
+
+ virtualenv
+ Werkzeug, das die Befehlszeilen-Umgebungsvariable ``path`` verwendet, um
+ isolierte :term:`virtuelle Python-Umgebungen ` zu
+ erstellen, ähnlich wie :term:`venv`. Es bietet jedoch zusätzliche
+ Funktionalität für die Konfiguration, Wartung, Duplizierung und
+ Fehlerbehebung.
+
+ Ab Version 20.22.0 unterstützt virtualenv nicht mehr die Python-Versionen
+ 2.7, 3.5 und 3.6.
+
+ Virtuelle Umgebung
+ Eine isolierte Python-Umgebung, die die Installation von Paketen für eine
+ bestimmte Anwendung ermöglicht, anstatt sie systemweit zu installieren.
+
+ .. seealso::
+ * :ref:`venv`
+ * `Creating Virtual Environments
+ `_
+
+ Warehouse
+ Die aktuelle Codebasis, die den :term:`Python Package Index`
+ (:term:`PyPI`) antreibt. Sie wird auf :term:`pypi.org` gehostet.
+
+ .. seealso::
+ * `Docs `__
+ * `GitHub `__
+
+ wheel
+ Distributionsformat, das mit :pep:`427` eingeführt wurde. Es soll das
+ :term:`Egg`-Format ersetzen und wird von aktuellen
+ :term:`pip`-Installationen unterstützt.
+
+ C-Erweiterungen können als plattformspezifische wheels für Windows, macOS
+ und Linux auf dem :term:`PyPI` bereitgestellt werden. Dies hat für euch
+ den Vorteil, dass ihr bei der Installation des Pakets dieses nicht
+ kompilieren müsst.
+
+ .. seealso::
+ * `Home `__
+ * `Docs `__
+ * :pep:`427`
+ * `GitHub `__
+ * `PyPI `__
+
+ .. seealso::
+ * :ref:`wheels`
+
+ whey
+ Einfacher Python-:term:`wheel`-Builder mit Automatisierungsoptionen für
+ :term:`trove-classifiers`.
+
+ .. _end-packaging:
+
+ .. _start-test-procedures:
+
+ Statische Testverfahren
+ werden verwendet um den Quellcode zu überprüfen, wobei dieser jedoch
+ nicht ausgeführt wird. Sie unterteilen sich in
+
+ * :ref:`Reviews ` und
+ * `Statische Code-Analyse
+ `_
+
+ Es gibt diverse Python-Pakete, die euch bei der statischen Code-Analyse
+ unterstützen können, :abbr:`u.a. (unter anderem)`
+ :doc:`Python4DataScience:productive/qa/flake8`,
+ :doc:`Python4DataScience:productive/qa/pysa` und
+ :doc:`Python4DataScience:productive/qa/wily`.
+
+ Dynamische Testverfahren
+ dienen dem Auffinden von Fehlern beim Ausführen des Quellcodes. Dabei
+ wird zwischen :term:`Whitebox- ` und :term:`Blackbox-Tests
+ ` unterschieden.
+
+ .. _end-test-procedures:
+
+ .. _start-test:
+
+ Whitebox-Test
+ wird unter Kenntnis des Quellcodes und der Software-Struktur entwickelt.
+
+ In Python stehen euch verschiedene Module zur Verfügung:
+
+ :doc:`/test/unittest`
+ unterstützt euch bei der Automatisierung von Tests.
+ :doc:`/test/mock`
+ erlaubt euch das Erstellen und Verwenden von Mock-Objekten.
+ :doc:`../document/doctest`
+ ermöglicht das Testen von in Python :term:`Docstrings `
+ geschriebenen Tests.
+ :doc:`/test/tox`
+ ermöglicht das Testen in verschiedenen Umgebungen.
+
+ Blackbox-Test
+ wird ohne Kenntnis des Quellcodes entwickelt. Neben :doc:`/test/unittest`
+ kann in Python auch :doc:`/test/hypothesis` für solche Tests verwendet
+ werden.
+
+ ``assert``
+ Ein Schlüsselwort, das die Codeausführung anhält, wenn sein Argument
+ falsch ist.
+
+ Continuous Integration
+ CI
+ Kontinuierliche Integration
+ Automatisches Überprüfen des Erstellungs- und Testprozesses auf
+ verschiedenen Plattformen.
+
+ Dummy
+ Objekt, das herumgereicht, aber nie wirklich benutzt wird. Normalerweise
+ werden Dummies nur zum Füllen von Parameter-Listen verwendet.
+
+ ``except``
+ Schlüsselwort, das verwendet wird, um eine :term:`Exception` abzufangen
+ und sorgfältig zu behandeln.
+
+ Fake
+ Objekt, das eine tatsächlich funktionierende Implementierung hat, in der
+ Regel aber eine Abkürzung nimmt, die es nicht für die Produktion geeignet
+ macht.
+
+ Integrationstest
+ Tests, die überprüfen, ob die verschiedenen Teile der Software wie
+ erwartet zusammenarbeiten.
+
+ Mock
+ Objekte, die mit :term:`Exception` programmiert sind, die eine
+ Spezifikation der Aufrufe bilden, die ihr voraussichtlich erhalten
+ werdet.
+
+ .. seealso::
+ * `Mock-Objekt `_
+
+ pytest
+ Ein Python-Paket mit Test-Utilities.
+
+ .. seealso::
+ * :doc:`/test/pytest/index`
+
+ Regressionstest
+ Tests zum Schutz vor neuen Fehlern oder Regressionen, die durch neue
+ Software und Updates auftreten können.
+
+ Stubs
+ liefern vorgefertigte Antworten auf Aufrufe, die während des Tests
+ getätigt werden, und reagieren in der Regel überhaupt nicht auf
+ irgendetwas, das nicht für den Test programmiert wurde.
+
+ Test-driven development
+ TDD
+ Testgetriebene Entwicklung
+ Eine Software-Entwicklungsstrategie, bei der die Tests vor dem Code
+ geschrieben werden.
+
+ ``try``
+ Ein Schlüsselwort, das einen Teil des Codes schützt, der eine
+ :term:`Exception` auslösen kann.
+
+ .. _end-test:
diff --git a/docs/appendix/index.rst b/docs/appendix/index.rst
index a1764f27..30b254d3 100644
--- a/docs/appendix/index.rst
+++ b/docs/appendix/index.rst
@@ -4,6 +4,5 @@ Anhang
.. toctree::
:titlesonly:
+ glossary
checks
- regex
- encodings
diff --git a/docs/changelog.rst b/docs/changelog.rst
new file mode 100644
index 00000000..958dff97
--- /dev/null
+++ b/docs/changelog.rst
@@ -0,0 +1,5 @@
+Was ist neu?
+============
+
+.. include:: ../CHANGELOG.rst
+ :start-after: unreleased
diff --git a/docs/conf.py b/docs/conf.py
index 904afc35..6764a672 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -40,9 +40,12 @@
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named "sphinx.ext.*") or your custom ones.
extensions = [
+ "nbsphinx",
+ "IPython.sphinxext.ipython_console_highlighting",
"pygments_pytest",
"sphinx.ext.autodoc",
"sphinx.ext.viewcode",
+ "sphinx.ext.graphviz",
"sphinx.ext.intersphinx",
"sphinxcontrib.plantuml",
"sphinxcontrib.cairosvgconverter",
@@ -51,7 +54,7 @@
"sphinx_inline_tabs",
]
-plantuml = "/usr/bin/plantuml"
+plantuml = "plantuml"
plantuml_output_format = "svg"
intersphinx_mapping = {
@@ -69,9 +72,13 @@
r".*/_sources/.*/*.txt",
# 403 Client Error
r"https://anaconda.org/",
+ r"https://distrowatch.com/",
r"https://linux.die.net/",
+ r"https://sourceforge.net/",
]
+linkcheck_anchors_ignore = ["readme"]
+
# All HTTP redirections from the source URI to the canonical URI will be treated# as "working".
linkcheck_allowed_redirects = {
r"https://devpi\.net/docs/$": r"https://devpi\.net/docs/[-a-z]+/(?:latest|stable|master)/$",
@@ -174,6 +181,10 @@
html_logo = "_static/images/logo/logo.png"
html_favicon = "_static/images/logo/favicon.ico"
+html_css_files = [
+ "css/cusy.css",
+]
+
# -- Options for HTMLHelp output ---------------------------------------
@@ -234,3 +245,16 @@
"Miscellaneous",
),
]
+
+
+# -- Custom documentation plugin ---------------------------------------
+# https://www.sphinx-doc.org/en/master/development/tutorials/extending_syntax.html#the-setup-function
+
+
+def setup(app: sphinx.application.Sphinx) -> None:
+ app.add_crossref_type(
+ "fixture",
+ "fixture",
+ objname="built-in fixture",
+ indextemplate="pair: %s; fixture",
+ )
diff --git a/docs/control-flow/boolean.rst b/docs/control-flow/boolean.rst
new file mode 100644
index 00000000..fef3fafd
--- /dev/null
+++ b/docs/control-flow/boolean.rst
@@ -0,0 +1,108 @@
+Boolesche Werte und Ausdrücke
+=============================
+
+In Python gibt es mehrere Möglichkeiten, boolesche Werte auszudrücken; die
+boolesche Konstante ``False``, ``0``, der Python-Typ :doc:`../types/none` und
+leere Werte (:abbr:`z.B. (zum Beispiel)` die leere Liste ``[]`` oder die leere
+Zeichenkette ``""``) werden alle als ``False`` betrachtet. Die boolesche
+Konstante ``True`` und alles andere wird als ``True`` betrachtet.
+
+``<``, ``<=``, ``==``, ``>``, ``>=``
+ vergleicht Werte:
+
+ .. code-block:: pycon
+
+ >>> x = 3
+ >>> y = 3.0
+ >>> z = [3, 4, 5]
+ >>> x == y
+ True
+
+ Ihr solltet jedoch nie berechnete Fließkommazahlen miteinander vergleichen:
+
+ .. code-block:: pycon
+
+ >>> u = 0.6 * 7
+ >>> v = 0.7 * 6
+ >>> u == v
+ False
+ >>> u
+ 4.2
+ >>> v
+ 4.199999999999999
+
+``is``, ``is not``
+ überprüft die Identität:
+
+ .. code-block:: pycon
+
+ >>> x is y
+ False
+ >>> x is not y
+ True
+ >>> id(x)
+ 4375911432
+ >>> id(y)
+ 4367574480
+ >>> id(z[0])
+ 4375911432
+
+ Wenn ``x`` und ``z[0]`` die gleiche ID im Speicher haben, bedeutet das, dass
+ wir an zwei Stellen auf dasselbe Objekt verweisen.
+
+ Der ``is``-Operator wird meist bei Werten verwendet, die nur einmal im
+ Speicher vorhanden sind, :abbr:`sog. (sogenannte)` :term:`Singleton-Objekte
+ `. So ist die Überprüfung auf :doc:`../types/none` die
+ häufigste Verwendung des ``is``-Operators.
+
+ .. code-block:: pycon
+
+ >>> x is None
+ False
+ >>> x is not None
+ True
+
+ Auch der Python-Style-Guide in :pep:`8` empfiehlt, dass ihr auf Identität
+ mit :doc:`../types/none` und nicht auf Werte überprüfen solltet, also
+ niemals ``x == None``, sondern stattdessen immer ``x is None`` verwenden
+ solltet.
+
+
+``in``, ``not in``
+ überprüft die Zugehörigkeit:
+
+ .. code-block:: pycon
+
+ >>> x in z
+ True
+
+ Alle eingebauten Sequenz- und Mengen-Typen unterstützen dies, ebenso wie
+ Dictionaries, bei denen ``in`` überprüft, ob das Dictionary diesen bestimmten
+ Schlüssel hat:
+
+ .. code-block:: pycon
+
+ >>> d = {"a": 1, "b": 2}
+ >>> "a" in d
+ True
+ >>> "c" in d
+ False
+ >>> 1 in d
+ False
+
+
+
+``and``, ``not``, ``or``
+ sind logische Operatoren, mit denen wir die oben genannten Überprüfungen
+ verknüpfen können:
+
+ .. code-block:: pycon
+
+ >>> x is y and x is z[0]
+ False
+ >>> x is y or x is z[0]
+ True
+ >>> x is y and not x is z[0]
+ False
+ >>> x is z[0] and not x is y
+ True
diff --git a/docs/control-flow/conditional.rst b/docs/control-flow/conditional.rst
new file mode 100644
index 00000000..9a85eb94
--- /dev/null
+++ b/docs/control-flow/conditional.rst
@@ -0,0 +1,42 @@
+Bedingte Anweisungen
+====================
+
+Der Codeblock nach der ersten wahren Bedingung einer ``if``- oder
+``elif``-Anweisung wird ausgeführt. Wenn keine der Bedingungen wahr ist, wird
+der Codeblock nach dem ``else`` ausgeführt:
+
+.. code-block:: pycon
+ :linenos:
+
+ >>> x = 1
+ >>> if x < 1:
+ ... x = 2
+ ... y = 3
+ ... elif x > 1:
+ ... x = 4
+ ... y = 5
+ ... else:
+ ... x = 6
+ ... y = 7
+ ...
+ >>> x, y
+ (6, 7)
+
+Python verwendet Einrückungen, um Blöcke abzugrenzen. Es sind keine expliziten
+Begrenzungszeichen wie Klammern oder geschweifte Klammern erforderlich. Jeder
+Block besteht aus einer oder mehreren Anweisungen, die durch Zeilenumbrüche
+getrennt sind. Alle diese Anweisungen müssen auf der gleichen Einrückungsebene
+stehen.
+
+Zeile 5
+ Die ``elif``-Anweisung sieht aus wie die ``if``-Anweisung und funktioniert
+ auch so, allerdings mit zwei wesentlichen Unterschieden:
+
+ * ``elif`` ist nur nach einer ``if``-Anweisung oder einer anderen
+ ``elif``-Anweisung zulässig
+ * Ihr könnt so viele ``elif``-Anweisungen verwenden, wie ihr benötigt
+
+Zeile 8
+ Die optionale ``else``-Klausel bezeichnet einen Codeblock, der nur dann
+ ausgeführt wird, wenn die anderen bedingten Blöcke, ``if`` und ``elif``,
+ alle unzutreffend sind.
diff --git a/docs/control-flows/emptyFile.py b/docs/control-flow/emptyFile.py
similarity index 100%
rename from docs/control-flows/emptyFile.py
rename to docs/control-flow/emptyFile.py
diff --git a/docs/control-flows/exceptions.py b/docs/control-flow/exceptions.py
similarity index 100%
rename from docs/control-flows/exceptions.py
rename to docs/control-flow/exceptions.py
diff --git a/docs/control-flows/exceptions.rst b/docs/control-flow/exceptions.rst
similarity index 57%
rename from docs/control-flows/exceptions.rst
rename to docs/control-flow/exceptions.rst
index 167c339c..df3f5307 100644
--- a/docs/control-flows/exceptions.rst
+++ b/docs/control-flow/exceptions.rst
@@ -1,44 +1,40 @@
Exceptions
==========
-In diesem Abschnitt geht es um Ausnahmen, :abbr:`d.h. (das heißt)` um
-Sprachfunktionen, die speziell ungewöhnliche Umstände während der Ausführung
-eines Programms behandeln. Die häufigste Ausnahme ist die Behandlung von
-Fehlern, aber sie können auch für viele andere Zwecke effektiv eingesetzt
-werden. Python bietet einen umfassenden Satz von Ausnahmen, und ihr könnt neue
-Ausnahmen für eure eigenen Zwecke definieren.
-
-Der gesamte Exception-Mechanismus in Python ist :doc:`objektorientiert
-`: Eine Exception ist ein Objekt, das automatisch von
-Python-Funktionen mit einer ``raise``-Anweisung erzeugt wird. Diese
-``raise``-Anweisung veranlasst die Ausführung des Python-Programms auf eine
-andere Art und Weise, als üblicherweise vorgesehen: Die aktuelle Aufrufkette
-wird nach einem Handler durchsucht, der die erzeugte Ausnahme behandeln kann.
-Wenn ein solcher Handler gefunden wird, wird er aufgerufen und kann auf das
-Ausnahmeobjekt zugreifen, um weitere Informationen zu erhalten. Wird kein
-geeigneter Exception-Handler gefunden, bricht das Programm mit einer
-Fehlermeldung ab.
+In diesem Abschnitt geht es um :term:`Ausnahmen ` (englisch
+*exceptions*), :abbr:`d.h. (das heißt)` um Sprachfunktionen, die speziell
+ungewöhnliche Umstände während der Ausführung eines Programms behandeln. Die
+häufigste Ausnahme ist die Behandlung von Fehlern, aber sie können auch für
+viele andere Zwecke effektiv eingesetzt werden. Python bietet einen umfassenden
+Satz von Ausnahmen, und ihr könnt neue Ausnahmen für eure eigenen Zwecke
+definieren.
+
+Eine Exception ist ein Objekt, das automatisch von Python-Funktionen mit einer
+:ref:`raise `-Anweisung erzeugt wird, :abbr:`z.B. (zum Beispiel)`
+mit:
-.. note::
- Die Art und Weise, wie Python Fehlersituationen im Allgemeinen behandelt,
- unterscheidet sich von manch anderen Sprachen, :abbr:`z.B. (zum Beispiel)`
- Java. Diese Sprachen prüfen mögliche Fehler so weit wie möglich, bevor sie
- auftreten, da die Behandlung von Exceptions nach ihrem Auftreten kostspielig
- ist. Dies wird manchmal als :abbr:`LBYL (Look before you leap, Erst schauen,
- dann springen)`-Ansatz bezeichnet.
+.. literalinclude:: exceptions.py
+ :language: python
+ :linenos:
+ :lines: 11-12
+ :lineno-start: 11
- Bei Python hingegen verlässt man sich eher auf Exceptions, um Fehler zu
- behandeln, nachdem sie aufgetreten sind. Obwohl dieses Vertrauen riskant
- erscheinen mag, ist der Code weniger schwerfällig und leichter zu lesen, wenn
- Exceptions richtig eingesetzt werden, und Fehler werden nur dann behandelt,
- wenn sie auftreten. Diese pythonische Herangehensweise zur Behandlung von
- Fehlern wird oft als :abbr:`EAFP (easier to ask forgiveness than permission,
- engl.: leichter um Vergebung zu bitten als um Erlaubnis)` beschrieben.
+Die :ref:`raise `-Anweisung veranlasst die Ausführung des
+Python-Programms auf eine andere Art und Weise, als üblicherweise vorgesehen:
+Die aktuelle Aufrufkette wird nach einem Handler durchsucht, der die erzeugte
+Ausnahme behandeln kann. Wenn ein solcher Handler gefunden wird, wird er
+aufgerufen und kann auf das Ausnahmeobjekt zugreifen, um weitere Informationen
+zu erhalten, wie in unserem :class:`EmptyFileError`-Beispiel:
-Es ist möglich, verschiedene Arten von Ausnahmen zu erzeugen, um die
-tatsächliche Ursache des gemeldeten Fehlers oder außergewöhnlichen Umstandes zu
-reflektieren. Eine Übersicht über die Klassenhierarchie eingebauter Exceptions
-erhaltet ihr unter `Exception hierarchy
+.. literalinclude:: exceptions.py
+ :language: python
+ :linenos:
+ :lines: 1-2
+
+Dies definiert euren eigenen Ausnahmetyp, der vom Basistyp ``Exception`` erbt.
+
+Eine Übersicht über die Klassenhierarchie eingebauter Exceptions erhaltet ihr
+unter `Exception hierarchy
`_ in der
Python-Dokumentation. Jeder Ausnahmetyp ist eine Python-Klasse, die von ihrem
übergeordneten Exception-Typ erbt. So ist :abbr:`z.B. (zum Beispiel)` ein
@@ -48,31 +44,38 @@ meisten Ausnahmen erben von ``Exception``, und es wird dringend empfohlen, dass
alle benutzerdefinierten Ausnahmen auch die Unterklasse von ``Exception`` und
nicht von ``BaseException`` bilden:
+Es ist möglich, verschiedene Arten von Ausnahmen zu erzeugen, um die
+tatsächliche Ursache des gemeldeten Fehlers oder außergewöhnlichen Umstandes zu
+reflektieren.
+
.. literalinclude:: exceptions.py
:language: python
:linenos:
- :lines: 1-2
+ :lines: 8-16
+ :lineno-start: 8
-Dies definiert ihr euren eigenen Ausnahmetyp, der vom Basistyp ``Exception``
-erbt.
+Wenn während der Ausführung von :func:`open` im ``try``-Block ein ``OSError``
+oder ein ``EmptyFileError`` auftritt, wird der jeweils zugehörige
+``except``-Block ausgeführt.
+
+Wird kein geeigneter Exception-Handler gefunden, bricht das Programm mit einer
+Fehlermeldung ab. Daher ergänzen wir unsere ``try``-``except``-Anweisungen um
+``else`` und ``finally``:
.. literalinclude:: exceptions.py
:language: python
:linenos:
- :lines: 5
- :lineno-start: 5
-
-Eine Liste unterschiedlicher Datei-Arten wird definiert.
+ :lines: 17-21
+ :lineno-start: 17
-Schließlich werden Ausnahmen oder Fehler mit Hilfe der zusammengesetzten
-Anweisung ``try``-``except``-``else``-``finally`` abgefangen und behandelt.
-Jede Ausnahme, die nicht abgefangen wird, führt zur Beendigung des Programms.
+Nun können wir noch eine Liste unterschiedlicher Datei-Arten definieren, sodass
+unser vollständiger Code folgendermaßen aussieht:
.. literalinclude:: exceptions.py
:language: python
:linenos:
- :lines: 7-
- :lineno-start: 7
+ :lines: 1-
+ :lineno-start: 1
Zeile 7
Wenn während der Ausführung der Anweisungen im ``try``-Block ein
@@ -86,14 +89,24 @@ Zeile 17
Die ``else``-Klausel ist optional; sie wird ausgeführt, wenn im
``try``-Block keine Ausnahme auftritt.
- .. note::
- In diesem Beispiel hätte stattdessen auch ``continue``-Anweisungen in
- den ``except``-Blöcken verwendet werden können.
-
Zeile 19
- Die ``finally``-Klausel ist optional; sie wird am Ende des Blocks
+ Die ``finally``-Klausel ist ebenfalls optional und wird am Ende des Blocks
ausgeführt, unabhängig davon, ob eine Ausnahme ausgelöst wurde oder nicht.
+.. note::
+ Die Art und Weise, wie Python Fehlersituationen im Allgemeinen behandelt,
+ unterscheidet sich von manch anderen Sprachen, :abbr:`z.B. (zum Beispiel)`
+ Java. Diese Sprachen prüfen mögliche Fehler so weit wie möglich, bevor sie
+ auftreten, da die Behandlung von Exceptions nach ihrem Auftreten kostspielig
+ ist. Dies wird manchmal als :term:`LBYL`-Ansatz bezeichnet.
+
+ Bei Python hingegen verlässt man sich eher auf Exceptions, um Fehler zu
+ behandeln, nachdem sie aufgetreten sind. Obwohl dieses Vertrauen riskant
+ erscheinen mag, ist der Code weniger schwerfällig und leichter zu lesen, wenn
+ Exceptions richtig eingesetzt werden, und Fehler werden nur dann behandelt,
+ wenn sie auftreten. Diese pythonische Herangehensweise zur Behandlung von
+ Fehlern wird oft als :term:`EAFP` beschrieben.
+
Checks
------
@@ -110,9 +123,8 @@ Checks
* Schreibt eine benutzerdefinierte Ausnahme :class:`Outliers`, die eine
:class:`Exception` auslöst, wenn die Variable ``x`` größer oder kleiner als
- ``3`` ist?
+ ``3`` ist.
* Handelt es sich bei der Überprüfung, ob ein Objekt eine Liste ist
(:ref:`Check: list `) um eine Programmierung im Stil von
- :abbr:`LBYL (look before you leap)` oder :abbr:`EAFP (easier to ask
- forgiveness than permission)`?
+ :term:`LBYL` oder :term:`EAFP`?
diff --git a/docs/control-flow/index.rst b/docs/control-flow/index.rst
new file mode 100644
index 00000000..2aaa21d8
--- /dev/null
+++ b/docs/control-flow/index.rst
@@ -0,0 +1,34 @@
+Kontrollflüsse
+==============
+
+Python verfügt über eine ganze Reihe von :term:`Kontrollflüssen
+` um die Code-Ausführung und den Programmablauf, einschließlich
+gängiger Verzweigungen und Schleifen, zu steuern:
+
+:doc:`boolean`
+ überprüfen Werte und Identität und ermöglichen Verknüpfungen zwischen
+ beiden.
+:doc:`conditional`
+ führen den Codeblock nach der ersten wahren Bedingung einer ``if``- oder
+ ``elif``-Anweisung aus; wenn keine der Bedingungen wahr ist, wird der
+ Codeblock nach dem ``else`` ausgeführt.
+:doc:`loops`
+ Während ``while``-Schleifen so lange ausgeführt werden, wie die Bedingung
+ wahr ist, iterieren ``for``-Schleifen über
+ :doc:`../types/sequences-sets/lists`, :doc:`../types/sequences-sets/tuples`
+ und :doc:`../types/sequences-sets/sets`.
+:doc:`exceptions`
+ behandeln meist Fehler, die während der Ausführung von Programmen passieren.
+:doc:`with`
+ regelt :abbr:`u.a. (unter anderem)` den Zugriff auf Dateien, das Locking von
+ Threads und die Unterdrückung von :doc:`exceptions`.
+
+.. toctree::
+ :titlesonly:
+ :hidden:
+
+ boolean
+ conditional
+ loops
+ exceptions
+ with
diff --git a/docs/control-flows/loops.rst b/docs/control-flow/loops.rst
similarity index 88%
rename from docs/control-flows/loops.rst
rename to docs/control-flow/loops.rst
index 579dbcb5..b16437eb 100644
--- a/docs/control-flows/loops.rst
+++ b/docs/control-flow/loops.rst
@@ -60,10 +60,11 @@ Die ``for``-Schleife ist einfach, aber mächtig, weil sie über einen beliebigen
iterierbaren Typ, wie eine Liste oder ein Tupel, iterieren kann. Anders als in
vielen anderen Sprachen iteriert die ``for``-Schleife in Python über jedes
Element in einer Sequenz (:abbr:`z.B. (zum Beispiel)` eine :doc:`Liste
-<../types/lists>` oder ein :doc:`../types/tuples`), was sie eher zu einer
-``foreach``-Schleife macht. Die folgende Schleife verwendet den `Modulo
-`_-Operator ``%`` als
-Bedingung für as erste Vorkommen einer ganzen Zahl, die durch ``5`` teilbar ist:
+<../types/sequences-sets/lists>` oder ein :doc:`../types/sequences-sets/tuples`),
+was sie eher zu einer *for each*-Schleife macht. Die folgende Schleife verwendet
+den `Modulo `_-Operator
+``%`` als Bedingung für das erste Vorkommen einer ganzen Zahl, die durch ``5``
+teilbar ist:
.. code-block:: pycon
@@ -138,9 +139,10 @@ Jede List Comprehension in Python enthält drei Elemente:
ist das Objekt oder der Wert in einem :samp:`{ITERABLE}`. Im obigen Beispiel
ist der Wert ``i``.
:samp:`{ITERABLE}`
- ist eine :doc:`Liste <../types/lists>`, ein :doc:`Set <../types/sets>`, ein
- Generator oder ein anderes Objekt, das seine Elemente einzeln zurückgeben
- kann. Im obigen Beispiel ist die Iterable ``range(8)``.
+ ist eine :doc:`Liste <../types/sequences-sets/lists>`, ein :doc:`Set
+ <../types/sequences-sets/sets>`, ein Generator oder ein anderes Objekt, das
+ seine Elemente einzeln zurückgeben kann. Im obigen Beispiel ist die Iterable
+ ``range(8)``.
Ihr könnt mit List Comprehensions auch optional Bedingungen verwenden, die
üblicherweise am Ende des Ausdruck angehängt werden:
diff --git a/docs/control-flows/myFile1.py b/docs/control-flow/myFile1.py
similarity index 100%
rename from docs/control-flows/myFile1.py
rename to docs/control-flow/myFile1.py
diff --git a/docs/control-flows/myFile2.py b/docs/control-flow/myFile2.py
similarity index 100%
rename from docs/control-flows/myFile2.py
rename to docs/control-flow/myFile2.py
diff --git a/docs/control-flows/with.py b/docs/control-flow/with.py
similarity index 100%
rename from docs/control-flows/with.py
rename to docs/control-flow/with.py
diff --git a/docs/control-flow/with.rst b/docs/control-flow/with.rst
new file mode 100644
index 00000000..8ef42e90
--- /dev/null
+++ b/docs/control-flow/with.rst
@@ -0,0 +1,83 @@
+Kontextmanagement mit ``with``
+==============================
+
+Eine rationellere Art, das Muster ``try``-``except``-``finally`` zu kapseln, ist
+die Verwendung des Schlüsselworts ``with`` und eines Kontextmanagers. Python
+definiert Kontextmanager für Dinge wie den Zugriff auf :doc:`/save-data/files`
+und eigene Kontextmanager. Ein Vorteil von Kontextmanagern ist, dass sie
+Bereinigungsaktionen definieren können, die immer ausgeführt werden, unabhängig
+davon, ob eine Ausnahme auftritt oder nicht.
+
+.. seealso::
+ :doc:`python3:library/contextlib`
+
+Öffnen und Schließen von Dateien
+--------------------------------
+
+Die folgende Auflistung zeigt das Öffnen und Lesen einer Datei unter Verwendung
+von ``with`` und einem Kontextmanager.
+
+.. literalinclude:: with.py
+ :linenos:
+
+Hier wird ein Kontextmanager eingerichtet, der die Funktion ``open`` und den
+darauf folgenden Block umschließt. Die vordefinierte Aufräumaktion des
+Kontextmanagers schließt die Datei, auch wenn eine Ausnahme auftritt. Solange
+der Ausdruck in der ersten Zeile ausgeführt wird, ohne eine Ausnahme
+auszulösen, wird die Datei immer geschlossen. Dieser Code ist äquivalent zu
+diesem Code:
+
+.. literalinclude:: with_alt.py
+ :linenos:
+
+.. seealso::
+ * :doc:`../save-data/files`
+
+Locking
+-------
+
+:class:`threading.Lock` kann mit ``try``-``finally`` verwendet werden:
+
+.. code-block:: Python
+
+ lock = threading.Lock()
+
+ try:
+ print("a Job")
+ print("another Job")
+ finally:
+ lock.release()
+
+Eleganter ist jedoch die Verwendung mit dem Kontextmanager:
+
+.. code-block:: Python
+
+ with lock:
+ print("a Job")
+ print("another Job")
+
+.. seealso::
+ `Sorgfältiges Threading mit Locks
+ `_
+
+Exceptions unterdrücken
+-----------------------
+
+Kontextmanager können auch verwendet werden um die Ausgabe von :doc:`exceptions`
+zu unterdrücken und die Ausführung fortzusetzen.
+
+.. code-block:: Python
+
+ try:
+ os.remove("somefile.tmp")
+ except FileNotFoundError:
+ pass
+
+Dies kann eleganter geschrieben werden mit:
+
+.. code-block:: Python
+
+ from contextlib import suppress
+
+ with suppress(FileNotFoundError):
+ os.remove("somefile.tmp")
diff --git a/docs/control-flows/with_alt.py b/docs/control-flow/with_alt.py
similarity index 84%
rename from docs/control-flows/with_alt.py
rename to docs/control-flow/with_alt.py
index f289bd72..c14642bf 100644
--- a/docs/control-flows/with_alt.py
+++ b/docs/control-flow/with_alt.py
@@ -1,4 +1,4 @@
-filename = "myfile1.py"
+filename = "myFile1.py"
try:
f = open(filename, "r")
for line in f:
diff --git a/docs/control-flows/boolean.rst b/docs/control-flows/boolean.rst
deleted file mode 100644
index dfd81b69..00000000
--- a/docs/control-flows/boolean.rst
+++ /dev/null
@@ -1,66 +0,0 @@
-Boolesche Werte und Ausdrücke
-=============================
-
-In Python gibt es mehrere Möglichkeiten, boolesche Werte auszudrücken; die
-boolesche Konstante ``False``, ``0``, der Python-Typ :doc:`../types/none` und
-leere Werte (:abbr:`z.B. (zum Beispiel)` die leere Liste ``[]`` oder die leere
-Zeichenkette ``""``) werden alle als ``False`` betrachtet. Die boolesche
-Konstante ``True`` und alles andere wird als ``True`` betrachtet.
-
-``<``, ``<=``, ``==``, ``>``, ``>=``
- vergleicht Werte.
-``is``, ``is not``, ``in``, ``not in``
- überprüft die Identität.
-``and``, ``not``, ``or``
- sind logischen Operatoren, mit denen die oben genannten Überprüfungen
- verknüpft werden können.
-
-.. code-block:: pycon
-
- >>> x = 3
- >>> y = 3.0
- >>> z = [3, 4, 5]
- >>> x == y
- True
- >>> x is y
- False
- >>> x is not y
- True
- >>> x in z
- True
- >>> id(x)
- 4375911432
- >>> id(y)
- 4367574480
- >>> id(z[0])
- 4375911432
-
-Wenn ``x`` und ``z[0]`` die gleiche ID im Speicher haben, bedeutet das, dass wir
-an zwei Stellen auf dasselbe Objekt verweisen.
-
-Am häufigsten werden ``is`` und ``is not`` in Verbindung mit
-:doc:`../types/none` verwendet:
-
-.. code-block:: pycon
-
- >>> x is None
- False
- >>> x is not None
- True
-
-Der Python-Style-Guide in :pep:`8` besagt, dass ihr Identität verwenden solltet,
-um mit :doc:`../types/none` zu vergleichen. Ihr solltet also niemals ``x ==
-None`` verwenden, sondern stattdessen ``x is None`` eingeben.
-
-Ihr solltet jedoch nie berechnete Fließkommazahlen miteinander vergleichen:
-
-.. code-block:: pycon
-
- >>> u = 0.6 * 7
- >>> v = 0.7 * 6
- >>> u == v
- False
- >>> u
- 4.2
- >>> v
- 4.199999999999999
diff --git a/docs/control-flows/if-elif-else.rst b/docs/control-flows/if-elif-else.rst
deleted file mode 100644
index b5e600d9..00000000
--- a/docs/control-flows/if-elif-else.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-``if``-``elif``-``else``-Anweisung
-==================================
-
-Der Codeblock nach der ersten wahren Bedingung einer ``if``- oder
-``elif``-Anweisung wird ausgeführt. Wenn keine der Bedingungen wahr ist, wird
-der Codeblock nach dem ``else`` ausgeführt:
-
-.. code-block:: pycon
- :linenos:
-
- >>> x = 1
- >>> if x < 1:
- ... x = 2
- ... y = 3
- ... elif x > 1:
- ... x = 4
- ... y = 5
- ... else:
- ... x = 6
- ... y = 7
- ...
- >>> print(x, y)
- 6 7
-
-Zeilen 5 und 8
- Die ``elif``- und ``else``-Klauseln sind optional, und es kann eine
- beliebige Anzahl von ``elif``-Klauseln geben.
-Zeilen 3, 4, 6, 7, 9 und 10
- Python verwendet Einrückungen, um Blöcke abzugrenzen. Es sind keine
- expliziten Begrenzungszeichen wie Klammern oder geschweifte Klammern
- erforderlich. Jeder Block besteht aus einer oder mehreren Anweisungen, die
- durch Zeilenumbrüche getrennt sind. Alle diese Anweisungen müssen auf der
- gleichen Einrückungsebene stehen.
diff --git a/docs/control-flows/index.rst b/docs/control-flows/index.rst
deleted file mode 100644
index 078e246d..00000000
--- a/docs/control-flows/index.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-Kontrollflüsse
-==============
-
-Python verfügt über eine ganze Reihe von Strukturen zur Kontrolle der
-Code-Ausführung und des Programmablaufs, einschließlich gängiger Verzweigungen
-und Schleifen.
-
-.. toctree::
- :titlesonly:
- :hidden:
-
- boolean
- if-elif-else
- loops
- exceptions
- with
diff --git a/docs/control-flows/with.rst b/docs/control-flows/with.rst
deleted file mode 100644
index 4c77e7dc..00000000
--- a/docs/control-flows/with.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-Kontextmanagement mit ``with``
-==============================
-
-Eine rationellere Art, das Muster ``try-except-finally`` zu kapseln, ist die
-Verwendung des Schlüsselworts ``with`` und eines Kontextmanagers. Python
-definiert Kontextmanager für Dinge wie den Zugriff auf :doc:`/types/files` und
-eigene Kontextmanager. Ein Vorteil von Kontextmanagern ist, dass sie
-standardmäßige Bereinigungsaktionen definieren können, die immer ausgeführt
-werden, unabhängig davon, ob eine Ausnahme auftritt oder nicht.
-
-Die folgende Auflistung zeigt das Öffnen und Lesen einer Datei unter Verwendung
-von ``with`` und einem Kontextmanager.
-
-.. literalinclude:: with.py
- :linenos:
-
-Hier wird ein Kontextmanager eingerichtet, der die Funktion ``open`` und den
-darauf folgenden Block umschließt. Die vordefinierte Aufräumaktion des
-Kontextmanagers schließt die Datei, auch wenn eine Ausnahme auftritt. Solange
-der Ausdruck in der ersten Zeile ausgeführt wird, ohne eine Ausnahme
-auszulösen, wird die Datei immer geschlossen. Dieser Code ist äquivalent zu
-diesem Code:
-
-.. literalinclude:: with_alt.py
- :linenos:
diff --git a/docs/test/arithmetic.py b/docs/document/arithmetic.py
similarity index 82%
rename from docs/test/arithmetic.py
rename to docs/document/arithmetic.py
index fa06fe88..91cd0587 100644
--- a/docs/test/arithmetic.py
+++ b/docs/document/arithmetic.py
@@ -1,6 +1,6 @@
def add(x, y):
"""
- >>> add(7,6)
+ >>> add(7, 6)
13
"""
return x + y
@@ -9,8 +9,8 @@ def add(x, y):
def divide(x, y):
"""Divides the first parameter by the second
>>> x, y, z = 7, -6.0, 0
- >>> divide(x, y)
- -1.1666666666666667
+ >>> round(divide(x, y), 8)
+ -1.16666667
>>> divide(x, z)
Traceback (most recent call last):
File "", line 1, in
@@ -21,7 +21,7 @@ def divide(x, y):
def multiply(x, y):
"""
- >>> multiply(7,6)
+ >>> multiply(7, 6)
42
"""
return x * y
@@ -29,7 +29,7 @@ def multiply(x, y):
def subtract(x, y):
"""
- >>> subtract(7,6)
+ >>> subtract(7, 6)
1
"""
return x - y
diff --git a/docs/document/badges.rst b/docs/document/badges.rst
new file mode 100644
index 00000000..0c42114b
--- /dev/null
+++ b/docs/document/badges.rst
@@ -0,0 +1,35 @@
+Badges
+======
+
+Einige dieser Informationen und mehr können als Badges abgerufen werden. Sie
+sind hilfreich, um einen schnellen Überblick über ein Produkt zu erhalten. Für
+das `cookiecutter-namespace-template
+`_ sind dies
+:abbr:`z.B. (zum Beispiel)`:
+
+|Downloads| |Versions| |Contributors| |License| |Docs|
+
+.. |Downloads| image::
+ https://static.pepy.tech/badge/cookiecutter-namespace-template
+ :target: https://pepy.tech/projects/cookiecutter-namespace-template
+.. |Versions| image::
+ https://img.shields.io/pypi/pyversions/cookiecutter-namespace-template/0.2.9
+ :target: https://pypi.org/project/cookiecutter-namespace-template/0.2.9/
+.. |Contributors| image::
+ https://img.shields.io/github/contributors/veit/cookiecutter-namespace-template.svg
+ :target: https://github.com/veit/cookiecutter-namespace-template/graphs/contributors
+.. |License| image::
+ https://img.shields.io/github/license/veit/cookiecutter-namespace-template.svg
+ :target: https://github.com/veit/cookiecutter-namespace-template/blob/main/LICENSE
+.. |Docs| image::
+ https://readthedocs.org/projects/cookiecutter-namespace-template/badge/?version=latest
+ :target: https://cookiecutter-namespace-template.readthedocs.io/en/latest/
+
+Ihr könnt auch eigene Badges erstellen, :abbr:`z.B. (zum Beispiel)`:
+
+.. image:: https://img.shields.io/badge/dynamic/json?label=Mastodon&query=totalItems&url=https%3A%2F%2Fmastodon.social%2F@JupyterTutorial%2Ffollowers.json&logo=mastodon
+ :alt: Mastodon
+ :target: https://mastodon.social/@JupyterTutorial
+
+.. seealso::
+ * `shields.io `_
diff --git a/docs/document/docstrings.rst b/docs/document/docstrings.rst
deleted file mode 100644
index 4ba83bc6..00000000
--- a/docs/document/docstrings.rst
+++ /dev/null
@@ -1,179 +0,0 @@
-Docstrings
-==========
-
-Mit der Sphinx-Erweiterung `sphinx.ext.autodoc
-`_ können
-Docstrings auch in die Dokumentation aufgenommen werden. Die folgenden drei
-Direktiven können angegeben werden:
-
-.. rst:directive:: automodule
- autoclass
- autoefunction
-
-Diese dokumentieren ein Modul, eine Klasse oder eine Funktion unter Verwendung
-des jeweiligen Docstrings.
-
-Installation
-------------
-
-``sphinx.ext.autodoc`` ist normalerweise bereits in der
-Sphinx-Konfigurationsdatei ``docs/conf.py`` angegeben:
-
-.. code-block:: python
-
- extensions = ["sphinx.ext.autodoc", ...]
-
-Wenn euer Paket und die zugehörige Dokumentation Teil desselben Repository
-sind, werden sie immer dieselbe relative Position im Dateisystem haben. In
-diesem Fall könnt ihr einfach die Sphinx-Konfiguration für ``sys.path``
-bearbeiten, um den relativen Pfad zum Paket anzugeben, also:
-
-.. code-block:: python
-
- sys.path.insert(0, os.path.abspath(".."))
- import MODULE
-
-Wenn ihr eure Sphinx-Dokumentation in einer virtuellen Umgebung installiert
-habt, könnt ihr euer Paket auch dort mitinstallieren, :abbr:`z.B. (zum
-Beispiel)` indem ihr es in eure :file:`requirements.txt`-Datei eintragt.
-
-Beispiele
----------
-
-Hier findet ihr einige Beispiele aus der Dokumentation des
-Python-:py:mod:`string`-Moduls:
-
-.. literalinclude:: autodoc-examples.rst
- :language: rest
- :lines: 3-
-
-Die Ausgabe ist :doc:`autodoc-examples`.
-
-.. note::
- Ihr solltet diese Richtlinien befolgen, wenn ihr Docstrings schreibt:
-
- * :pep:`8#comments`
- * :pep:`257#specification`
-
-``sphinx-autodoc-typehints``
-----------------------------
-
-Mit :pep:`484` wurde eine Standardmethode für den Ausdruck von Typen in
-Python-Code eingeführt. Damit können Typen auch in Docstrings unterschiedlich
-ausgedrückt werden. Die Variante mit Typen nach PEP 484 hat den Vorteil, dass
-Typtester und IDEs zur statischen Codeanalyse eingesetzt werden können.
-
-Python 3 Type-Annotations:
-
- .. code-block:: python
-
- def func(arg1: int, arg2: str) -> bool:
- """Summary line.
-
- Extended description of function.
-
- Args:
- arg1: Description of arg1
- arg2: Description of arg2
-
- Returns:
- Description of return value
-
- """
- return True
-
-Typen in Docstrings:
-
- .. code-block:: python
-
- def func(arg1, arg2):
- """Summary line.
-
- Extended description of function.
-
- Args:
- arg1 (int): Description of arg1
- arg2 (str): Description of arg2
-
- Returns:
- bool: Description of return value
-
- """
- return True
-
-.. note::
- :pep:`484#suggested-syntax-for-python-2-7-and-straddling-code` are currently
- not supported by Sphinx and do not appear in the generated documentation.
-
-.. _napoleon:
-
-``sphinx.ext.napoleon``
------------------------
-
-Die Sphinx-Erweiterung `sphinx.ext.napoleon
-`_ ermöglicht euch, verschiedene
-Abschnitte in Docstrings zu definieren, einschließlich:
-
-* ``Attributes``
-* ``Example``
-* ``Keyword Arguments``
-* ``Methods``
-* ``Parameters``
-* ``Warning``
-* ``Yield``
-
-Es gibt zwei Arten von docstrings in ``sphinx.ext.napoleon``:
-
-* `Google
- `_
-* `NumPy
- `_
-
-Der Hauptunterschied besteht darin, dass Google Einrückungen verwendet und NumPy
-Unterstreichungen:
-
-Google:
-
- .. code-block:: python
-
- def func(arg1, arg2):
- """Summary line.
-
- Extended description of function.
-
- Args:
- arg1 (int): Description of arg1
- arg2 (str): Description of arg2
-
- Returns:
- bool: Description of return value
-
- """
- return True
-
-NumPy:
-
- .. code-block:: python
-
- def func(arg1, arg2):
- """Summary line.
-
- Extended description of function.
-
- Parameters
- ----------
- arg1 : int
- Description of arg1
- arg2 : str
- Description of arg2
-
- Returns
- -------
- bool
- Description of return value
-
- """
- return True
-
-Detaillierte Konfigurationsoptionen findet ihr in `sphinxcontrib.napoleon.Config
-`_.
diff --git a/docs/test/doctest.rst b/docs/document/doctest.rst
similarity index 87%
rename from docs/test/doctest.rst
rename to docs/document/doctest.rst
index 0ae389a4..bdae8f6d 100644
--- a/docs/test/doctest.rst
+++ b/docs/document/doctest.rst
@@ -1,14 +1,14 @@
Doctest
=======
-Das Python-Modul :doc:`doctest ` prüft, ob die in
-einem Docstring angegebenen Tests erfüllt sind.
+Das Python-Modul :doc:`doctest ` prüft, ob Tests in
+einem Docstring oder in einer anderen Textdatei erfüllt sind.
#. In :download:`arithmetic.py` könnt ihr folgenden Docstring hinzufügen:
.. literalinclude:: arithmetic.py
:language: python
- :lines: 9-18
+ :lines: 9-19
:lineno-start: 9
#. Anschließend könnt ihr ihn testen mit:
@@ -28,12 +28,12 @@ einem Docstring angegebenen Tests erfüllt sind.
Expecting nothing
ok
Trying:
- divide(x, y)
+ round(divide(x, y), 8)
Expecting:
- -1.1666666666666667
+ -1.16666667
ok
Trying:
- divide(x, z)
+ divide(x, y)
Expecting:
Traceback (most recent call last):
File "", line 1, in
@@ -75,12 +75,12 @@ einem Docstring angegebenen Tests erfüllt sind.
Expecting nothing
ok
Trying:
- divide(x, y)
+ round(divide(x, y), 8)
Expecting:
- -1.1666666666666667
+ -1.16666667
ok
Trying:
- divide(x, z)
+ divide(x, y)
Expecting:
Traceback (most recent call last):
File "", line 1, in
@@ -114,3 +114,7 @@ einem Docstring angegebenen Tests erfüllt sind.
:language: python
:lines: 38-
:lineno-start: 38
+
+.. seealso::
+ :doc:`doctest ` kann auch zum kontinuierlichen
+ Testen der Dokumentation verwendet werden: :ref:`ci-docs`.
diff --git a/docs/document/index.rst b/docs/document/index.rst
index 0797b9ee..e4e8396d 100644
--- a/docs/document/index.rst
+++ b/docs/document/index.rst
@@ -2,13 +2,13 @@ Dokumentieren
=============
Damit euer Software-Paket sinnvoll genutzt werden kann, sind Dokumentationen
-ierforderlich, die Beschreiben, wie eure Software installiert, betrieben,
+erforderlich, die Beschreiben, wie eure Software installiert, betrieben,
genutzt und verbessert werden kann:
* Diejenigen, die euer Paket nutzen wollen, benötigen Informationen,
* welche Probleme eure Software löst und was die Hauptfunktionen und
- Limitationen der Software sind (``README``)
+ Einschränkungen der Software sind (``README``)
* wie das Software beispielhaft verwendet werden kann
* welche Veränderungen in aktuelleren Software-Versionen gekommen sind
(``CHANGELOG``)
@@ -46,111 +46,13 @@ erhalten können.
* `Google Technical Writing Courses for Engineers
`_
* `Cusy Design System: Schreiben
- `_
+ `_
.. toctree::
:titlesonly:
:hidden:
- start
- rest
- code-blocks
- placeholder
- ui-elements
- directives
- docstrings
- intersphinx
- uml/index
- extensions
- test
+ sphinx/index
+ doctest
+ badges
shot-scraper
-
-Badges
-------
-
-Einige dieser Informationen und mehr können als Badges abgerufen werden. Sie
-sind hilfreich, um einen schnellen Überblick über ein Produkt zu erhalten. Für
-das `cookiecutter-namespace-template
-`_ sind dies
-:abbr:`z.B. (zum Beispiel)`:
-
-|Downloads| |Versions| |Contributors| |License| |Docs|
-
-.. |Downloads| image::
- https://static.pepy.tech/badge/cookiecutter-namespace-template
- :target: https://www.pepy.tech/projects/cookiecutter-namespace-template
-.. |Versions| image::
- https://img.shields.io/pypi/pyversions/cookiecutter-namespace-template/0.2.9
- :target: https://pypi.org/project/cookiecutter-namespace-template/0.2.9/
-.. |Contributors| image::
- https://img.shields.io/github/contributors/veit/cookiecutter-namespace-template.svg
- :target: https://github.com/veit/cookiecutter-namespace-template/graphs/contributors
-.. |License| image::
- https://img.shields.io/github/license/veit/cookiecutter-namespace-template.svg
- :target: https://github.com/veit/cookiecutter-namespace-template/blob/main/LICENSE
-.. |Docs| image::
- https://readthedocs.org/projects/cookiecutter-namespace-template/badge/?version=latest
- :target: https://cookiecutter-namespace-template.readthedocs.io/en/latest/
-
-Ihr könnt auch eigene Badges erstellen, :abbr:`z.B. (zum Beispiel)`:
-
-.. image:: https://img.shields.io/badge/dynamic/json?label=Mastodon&query=totalItems&url=https%3A%2F%2Fmastodon.social%2F@JupyterTutorial%2Ffollowers.json&logo=mastodon
- :alt: Mastodon
- :target: https://mastodon.social/@JupyterTutorial
-
-.. seealso::
- * `shields.io `_
-
-Sphinx
-------
-
-Für umfangreiche Dokumentationen könnt ihr :abbr:`z.B.(zum Beispiel)` `Sphinx
-`_ verwenden, ein Dokumentationswerkzeug, das
-reStructuredText in HTML oder PDF, EPub und man pages umwandelt. Auch die Python
-Basics werden mit Sphinx erstellt. Um einen ersten Eindruck von Sphinx zu
-bekommen, könnt ihr euch den Quellcode dieser Seite unter dem Link `Page source
-<../_sources/document/index.rst.txt>`_ ansehen.
-
-Ursprünglich wurde Sphinx für die Dokumentation von Python entwickelt und wird
-heute in fast allen Python-Projekten verwendet, darunter `NumPy and SciPy
-`_, `Matplotlib
-`_, `Pandas
-`_ und `SQLAlchemy
-`_.
-
-Die Sphinx `autodoc
-`_-Funktion,
-die zur Erstellung von Dokumentation aus
-Python-:doc:`docstrings` verwendet werden kann, könnte ebenfalls zur Verbreitung
-von Sphinx unter Python-Entwicklern beitragen. Insgesamt ermöglicht es Sphinx
-Entwicklungsteams, eine vollständige Dokumentation an Ort und Stelle zu
-erstellen. Oft wird die Dokumentation auch im gleichen :doc:`Git
-`-Repository gespeichert, so dass die
-Erstellung der neuesten Software-Dokumentation einfach bleibt.
-
-Sphinx wird auch in Projekten außerhalb der Python-Gemeinschaft eingesetzt,
-:abbr:`z.B. (zum Beispiel)` für die Dokumentation des Linux-Kernels: `Kernel
-documentation update `_.
-
-`Read the Docs `_ wurde entwickelt, um die
-Dokumentation weiter zu vereinfachen. Read the Docs erleichtert das Erstellen
-und Veröffentlichen von Dokumentationen nach jedem Commit.
-
-Für die Projektdokumentation kann die Visualisierung von :doc:`Git Feature
-Branches
-` und :doc:`Tags
-` mit
-:doc:`Python4DataScience:productive/git/advanced/git-big-picture` hilfreich
-sein.
-
-.. note::
- Wenn der Inhalt von ``long_description`` in ``setup()`` in reStructured Text
- geschrieben ist, wird er als gut formatiertes HTML im :term:`Python Package
- Index` (:term:`PyPI`) angezeigt.
-
-Andere Dokumentationswerkzeuge
-------------------------------
-
-`Pycco `_
- ist eine Python-Portierung von `Docco
- `_.
diff --git a/docs/document/shot-scraper.rst b/docs/document/shot-scraper.rst
index cef293fb..2c498a0a 100644
--- a/docs/document/shot-scraper.rst
+++ b/docs/document/shot-scraper.rst
@@ -19,38 +19,38 @@ Installation
Verwendung
----------
-shot-scraper kann auf zweierleis Art verwendet werden
+shot-scraper kann auf zweierlei Art verwendet werden
#. …für einzelne Screenshots auf der Kommandozeile:
.. code-block:: console
- $ shot-scraper https://jupyter-tutorial.readthedocs.io/de/latest/clean-prep/index.html -o ~/Downloads/clean-prep.png
+ $ shot-scraper https://jupyter-tutorial.readthedocs.io/de/latest/clean-prep/index.html -o ~/Downloads/clean-prep.png
…oder mit zusätzlichen Optionen, z.B. für JavaScript- und CSS-Selektoren:
- .. code-block::
+ .. code-block::
- $ shot-scraper https://jupyter-tutorial.readthedocs.io/de/latest/clean-prep/index.html -s '#overview' -o ~/Downloads/clean-prep.png
+ $ shot-scraper https://jupyter-tutorial.readthedocs.io/de/latest/clean-prep/index.html -s '#overview' -o ~/Downloads/clean-prep.png
#. …für eine Reihe von Screenshots, die in einer YAML-Datei konfiguriert sind:
.. code-block:: yaml
- - url: https://jupyter-tutorial.readthedocs.io/de/latest/clean-prep/index.html
- output: ~/Downloads/clean-prep.png
- - url: https://www.example.org/
- width: 736
- quality: 40
- output: example.jpg
+ - url: https://jupyter-tutorial.readthedocs.io/de/latest/clean-prep/index.html
+ output: ~/Downloads/clean-prep.png
+ - url: https://www.example.org/
+ width: 736
+ quality: 40
+ output: example.jpg
Anschließend kann ``shot-scraper multi`` verwendet werden, z.B.:
.. code-block:: console
- $ shot-scraper multi shots.yaml
- Screenshot of 'https://jupyter-tutorial.readthedocs.io/de/latest/clean-prep/index.html' written to '~(Downloads/clean-prep.png'
- Screenshot of 'https://www.example.org/' written to 'example.jpg'
+ $ shot-scraper multi shots.yaml
+ Screenshot of 'https://jupyter-tutorial.readthedocs.io/de/latest/clean-prep/index.html' written to '~(Downloads/clean-prep.png'
+ Screenshot of 'https://www.example.org/' written to 'example.jpg'
.. seealso::
* In der `README.md
@@ -64,7 +64,7 @@ GitHub-Actions
--------------
shot-scraper lässt sich einfach in GitHub Actions einbinden. Im
-shot-scraper-demo-Repository findet sich auch eine examplarische `shots.yml
+shot-scraper-demo-Repository findet sich auch eine exemplarische `shots.yml
`_.
Einmal am Tag werden zwei Screenshots erzeugt und zurück in das Repository
übertragen. Beachtet jedoch, dass das Speichern von Bilddateien, die sich häufig
diff --git a/docs/document/autodoc-examples.rst b/docs/document/sphinx/autodoc-examples.rst
similarity index 100%
rename from docs/document/autodoc-examples.rst
rename to docs/document/sphinx/autodoc-examples.rst
diff --git a/docs/document/code-blocks.rst b/docs/document/sphinx/code-blocks.rst
similarity index 100%
rename from docs/document/code-blocks.rst
rename to docs/document/sphinx/code-blocks.rst
diff --git a/docs/document/sphinx/convert.rst b/docs/document/sphinx/convert.rst
new file mode 100644
index 00000000..c3c1f805
--- /dev/null
+++ b/docs/document/sphinx/convert.rst
@@ -0,0 +1,67 @@
+Konvertieren
+============
+
+Andere Dateiformate können mit pandoc in :doc:`rest` konvertiert werden.
+
+Installation von pandoc
+-----------------------
+
+`Pandoc `_ ist ein leistungsfähiges
+Dienstprogramm zur Dokumentumwandlung. Wir verwenden es für einfache
+Konvertierungen, aber es ist zu viel mehr in der Lage.
+
+Installation
+------------
+
+Pandoc könnt ihr für die verschiedenen Plattformen installieren:
+
+.. tab:: Debian/Ubuntu
+
+ .. code-block:: console
+
+ $ sudo apt install pandoc
+
+.. tab:: macOS
+
+ .. code-block:: console
+
+ $ brew install pandoc
+
+.. tab:: Windows
+
+ .. code-block:: ps1
+
+ $ choco install pandoc
+
+.. seealso::
+ * `Installing pandoc `_
+
+Konvertieren
+------------
+
+Navigiert im Terminal zu dem Verzeichnis, das die zu konvertierenden Dokumente
+enthält. Gebt dann für jede Datei, die ihr konvertieren möchtet, den Befehl
+:samp:`pandoc -s --toc -f {INPUT_FORMAT} -t rst {MYDOC}.{SUFFIX}` ein:
+
+``-s``
+ erzeugt ein eigenständiges Dokument
+``--toc``
+ erstellt ein Inhaltsverzeichnis (optional)
+``-t``
+ erzeugt eine reStructuredText-Ausgabe
+``-f``
+ teilt pandoc das Eingabeformat mit. Einen Überblick über die verfügbaren
+ Eingabeformate erhaltet ihr in `General options
+ `_.
+
+Korrigieren des konvertierten Dokuments
+---------------------------------------
+
+Wie umfangreich die Korrektur für das konvertierte Dokument ausfällt, hängt
+davon ab, aus welchem Dateiformat ihr konvertiert. Hier sind einige Dinge, auf
+die ihr achten solltet:
+
+* Mehrzeilige Titel müssen in einzeilige konvertiert werden
+* Eigenständige ``**``-Zeichen
+* :samp:`***FETT***` sollte :samp:`**FETT**` sein
+* Fehlerhafte Tabellen
diff --git a/docs/document/directives.rst b/docs/document/sphinx/directives.rst
similarity index 97%
rename from docs/document/directives.rst
rename to docs/document/sphinx/directives.rst
index c6c85b71..e7f40d58 100644
--- a/docs/document/directives.rst
+++ b/docs/document/sphinx/directives.rst
@@ -8,12 +8,6 @@ werden. Sphinx macht hiervon ausgiebig Gebrauch. Hier sind einige Beispiele:
Inhaltsverzeichnis
------------------
-.. toctree::
- :maxdepth: 2
-
- start
- docstrings
-
.. code-block:: rest
.. toctree::
@@ -21,6 +15,7 @@ Inhaltsverzeichnis
start
docstrings
+ ...
Meta-Informationen
~~~~~~~~~~~~~~~~~~
diff --git a/docs/document/sphinx/docstrings.rst b/docs/document/sphinx/docstrings.rst
new file mode 100644
index 00000000..c9cfda38
--- /dev/null
+++ b/docs/document/sphinx/docstrings.rst
@@ -0,0 +1,169 @@
+Docstrings
+==========
+
+Mit der Sphinx-Erweiterung `sphinx.ext.autodoc
+`_ können
+Docstrings auch in die Dokumentation aufgenommen werden. Die folgenden
+Direktiven können angegeben werden
+
+… für Klassen und Ausnahmen:
+
+.. rst:directive:: automodule
+ autoclass
+ autoexception
+
+… für funktionsähnliche Objekte:
+
+.. rst:directive:: autofunction
+ automethod
+ autoproperty
+ autodecorator
+
+… für Daten und Attribute:
+
+.. rst:directive:: autodata
+ autoattribute
+
+Installation
+------------
+
+``sphinx.ext.autodoc`` ist normalerweise bereits in der
+Sphinx-Konfigurationsdatei ``docs/conf.py`` angegeben:
+
+.. code-block:: python
+
+ extensions = ["sphinx.ext.autodoc", ...]
+
+Wenn euer Paket und die zugehörige Dokumentation Teil desselben Repository
+sind, werden sie immer dieselbe relative Position im Dateisystem haben. In
+diesem Fall könnt ihr einfach die Sphinx-Konfiguration für ``sys.path``
+bearbeiten, um den relativen Pfad zum Paket anzugeben, also:
+
+.. code-block:: python
+
+ sys.path.insert(0, os.path.abspath(".."))
+ import MODULE
+
+Wenn ihr eure Sphinx-Dokumentation in einer virtuellen Umgebung installiert
+habt, könnt ihr euer Paket auch dort mitinstallieren, :abbr:`z.B. (zum
+Beispiel)` indem ihr es in eure :file:`requirements.txt`-Datei eintragt.
+
+Beispiele
+---------
+
+Hier findet ihr einige Beispiele aus der Dokumentation des
+Python-:py:mod:`string`-Moduls:
+
+.. literalinclude:: autodoc-examples.rst
+ :language: rest
+ :lines: 3-
+
+Die Ausgabe ist :doc:`autodoc-examples`.
+
+Richtlinien
+-----------
+
+In :pep:`8` gibt es nur einen kurzen Hinweise auf Konventionen für einen guten
+Docstring: :pep:`Documentation Strings <8#comments>`. Weitere :abbr:`PEPs (Python Enhancement Proposals)` beziehen sich auf das :pep:`Docstring Processing
+System Framework <256>`:
+
+:pep:`257`
+ beschreibt Docstring-Konventionen:
+
+ * Was sollte wo dokumentiert werden?
+ * Die erste Zeile soll eine einzeilige Zusammenfassung sein.
+
+:pep:`258`
+ spezifiziert die System zur Verarbeitung von Docstrings.
+
+:pep:`287`
+ spezifiziert die Docstring-Syntax.
+
+Im `Google Python Style Guide
+`_ gibt es darüberhinaus noch
+spezifischere Richtlinien für `Python Konnentare und Docstrings
+`_.
+Auch der `NumPy Style guide
+`_ liefert noch weitere
+`Docstring-Standards `_. Der wesentliche Unterschied zwischen beiden besteht darin,
+dass Google Einrückungen verwendet und NumPy Unterstreichungen:
+
+Google Python Style Guide:
+ .. code-block:: python
+
+ def func(arg1: int, arg2: str) -> bool:
+ """Summary line.
+
+ Extended description of function.
+
+ Args:
+ arg1 (int): Description of arg1
+ arg2 (str): Description of arg2
+
+ Returns:
+ bool: Description of return value
+
+ """
+ return True
+
+NumPy Style Guide:
+ .. code-block:: python
+
+ def func(arg1: int, arg2: str) -> bool:
+ """Summary line.
+
+ Extended description of function.
+
+ Parameters
+ ----------
+ arg1 : int
+ Description of arg1
+ arg2 : str
+ Description of arg2
+
+ Returns
+ -------
+ bool
+ Description of return value
+
+ """
+ return True
+
+.. _napoleon:
+
+``sphinx.ext.napoleon``
+~~~~~~~~~~~~~~~~~~~~~~~
+
+Die Sphinx-Erweiterung `sphinx.ext.napoleon
+`_ verarbeitet sowohl
+Docstrings, die dem Google Python Style Guide als auch dem NumPy Style Guide
+entsprechen:
+
+Detaillierte Konfigurationsoptionen findet ihr in `sphinxcontrib.napoleon.Config
+`_.
+
+``sphinx-autodoc-typehints``
+----------------------------
+
+Mit :pep:`484` wurde eine Standardmethode für den Ausdruck von Typen in
+Python-Code eingeführt. Damit können Typen auch in Docstrings unterschiedlich
+ausgedrückt werden. Die Variante mit Typen nach PEP 484 hat den Vorteil, dass
+Typ-Tester und IDEs zur statischen Codeanalyse eingesetzt werden können.
+
+Python 3 Type-Annotations in Docstrings:
+ .. code-block:: python
+
+ def func(arg1: int, arg2: str) -> bool:
+ """Summary line.
+
+ Extended description of function.
+
+ Args:
+ arg1 (int): Description of arg1
+ arg2 (str): Description of arg2
+
+ Returns:
+ bool: Description of return value
+
+ """
+ return True
diff --git a/docs/document/extensions.rst b/docs/document/sphinx/extensions.rst
similarity index 94%
rename from docs/document/extensions.rst
rename to docs/document/sphinx/extensions.rst
index 90b0bbc0..fc8eb94d 100644
--- a/docs/document/extensions.rst
+++ b/docs/document/sphinx/extensions.rst
@@ -22,7 +22,7 @@ Eingebaute Erweiterungen
`sphinx.ext.intersphinx `_
ermöglicht das Einbinden anderer Projektdokumentationen.
`sphinx.ext.mathjax `_
- Rendertmathematische Formeln über JavaScript.
+ rendert mathematische Formeln über JavaScript.
`sphinx.ext.napoleon `_
unterstützt NumPy und Google Style Docstrings.
`sphinx.ext.todo `_
@@ -51,7 +51,7 @@ Erweiterungen von Drittanbietern
`numpydoc `_
`NumPy `_ Sphinx-Erweiterung.
`Releases `_
- schreibt eine Changelog-Datei.
+ schreibt eine :file:`CHANGELOG`-Datei.
`sphinxcontrib-napoleon `_
Präprozessor zum Parsen von NumPy- und Google-Style Docstrings.
`sphinx-autodoc-annotation `_
@@ -73,15 +73,16 @@ Erweiterungen von Drittanbietern
`Sphinx-Needs `_
erlaubt die Definition, Verlinkung und Filterung von need-Objekten, also
:abbr:`z.B. (zum Beispiel)` Anforderungen und Testfälle
-`Sphinx-pyreverse `_
+`Sphinx-pyreverse `_
erstellt ein UML-Diagramm von Python-Modulen
`sphinx-jsonschema `_
zeigt ein `JSON Schema `_ in der
Sphinx-Dokumentation
`Sphinxcontrib-mermaid `_
- ermöglicht euch, Mermaid-Grafiken in Ihre Dokumente einzubetten.
+ ermöglicht euch, `Mermaid `_-Grafiken in eure
+ Dokumente einzubetten.
`Sphinx Sitemap Generator Extension `_
- generiert multiversion- und multilanguage `sitemaps
+ generiert multiversion- und multilanguage-`sitemaps
`_ für die HTML-Version
`Sphinx Lint `_
basiert auf `rstlint.py
diff --git a/docs/document/sphinx/index.rst b/docs/document/sphinx/index.rst
new file mode 100644
index 00000000..07ae9be6
--- /dev/null
+++ b/docs/document/sphinx/index.rst
@@ -0,0 +1,63 @@
+Sphinx
+======
+
+Für umfangreiche Dokumentationen könnt ihr :abbr:`z.B.(zum Beispiel)` `Sphinx
+`_ verwenden, ein Dokumentationswerkzeug, das
+reStructuredText in HTML oder PDF, EPub und man pages umwandelt. Auch die Python
+Basics werden mit Sphinx erstellt. Um einen ersten Eindruck von Sphinx zu
+bekommen, könnt ihr euch den Quellcode dieser Seite unter dem Link `Page source
+<../_sources/document/index.rst.txt>`_ ansehen.
+
+Ursprünglich wurde Sphinx für die Dokumentation von Python entwickelt und wird
+heute in fast allen Python-Projekten verwendet, darunter `NumPy and SciPy
+`_, `Matplotlib
+`_, `pandas
+`_ und `SQLAlchemy
+`_.
+
+Die Sphinx `autodoc
+`_-Funktion,
+die zur Erstellung von Dokumentation aus
+Python-:doc:`docstrings` verwendet werden kann, könnte ebenfalls zur Verbreitung
+von Sphinx unter Python-Entwicklern beitragen. Insgesamt ermöglicht es Sphinx
+Entwicklungsteams, eine vollständige Dokumentation an Ort und Stelle zu
+erstellen. Oft wird die Dokumentation auch im gleichen :doc:`Git
+`-Repository gespeichert, so dass die
+Erstellung der neuesten Software-Dokumentation einfach bleibt.
+
+Sphinx wird auch in Projekten außerhalb der Python-Gemeinschaft eingesetzt,
+:abbr:`z.B. (zum Beispiel)` für die Dokumentation des Linux-Kernels: `Kernel
+documentation update `_.
+
+`Read the Docs `_ wurde entwickelt, um die
+Dokumentation weiter zu vereinfachen. Read the Docs erleichtert das Erstellen
+und Veröffentlichen von Dokumentationen nach jedem Commit.
+
+Für die Projektdokumentation kann die Visualisierung von :doc:`Git Feature
+Branches
+` und :doc:`Tags
+` mit
+:doc:`Python4DataScience:productive/git/advanced/git-big-picture` hilfreich
+sein.
+
+.. note::
+ Wenn der Inhalt von ``long_description`` in ``setup()`` in reStructured Text
+ geschrieben ist, wird er als gut formatiertes HTML im :term:`Python Package
+ Index` (:term:`PyPI`) angezeigt.
+
+.. toctree::
+ :titlesonly:
+ :hidden:
+
+ start
+ rest
+ convert
+ code-blocks
+ placeholder
+ ui-elements
+ directives
+ docstrings
+ intersphinx
+ uml/index
+ extensions
+ test
diff --git a/docs/document/intersphinx.rst b/docs/document/sphinx/intersphinx.rst
similarity index 98%
rename from docs/document/intersphinx.rst
rename to docs/document/sphinx/intersphinx.rst
index 4e41cc84..5d3f7125 100644
--- a/docs/document/intersphinx.rst
+++ b/docs/document/sphinx/intersphinx.rst
@@ -72,7 +72,7 @@ Benutzerdefinierte Links
------------------------
Ihr könnt auch eure eigenen ``intersphinx``-Zuweisungen erstellen, wenn
-:abbr:`z.B. (zum Beispiel)` ``objects.inv`` Fehler aufweis wie bei `Beautiful
+:abbr:`z.B. (zum Beispiel)` ``objects.inv`` Fehler aufweist wie bei `Beautiful
Soup `_.
Der Fehler kann mit korrigiert werden:
diff --git a/docs/document/main.py b/docs/document/sphinx/main.py
similarity index 100%
rename from docs/document/main.py
rename to docs/document/sphinx/main.py
diff --git a/docs/document/main.py.orig b/docs/document/sphinx/main.py.orig
similarity index 100%
rename from docs/document/main.py.orig
rename to docs/document/sphinx/main.py.orig
diff --git a/docs/document/placeholder.rst b/docs/document/sphinx/placeholder.rst
similarity index 96%
rename from docs/document/placeholder.rst
rename to docs/document/sphinx/placeholder.rst
index 71adf42a..5a5da5f4 100644
--- a/docs/document/placeholder.rst
+++ b/docs/document/sphinx/placeholder.rst
@@ -1,7 +1,7 @@
Platzhalter
-----------
-Sphinx unterscheidet die folgenden Platzhaltervariablen:
+Sphinx unterscheidet die folgenden Platzhalter-Variablen:
.. rst:role:: envvar
diff --git a/docs/document/rest.rst b/docs/document/sphinx/rest.rst
similarity index 96%
rename from docs/document/rest.rst
rename to docs/document/sphinx/rest.rst
index 7bf3832d..451f1a98 100644
--- a/docs/document/rest.rst
+++ b/docs/document/sphinx/rest.rst
@@ -36,11 +36,11 @@ werden.
Inline-Auszeichnung
-------------------
-*Kursiv*, **fett** und ``vorformattiert``
+*Kursiv*, **fett** und ``vorformatiert``
.. code-block:: rest
- *Kursiv*, **fett** und ``vorformattiert``
+ *Kursiv*, **fett** und ``vorformatiert``
Links
-----
@@ -96,12 +96,12 @@ Link zur :doc:`Startseite <../index>` oder zu :doc:`docstrings`.
Dokumente herunterladen
:::::::::::::::::::::::
-Link zu einem Dokument, das nicht von Sohinx gerendert werden soll, :abbr:`z.B.
+Link zu einem Dokument, das nicht von Sphinx gerendert werden soll, :abbr:`z.B.
(zum Beispiel)` zu :download:`autodoc-examples.rst`.
.. code-block:: rest
- Link zu einem Dokument, das nicht von Sohinx gerendert werden soll,
+ Link zu einem Dokument, das nicht von Sphinx gerendert werden soll,
:abbr:`z.B. (zum Beispiel)` zu :download:`docstrings-example.rst`.
Bilder
@@ -170,14 +170,14 @@ Definitionsliste
Term
Definition des Begriffs
-EIn anderer Term
+Ein anderer Term
… und seine Definition
.. code-block:: rest
Term
Definition des Begriffs
- EIn anderer Term
+ Ein anderer Term
… und seine Definition
Verschachtelte Listen
diff --git a/docs/document/start.rst b/docs/document/sphinx/start.rst
similarity index 97%
rename from docs/document/start.rst
rename to docs/document/sphinx/start.rst
index ec7dd319..870b7319 100644
--- a/docs/document/start.rst
+++ b/docs/document/sphinx/start.rst
@@ -10,13 +10,17 @@ Installation und Start
.. code-block:: console
+ $ mkdir docs_proj
+ $ cd docs_proj
$ python3 -m venv .venv
.. tab:: Windows
.. code-block:: ps1con
- C:> python -m venv .venv
+ C:> mkdir docs_proj
+ C:> cd docs_proj
+ C:> py -m venv .venv
#. Wechselt in die virtuelle Umgebung und installiert dort Sphinx:
diff --git a/docs/document/test.rst b/docs/document/sphinx/test.rst
similarity index 89%
rename from docs/document/test.rst
rename to docs/document/sphinx/test.rst
index 77267890..7853e0ec 100644
--- a/docs/document/test.rst
+++ b/docs/document/sphinx/test.rst
@@ -89,13 +89,15 @@ Die Ausgabe kann dann :abbr:`z.B. (zum Beispiel)` so aussehen:
…
(accessibility/color: line 114) broken https://chrome.google.com/webstore/detail/nocoffee/jjeeggmbnhckmgdhmgdckeigabjfbddl - 404 Client Error: Not Found for url: https://chrome.google.com/webstore/detail/nocoffee/jjeeggmbnhckmgdhmgdckeigabjfbddl
+.. _ci-docs:
+
Kontinuierliche Integration
~~~~~~~~~~~~~~~~~~~~~~~~~~~
:abbr:`Ggf. (Gegebenenfalls)` könnt ihr auch automatisiert in eurer
:term:`CI`-Pipeline überprüfen, ob die Dokumentation gebaut wird und die Links
-gültig sind. In :doc:`../test/tox` kann die Konfiguration folgendermaßen ergänzt
-werden:
+gültig sind. In :doc:`../../test/tox` kann die Konfiguration folgendermaßen
+ergänzt werden:
.. code-block:: ini
:caption: tox.ini
@@ -161,8 +163,34 @@ ein:
Mit :doc:`Sybil:index` könnt ihr nicht nur :doc:`rest` überprüfen, sondern
:abbr:`z.B. (zum Beispiel)` auch :doc:`Markdown ` und
:doc:`Myst `. Darüberhinaus kann Sybil auch Code-Blöcke in der
- Dokumentation entweder mit :doc:`../test/pytest/index` oder mit
- :doc:`../test/unittest` überprüfen.
+ Dokumentation entweder mit :doc:`../../test/pytest/index` oder mit
+ :doc:`../../test/unittest` überprüfen.
+
+.. _test_code:
+
+Code
+----
+
+Mit der eingebauten Python-Bibliothek :doc:`../doctest` könnt ihr auch Code in
+eurer Dokumentation mit der :func:`doctest.testfile`-Methode testen:
+
+.. code-block:: Python
+
+ import doctest
+
+ doctest.testfile("example.rst")
+
+Dieses kurze Skript führt alle interaktiven Python-Beispiele aus, die in der
+Datei :file:`example.rst` enthalten sind, und überprüft sie. Der Inhalt der
+Datei wird so behandelt, als wäre er ein einziger riesiger Docstring.
+
+.. seealso::
+ Ein einfaches Beispiel findet ihr in der Python-Dokumentation: `Simple Usage:
+ Checking Examples in a Text File
+ `_.
+
+ Eine andere Möglichkeit, Code in Dokumentationen zu testen ist
+ `pytest-doctestplus `_.
Code-Formatierung
-----------------
@@ -183,7 +211,7 @@ wir die Bibliothek über das :doc:`pre-commit
additional_dependencies:
- black
-blacken-docs unterstützt aktuell die folgenden black-Optionen:
+blacken-docs unterstützt aktuell die folgenden Black-Optionen:
* `line-length
`_
@@ -202,7 +230,7 @@ Die englische Rechtschreibung lässt sich überprüfen mit `codespell
Version der auf `Wikipedia
`_
verfügbaren Wörterbücher. :abbr:`Ggf. (Gegebenenfalls)` könnt ihr jedoch auch
-eigene Wörterbucher mit der ``--builtin``-Option bereitstellen.
+eigene Wörterbücher mit der ``--builtin``-Option bereitstellen.
Ihr könnt ``codespell`` in der :file:`pyproject.toml` konfigurieren, :abbr:`z.B.
(zum Beispiel)`:
@@ -242,7 +270,7 @@ Vale wird von vielen Open-Source-Projekten genutzt, :abbr:`u.a. (unter anderem)`
von
* GitLab (`.vale.ini
- `_, `Regeln
+ `__, `Regeln
`__)
* Homebrew (`.vale.ini
`__, `Regeln
@@ -280,7 +308,7 @@ Vale wird in der :file:`.vale.ini`-Datei konfiguriert:
BasedOnStyles = cusy-de
.. seealso::
- * `Vale Configuration `_
+ * `.vale.ini `__
Anschließend solltet ihr :abbr:`ggf. (gegebenenfalls)` eure :ref:`.gitignore
`-Datei aktualisieren:
@@ -350,7 +378,7 @@ Ihr könnt ``interrogate`` :abbr:`z.B. (zum Beispiel)` in der
* `Configuration `_
-Nun könnt ihr ``interrogate`` in eure :doc:`../test/tox`-Datei einfügen,
+Nun könnt ihr ``interrogate`` in eure :doc:`../../test/tox`-Datei einfügen,
:abbr:`z.B. (zum Beispiel)` mit
.. code-block:: ini
diff --git a/docs/document/sphinx/ui-elements.rst b/docs/document/sphinx/ui-elements.rst
new file mode 100644
index 00000000..9c32128f
--- /dev/null
+++ b/docs/document/sphinx/ui-elements.rst
@@ -0,0 +1,51 @@
+UI-Elemente und Interaktionen
+=============================
+
+Für die Dokumentation des User Interfaces und dessen Interaktionen stellt Sphinx
+drei verschiedene Rollen bereit: ``guilabel``, ``kbd`` und ``menuselection``:
+
+.. list-table::
+ :header-rows: 1
+
+ * - Eingabe
+ - Ausgabe
+ - Anmerkungen
+ * - .. code-block:: rest
+
+ :guilabel:`Cancel`
+ - :guilabel:`Cancel`
+ - Jede im User Interface verwendete Beschriftung kann mit dieser Rolle
+ gekennzeichnet werden, einschließlich der Beschriftung von Schaltflächen,
+ Fenstertiteln, Feld-, Menü- und Menüauswahl-Namen und Werten in
+ Auswahllisten.
+ * - .. code-block:: rest
+
+ :guilabel:`&Cancel`
+ - :guilabel:`&Cancel`
+ - Tastenkürzel für die GUI-Beschriftung können mit einem et-Zeichen (``&``)
+ eingefügt werden; dieses führt in der Ausgabe zur Unterstreichung des
+ Folgebuchstabens.
+
+ .. note::
+ Wenn ihr ein et-Zeichen einfügen wollt, könnt ihr es einfach
+ verdoppeln.
+ * - .. code-block:: rest
+
+ :kbd:`Ctrl-s`
+ - :kbd:`Ctrl-s`
+ - Dies stellt eine Folge von Tasteneingaben dar. Welche Form die
+ Tastenfolge hat, kann von plattform- oder anwendungsspezifischen
+ Konventionen abhängen. Dabei sollten die Namen von Modifikatortasten
+ ausgeschrieben werden, um die Zugänglichkeit zu verbessern.
+ Tastaturbeschriftung referenziert werden.
+ * - .. code-block:: rest
+
+ :menuselection:`File --> Save`
+ - :menuselection:`File --> Save`
+ - Eine Menüauswahl wird mit der Rolle ``menuselection`` gekennzeichnet.
+ Diese markiert komplette Sequenz, einschließlich der Auswahl von
+ Untermenüs, bestimmter Operationen oder beliebiger Untersequenzen. Die
+ Namen der einzelnen Auswahlen werden durch ``-->`` getrennt.
+
+ :rst:role:`menuselection` unterstützt genau wie :rst:role:`guilabel`
+ Tastaturkürzel mit einem et-Zeichen (``&``).
diff --git a/docs/document/uml/abstract-class.svg b/docs/document/sphinx/uml/abstract-class.svg
similarity index 100%
rename from docs/document/uml/abstract-class.svg
rename to docs/document/sphinx/uml/abstract-class.svg
diff --git a/docs/document/uml/activity-diagram.svg b/docs/document/sphinx/uml/activity-diagram.svg
similarity index 100%
rename from docs/document/uml/activity-diagram.svg
rename to docs/document/sphinx/uml/activity-diagram.svg
diff --git a/docs/document/uml/activity-sync.svg b/docs/document/sphinx/uml/activity-sync.svg
similarity index 100%
rename from docs/document/uml/activity-sync.svg
rename to docs/document/sphinx/uml/activity-sync.svg
diff --git a/docs/document/uml/annotation.svg b/docs/document/sphinx/uml/annotation.svg
similarity index 100%
rename from docs/document/uml/annotation.svg
rename to docs/document/sphinx/uml/annotation.svg
diff --git a/docs/document/uml/circle.svg b/docs/document/sphinx/uml/circle.svg
similarity index 100%
rename from docs/document/uml/circle.svg
rename to docs/document/sphinx/uml/circle.svg
diff --git a/docs/document/uml/diamond.svg b/docs/document/sphinx/uml/diamond.svg
similarity index 100%
rename from docs/document/uml/diamond.svg
rename to docs/document/sphinx/uml/diamond.svg
diff --git a/docs/document/uml/entity.svg b/docs/document/sphinx/uml/entity.svg
similarity index 100%
rename from docs/document/uml/entity.svg
rename to docs/document/sphinx/uml/entity.svg
diff --git a/docs/document/uml/enum.svg b/docs/document/sphinx/uml/enum.svg
similarity index 100%
rename from docs/document/uml/enum.svg
rename to docs/document/sphinx/uml/enum.svg
diff --git a/docs/document/sphinx/uml/index.rst b/docs/document/sphinx/uml/index.rst
new file mode 100644
index 00000000..de72b35b
--- /dev/null
+++ b/docs/document/sphinx/uml/index.rst
@@ -0,0 +1,166 @@
+Unified Modeling Language (UML)
+===============================
+
+Installation
+------------
+
+#. Installiert `plantuml `_:
+
+ .. tab:: Linux
+
+ .. code-block:: console
+
+ $ sudo apt install plantuml
+
+ .. tab:: macOS
+
+ .. code-block:: console
+
+ $ brew install plantuml
+
+ .. tab:: Windows
+
+ .. code-block:: ps1
+
+ $ choco install plantuml
+
+#. Installiert `sphinxcontrib-plantuml
+ `_:
+
+ .. tab:: Linux
+
+ .. code-block:: console
+
+ $ python -m pip install sphinxcontrib-plantuml
+
+ .. tab:: macOS
+
+ .. code-block:: console
+
+ $ python -m pip install sphinxcontrib-plantuml
+
+ .. tab:: Windows
+
+ .. code-block:: ps1con
+
+ C:> python -m pip install sphinxcontrib-plantuml
+
+#. Konfiguriert Sphinx in der ``conf.py``-Datei:
+
+ .. code-block:: python
+
+ extensions = [..., "sphinxcontrib.plantuml"]
+
+ plantuml = "/PATH/TO/PLANTUML"
+
+ .. note::
+ Auch in Windows werden in der Pfadangabe ``/`` angegeben.
+
+Sequenzdiagramm
+---------------
+
+.. image:: sequence-diagram.svg
+
+.. code-block:: rest
+
+ .. uml::
+
+ Browser -> Server: Authentifizierungsanfrage
+ Server --> Browser: Authentifizierungsantwort
+
+ Browser -> Server: Eine andere Authentifizierungsanfrage
+ Browser <-- Server: Eine andere Authentifizierungsantwort
+
+``->``
+ wird verwendet, um eine Nachricht zwischen zwei Akteuren zu zeichnen. Die
+ Akteure müssen nicht explizit deklariert werden.
+``-->``
+ wird verwendet, um eine gepunktete Linie zu zeichnen.
+``<- und <--``
+ verändert die Zeichnung nicht, kann aber die Lesbarkeit erhöhen.
+
+Anwendungsfall-Diagramm
+-----------------------
+
+.. image:: use-case-diagram.svg
+
+.. code-block:: rest
+
+ .. uml::
+
+ :Nutzende Person: --> (Verwendung)
+ "Gruppe von\nAdministratoren" as Admin
+ "Verwenden der\nAnwendung" as (Verwendung)
+ Admin --> (Administrieren\nder Anwendung)
+
+Anwendungsfälle werden von runden Klammern ``()`` umschlossen und ähneln einem
+Oval.
+
+Alternativ kann auch das Schlüsselwort ``usecase`` verwendet werden, um einen
+Anwendungsfall zu definieren. Darüber hinaus ist es möglich, mit dem
+Schlüsselwort ``as`` einen Alias zu definieren. Dieser Alias kann dann bei der
+Definition von Beziehungen verwendet werden.
+
+Mit ``\n`` könnt ihr Zeilenumbrüche in den Namen der Anwendungsfälle einfügen.
+
+Aktivitätsdiagramm
+------------------
+
+``(*)``
+ Start- und Endknoten eines Aktivitätsdiagramms.
+
+ ``(*top)``
+ In einigen Fällen kann dies verwendet werden um den Startpunkt an den
+ Anfang eines Diagramms zu verschieben.
+
+``-->``
+ definiert eine Aktivität
+
+ ``-down->``
+ Pfeil nach unten (Standardwert)
+ ``-right-> or ->``
+ Pfeil nach rechts
+ ``-left->``
+ Pfeil nach links
+ ``-up->``
+ Pfeil nach oben
+
+``if``, ``then``, ``else``
+ Schlüsselworte für die Definition von Verzweigungen.
+
+ Beispiel:
+
+ .. code-block:: rest
+
+ .. uml::
+
+ (*) --> "Initialisierung"
+ if "ein Test" then
+ -->[wahr] "Eine Aktivität"
+ --> "Eine andere Aktivität"
+ -right-> (*)
+ else
+ ->[falsch] "Etwas anderes"
+ -->[Ende des Prozesses] (*)
+ endif
+
+ .. image:: activity-diagram.svg
+
+``fork``, ``fork again`` und ``end fork`` oder ``end merge``
+ Schlüsselworte für die parallele Verarbeitung.
+
+ Beispiel:
+
+ .. code-block:: rest
+
+ .. uml::
+
+ start
+ fork
+ :Aktion 1;
+ fork again
+ :Aktion 2;
+ end fork
+ stop
+
+ .. image:: parallel.svg
diff --git a/docs/document/uml/interface.svg b/docs/document/sphinx/uml/interface.svg
similarity index 100%
rename from docs/document/uml/interface.svg
rename to docs/document/sphinx/uml/interface.svg
diff --git a/docs/document/uml/parallel.svg b/docs/document/sphinx/uml/parallel.svg
similarity index 100%
rename from docs/document/uml/parallel.svg
rename to docs/document/sphinx/uml/parallel.svg
diff --git a/docs/document/uml/sequence-diagram.svg b/docs/document/sphinx/uml/sequence-diagram.svg
similarity index 100%
rename from docs/document/uml/sequence-diagram.svg
rename to docs/document/sphinx/uml/sequence-diagram.svg
diff --git a/docs/document/uml/use-case-diagram.svg b/docs/document/sphinx/uml/use-case-diagram.svg
similarity index 100%
rename from docs/document/uml/use-case-diagram.svg
rename to docs/document/sphinx/uml/use-case-diagram.svg
diff --git a/docs/document/ui-elements.rst b/docs/document/ui-elements.rst
deleted file mode 100644
index f5efe933..00000000
--- a/docs/document/ui-elements.rst
+++ /dev/null
@@ -1,58 +0,0 @@
-UI-Elemente und Interaktionen
-=============================
-
-.. rst:role:: guilabel
-
- Label, die als Teil einer interaktiven Benutzeroberfläche dargestellt werden,
- sollten mit :rst:role:`guilabel` gekennzeichnet werden. Jede in der
- Oberfläche verwendete Beschriftung sollte mit dieser Rolle gekennzeichnet
- werden, einschließlich Beschriftung von Schaltflächen, Fenstertiteln,
- Feldnamen, Menü- und Menüauswahlnamen und sogar Werte in Auswahllisten.
-
- Ein Tastenkürzel für die GUI-Beschriftung kann mit einem et-Zeichen (&)
- eingefügt werden; dieses führt in der Ausgabe zur Unterstreichung des
- Folgebuchstabens.
-
- :guilabel:`&Cancel` erzielt ihr :abbr:`z.B. (zum Beispiel)` mit folgender
- Auszeichnung:
-
- .. code-block:: rest
-
- :guilabel:`&Cancel`
-
- .. note::
- Wenn ihr ein et-Zeichen einfügen wollt, könnt ihr es einfach verdoppeln.
-
-.. rst:role:: kbd
-
- Dies stellt eine Folge von Tasteneingaben dar. Welche Form die Tastenfolge
- hat, kann von plattform- oder anwendungsspezifischen Konventionen abhängen.
- Wenn es keine entsprechenden Konventionen gibt, sollten die Namen von
- Modifikatortasten ausgeschrieben werden, um die Zugänglichkeit zu verbessern.
- Auch sollte nicht auf eine bestimmte Tastaturbeschriftung referenziert
- werden.
-
- :kbd:`Ctrl-s` erzielt ihr :abbr:`z.B. (zum Beispiel)` mit folgender
- Auszeichnung:
-
- .. code-block:: rest
-
- :kbd:`Ctrl-s`
-
-.. rst:role:: menuselection
-
- Eine Menüauswahl sollte mit der Rolle ``menuselection`` markiert werden.
- Diese wird verwendet, um eine komplette Sequenz zu markieren, einschließlich
- der Auswahl von Untermenüs und der Auswahl bestimmter Operationein oder
- beliebiger Untersequenzen. Die Namen der einzelnen Auswahlen sollten durch
- ``-->`` getrennt werden.
-
- :menuselection:`View --> Cell Toolbar --> Slideshow` erzielt ihr :abbr:`z.B.
- (zum Beispiel)` mit folgender Auszeichnung:
-
- .. code-block:: rest
-
- :menuselection:`View --> Cell Toolbar --> Slideshow`
-
- :rst:role:`menuselection` unterstützt genau wie :rst:role:`guilabel` auch
- Tastaturkürzel mit einem et-Zeichen (&).
diff --git a/docs/document/uml/activity-diagram.rst b/docs/document/uml/activity-diagram.rst
deleted file mode 100644
index 611a4477..00000000
--- a/docs/document/uml/activity-diagram.rst
+++ /dev/null
@@ -1,61 +0,0 @@
-Aktivitätsdiagramm
-==================
-
-``(*)``
- Start- und Endknoten eines Aktivitätsdiagramms.
-
- ``(*top)``
- In einigen Fällen kann dies verwendet werden um den Startpunkt an den
- Anfang eines Diagramms zu verschieben.
-
-``-->``
- definiert eine Aktivität
-
- ``-down->``
- Pfeil nach unten (Standardwert)
- ``-right-> or ->``
- Pfeil nach rechts
- ``-left->``
- Pfeil nach links
- ``-up->``
- Pfeil nach oben
-
-``if``, ``then``, ``else``
- Schlüsselworte für die Definition von Verzweigungen.
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- (*) --> "Initialisierung"
- if "ein Test" then
- -->[wahr] "Eine Aktivität"
- --> "Eine andere Aktivität"
- -right-> (*)
- else
- ->[falsch] "Etwas anderes"
- -->[Ende des Prozesses] (*)
- endif
-
- .. image:: activity-diagram.svg
-
-``fork``, ``fork again`` und ``end fork`` oder ``end merge``
- Schlüsselworte für die parallele Verarbeitung.
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- start
- fork
- :Aktion 1;
- fork again
- :Aktion 2;
- end fork
- stop
-
- .. image:: parallel.svg
diff --git a/docs/document/uml/class-diagram.rst b/docs/document/uml/class-diagram.rst
deleted file mode 100644
index edc8df96..00000000
--- a/docs/document/uml/class-diagram.rst
+++ /dev/null
@@ -1,101 +0,0 @@
-Klassendiagramm
-===============
-
-
-``abstract class``, ``abstract``
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- abstract class "Abstrakte Klasse"
-
- .. image:: abstract-class.svg
-
-``annotation``
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- annotation Anmerkung
-
- .. image:: annotation.svg
-
-``circle``, ``()``
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- circle Kreis
-
- .. image:: circle.svg
-
-``class``
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- class Klasse
-
- .. image:: class.svg
-
-``diamond``, ``<>``
- An empty diamond stands for an association, a black diamond for a
- composition.
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- diamond Assoziation
-
- .. image:: diamond.svg
-
-``entity``
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- entity Entität
-
- .. image:: entity.svg
-
-``enum``
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- enum Aufzählung
-
- .. image:: enum.svg
-
-``interface``
-
- Beispiel:
-
- .. code-block:: rest
-
- .. uml::
-
- interface Schnittstelle
-
- .. image:: interface.svg
diff --git a/docs/document/uml/class.svg b/docs/document/uml/class.svg
deleted file mode 100644
index 8a3de972..00000000
--- a/docs/document/uml/class.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
diff --git a/docs/document/uml/index.rst b/docs/document/uml/index.rst
deleted file mode 100644
index 00e23999..00000000
--- a/docs/document/uml/index.rst
+++ /dev/null
@@ -1,54 +0,0 @@
-Unified Modeling Language (UML)
-===============================
-
-Installation
-------------
-
-#. Installiert `plantuml `_:
-
- .. tab:: Linux
-
- .. code-block:: console
-
- $ sudo apt install plantuml
-
- .. tab:: macOS
-
- .. code-block:: console
-
- $ brew install plantuml
-
-#. Installiert `sphinxcontrib-plantuml
- `_:
-
- .. tab:: Linux/macOS
-
- .. code-block:: console
-
- $ python -m pip install sphinxcontrib-plantuml
-
- .. tab:: Windows
-
- .. code-block:: ps1con
-
- C:> python -m pip install sphinxcontrib-plantuml
-
-#. Konfiguriert Sphinx in der ``conf.py``-Datei:
-
- .. code-block:: python
-
- extensions = [..., "sphinxcontrib.plantuml"]
-
- plantuml = "/PATH/TO/PLANTUML"
-
- .. note::
- Auch in Windows werden in der Pfadangabe ``/`` angegeben.
-
-.. toctree::
- :titlesonly:
- :hidden:
-
- sequence-diagram
- use-case-diagram
- activity-diagram
- class-diagram
diff --git a/docs/document/uml/sequence-diagram.rst b/docs/document/uml/sequence-diagram.rst
deleted file mode 100644
index dcf2fb9f..00000000
--- a/docs/document/uml/sequence-diagram.rst
+++ /dev/null
@@ -1,26 +0,0 @@
-Sequenzdiagramm
-===============
-
-.. image:: sequence-diagram.svg
-
-.. code-block:: rest
-
- .. uml::
-
- Browser -> Server: Authentifizierungsanfrage
- Server --> Browser: Authentifizierungsantwort
-
- Browser -> Server: Eine andere Authentifizierungsanfrage
- Browser <-- Server: Eine andere Authentifizierungsantwort
-
-``->``
- wird verwendet, um eine Nachricht zwischen zwei Akteuren zu zeichnen. Die
- Akteure müssen nicht explizit deklariert werden.
-``-->``
- wird verwendet, um eine gepunktete Linie zu zeichnen.
-``<- und <--``
- verändert die Zeichnung nicht, kann aber die Lesbarkeit erhöhen.
-
- .. note::
- Dies gilt nur für Sequenzdiagramme. In anderen Diagrammen können andere
- Regeln gelten.
diff --git a/docs/document/uml/use-case-diagram.rst b/docs/document/uml/use-case-diagram.rst
deleted file mode 100644
index 34f26b92..00000000
--- a/docs/document/uml/use-case-diagram.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-Anwendungsfall-Diagramm
-=======================
-
-.. image:: use-case-diagram.svg
-
-.. code-block:: rest
-
- .. uml::
-
- :Nutzende Person: --> (Verwendung)
- "Gruppe von\nAdministratoren" as Admin
- "Verwenden der\nAnwendung" as (Verwendung)
- Admin --> (Administrieren\nder Anwendung)
-
-Anwendungsfälle werden von runden Klammern ``()`` umschlossen und ähneln einem
-Oval.
-
-Alternativ kann auch das Schlüsselwort ``usecase`` verwendet werden, um einen
-Anwendungsfall zu definieren. Darüber hinaus ist es möglich, mit dem
-Schlüsselwort ``as`` einen Alias zu definieren. Dieser Alias kann dann bei der
-Definition von Beziehungen verwendet werden.
-
-Mit ``\n`` könnt ihr Zeilenumbrüche in den Namen der Anwendungsfälle einfügen.
diff --git a/docs/editors.rst b/docs/editors.rst
index 5029b536..5b8f2a0a 100644
--- a/docs/editors.rst
+++ b/docs/editors.rst
@@ -1,12 +1,14 @@
Editoren
========
+.. _interactive_shell:
+
Interaktive Shell
-----------------
Mit der interaktiven Shell könnt ihr einfach die meisten Beispiele in diesem
Tutorial ausführen. Später lernt ihr auch, wie ihr Code, der in eine Datei
-geschrieben wurde, einfach als Modul eingebunden werden kann.
+geschrieben wurde, einfach als Modul einbinden könnt.
.. tab:: Linux
@@ -62,10 +64,11 @@ und macOS verwenden oder :kbd:`Ctrl-z` unter Windows. Alternativ könnt ihr auch
IDLE
----
-IDLE ist das Akronym für eine integrierte Entwicklungsumgebung (engl.:
-integrated development environment) und kombiniert einen interaktiven
-Interpreter mit Werkzeugen zur Code-Bearbeitung und Fehlersuche. Das Ausführen
-ist sehr einfach auf den verschiedenen Plattformen:
+:doc:`python3:library/idle` ist das Akronym für eine integrierte
+Entwicklungs- und Lernumgebung (engl.: Integrated Development and Learning
+Environment) und kombiniert einen interaktiven Interpreter mit Werkzeugen zur
+Code-Bearbeitung und Fehlersuche. Das Ausführen ist sehr einfach auf den
+verschiedenen Plattformen:
.. tab:: Linux/macOS
diff --git a/docs/explore.rst b/docs/explore.rst
index f7f0b3d9..d3628bde 100644
--- a/docs/explore.rst
+++ b/docs/explore.rst
@@ -1,8 +1,8 @@
Python erkunden
===============
-Egal, ob ihr IDLE oder die interaktive Shell nutzt, es gibt einige nützliche
-Funktionen, um Python zu erkunden.
+Egal, ob ihr :ref:`idle` oder die :ref:`interactive_shell` nutzt, es gibt einige
+nützliche Funktionen, um Python zu erkunden.
.. _help:
@@ -39,29 +39,32 @@ Typ- oder Variablennamen als Parameter übergebt, :abbr:`z.B. (zum Beispiel)`:
|
| __abs__(self, /)
| abs(self)
- ...
+ ...
-``dir()``, ``globals()`` und ``locals()``
------------------------------------------
+So erfahrt ihr :abbr:`z.B. (zum Beispiel)`, dass ``x`` vom Typ ``float`` ist und
+eine Funktion :func:`__add__` hat, die ihr mit Punkt-Notation verwenden könnt:
-:py:func:`dir` ist eine weitere nützliche Funktion, die Objekte in einem
-bestimmten :doc:`Namensraum ` auflistet. Wenn ihr sie ohne
-Parameter verwendet, könnt ihr herausfinden, welche Methoden und Daten lokal
-verfügbar sind. Alternativ kann sie auch Objekte für ein Modul oder einen Typ
-auflisten.
+.. code-block:: pycon
+
+ >>> x.__add__(1)
+ 5.2
+
+``dir()``
+---------
+
+:py:func:`dir` ist eine weitere nützliche Funktion um herauszufinden, welche
+Methoden und Daten lokal oder für ein bestimmtes Objekt verfügbar sind:
.. code-block:: pycon
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x']
- >>> dir(x)
- ['__abs__', '__add__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']
-Im Gegensatz zu :py:func:`dir` zeigen sowohl :py:func:`globals` als auch
-:py:func:`locals` die mit den Objekten verbundenen Werte an. Aktuell geben beide
-Funktionen dasselbe zurück:
+So können wir uns :abbr:`z.B. (zum Beispiel)` mit ``dir(__builtins__)`` eine
+Liste dessen anzeigen lassen, was in der Python-Standardbibliothek bereits
+verfügbar ist:
.. code-block:: pycon
- >>> globals()
- {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'x': 4.2}
+ >>> dir(__builtins__)
+ ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'PythonFinalizationError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '_', '_IncompleteInputError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
diff --git a/docs/functions/decorators.rst b/docs/functions/decorators.rst
index 1b85ae80..3fab0dad 100644
--- a/docs/functions/decorators.rst
+++ b/docs/functions/decorators.rst
@@ -11,21 +11,21 @@ kann dann anstelle der ursprünglichen Funktion verwendet werden:
.. code-block:: pycon
:linenos:
- >>> def inf(func):
- ... print("Information about", func.__name__)
- ... def details(*args):
- ... print("Execute function", func.__name__, "with the argument(s)")
- ... return func(*args)
- ... return details
- ...
- >>> def my_func(*params):
- ... print(params)
- ...
- >>> my_func = inf(my_func)
- Information about my_func
- >>> my_func("Hello", "Pythonistas!")
- Execute function my_func with the argument(s)
- ('Hello', 'Pythonistas!')
+ >>> def inf(func):
+ ... print("Information about", func.__name__)
+ ... def details(*args):
+ ... print("Execute function", func.__name__, "with the argument(s)")
+ ... return func(*args)
+ ... return details
+ ...
+ >>> def my_func(*params):
+ ... print(params)
+ ...
+ >>> my_func = inf(my_func)
+ Information about my_func
+ >>> my_func("Hello", "Pythonistas!")
+ Execute function my_func with the argument(s)
+ ('Hello', 'Pythonistas!')
Zeile 2
Die ``inf``-Funktion gibt den Namen der Funktion, die sie umhüllt, aus.
@@ -44,20 +44,20 @@ Verwendung eines Dekorators besteht ganz einfach aus zwei Teilen:
#. der Verwendung eines ``@``, gefolgt von dem Dekorator, unmittelbar bevor die
umhüllte Funktion definiert wird.
-Die Dekorfunktion sollte eine Funktion als Parameter annehmen und eine Funktion
-zurückgeben, wie folgt:
+Die Dekorator-Funktion sollte eine Funktion als Parameter annehmen und eine
+Funktion zurückgeben, wie folgt:
.. code-block:: pycon
:linenos:
- >>> @inf
- ... def my_func(*params):
- ... print(params)
- ...
- Information about my_func
- >>> my_func("Hello", "Pythonistas!")
- Execute function my_func with the argument(s)
- ('Hello', 'Pythonistas!')
+ >>> @inf
+ ... def my_func(*params):
+ ... print(params)
+ ...
+ Information about my_func
+ >>> my_func("Hello", "Pythonistas!")
+ Execute function my_func with the argument(s)
+ ('Hello', 'Pythonistas!')
Zeile 1
Die Funktion ``my_func`` wird mit ``@inf`` dekoriert.
@@ -65,10 +65,6 @@ Zeile 7
Die umhüllte Funktion wird aufgerufen, nachdem die Dekorator-Funktion fertig
ist.
-.. tip::
- `cusy Seminar: Fortgeschrittenes Python
- `_
-
``functools``
-------------
@@ -77,8 +73,8 @@ also Funktionen, die auf andere Funktionen wirken oder diese zurückgeben. Meist
könnt ihr sie als Dekoratoren verwenden, so :abbr:`u.a. (unter anderem)`:
:func:`functools.cache`
- Einfacher, leichtgewichtiger, Funktionscache ab Python ≥ 3.9, der manchmal
- auch *memoize* genannt wird. Er gibt dasselbe zurück wie
+ Einfacher, leichtgewichtiger, Cache für Funktionen ab Python ≥ 3.9, der
+ manchmal auch *memoize* genannt wird. Er gibt dasselbe zurück wie
:func:`functools.lru_cache` mit dem Parameter ``maxsize=None``, wobei
zusätzlich ein :doc:`/types/dicts` mit den Funktionsargumenten erstellt
wird. Da alte Werte nie gelöscht werden müssen, ist diese Funktion dann
@@ -138,3 +134,7 @@ könnt ihr sie als Dekoratoren verwenden, so :abbr:`u.a. (unter anderem)`:
'wrapper'
>>> example.__doc__
'Wrapper docstring'
+
+.. tip::
+ `cusy Seminar: Fortgeschrittenes Python
+ `_
diff --git a/docs/functions/index.rst b/docs/functions/index.rst
index e2e8b8b5..f18b6230 100644
--- a/docs/functions/index.rst
+++ b/docs/functions/index.rst
@@ -8,24 +8,23 @@ Die grundlegende Syntax für eine Python-Funktionsdefinition lautet
def function_name(param1, param2):
body
-Wie bei :doc:`Kontrollströmen ` verwendet Python
+Wie bei :doc:`Kontrollströmen ` verwendet Python
Einrückungen, um die Funktion von der Funktionsdefinition abzugrenzen. Das
folgende einfache Beispiel fügt den Code in eine Funktion ein, so dass ihr diese
aufrufen könnt, um die `Fakultät
`_ einer Zahl zu
erhalten:
-.. code-block:: pycon
+.. code-block:: python
:linenos:
- >>> def fact(n):
- ... """Return the factorial of the given number."""
- ... f = 1
- ... while n > 0:
- ... f = f * n
- ... n = n - 1
- ... return f
- ...
+ def fact(n):
+ """Return the factorial of the given number."""
+ f = 1
+ while n > 0:
+ f = f * n
+ n = n - 1
+ return f
Zeile 2
Dies ist ein optionaler Dokumentationsstring, oder ``docstring``. Ihr könnt
@@ -33,7 +32,7 @@ Zeile 2
Docstrings ist es, das Verhalten einer Funktion und die Parameter, die sie
annimmt, zu beschreiben, während Kommentare interne Informationen über die
Funktionsweise des Codes dokumentieren sollen. Docstrings sind
- :doc:`/types/strings`, die unmittelbar auf die erste Zeile einer
+ :doc:`/types/strings/index`, die unmittelbar auf die erste Zeile einer
Funktionsdefinition folgen und normalerweise in dreifachen Anführungszeichen
stehen, um mehrzeilige Beschreibungen zu ermöglichen. Bei mehrzeiligen
Dokumentationsstrings ist es üblich, in der ersten Zeile eine
@@ -41,7 +40,8 @@ Zeile 2
Zeile folgen zu lassen und mit dem Rest der Informationen zu enden.
.. seealso::
- * :doc:`../document/docstrings`
+ * :doc:`../document/sphinx/docstrings`
+ * :pep:`257`
Zeile 7
Der Wert wird nach dem Aufruf der Funktion zurückgegeben. Ihr könnt auch
@@ -64,69 +64,45 @@ Rückgabewert einer Funktion verwendet wird:
Zeile 1
Der Rückgabewert ist nicht mit einer Variablen verknüpft.
Zeile 2
- Der Wert der ``fact``-Funktion wird nur im Interpreter ausgegeben.
+ Der Wert der :func:`fact`-Funktion wird nur im Interpreter ausgegeben.
Zeile 3
Der Rückgabewert ist mit der Variablen ``x`` verknüpft.
-Parameter
----------
+Inspiriert durch :doc:`Python4DataScience:productive/qa/mypy` wurden in Python
+:abbr:`sog. (sogenannte)` *Type Hints* eingeführt, womit die Typen für
+:doc:`params` und Rückgabewerte definiert werden können, in unserem
+:func:`fact`-Beispiel mit:
+
+.. blacken-docs:off
+.. code-block:: python
+
+ def fact(n: int) -> int:
+ ...
+.. blacken-docs:on
+
+oder:
-Python bietet flexible Mechanismen zur Übergabe von Argumenten an Funktionen:
+.. blacken-docs:off
+.. code-block:: python
+
+ def factlist(flist: list[float]) -> list[float]:
+ ...
+.. blacken-docs:on
+
+Wir erhalten zur Laufzeit die Typen mit dem ``__annotations__``-Attribut:
.. code-block:: pycon
- :linenos:
-
- >>> x, y = 2, 3
- >>> def func1(u, v, w):
- ... value = u + 2 * v + w**2
- ... if value > 0:
- ... return u + 2 * v + w**2
- ... else:
- ... return 0
- ...
- >>> func1(x, y, 2)
- 12
- >>> func1(x, w=y, v=2)
- 15
- >>> def func2(u, v=1, w=1):
- ... return u + 4 * v + w**2
- ...
- >>> func2(5, w=6)
- 45
- >>> def func3(u, v=1, w=1, *tup):
- ... print((u, v, w) + tup)
- ...
- >>> func3(7)
- (7, 1, 1)
- >>> func3(1, 2, 3, 4, 5)
- (1, 2, 3, 4, 5)
- >>> def func4(u, v=1, w=1, **kwargs):
- ... print(u, v, w, kwargs)
- ...
- >>> func4(1, 2, s=4, t=5, w=3)
- 1 2 3 {'s': 4, 't': 5}
-Zeile 2
- Funktionen werden mit Hilfe der ``def``-Anweisung definiert.
-Zeile 5
- Die ``return``-Anweisung wird von einer Funktion verwendet, um einen Wert
- urückzugeben. Dieser Wert kann von beliebigem Typ sein. Wird keine
- ``return``-Anweisung gefunden, wird der Wert ``None`` von Python
- zurückgegeben.
-Zeile 11
- Funktionsargumente können entweder nach Position oder nach Name
- (Schlüsselwort) eingegeben werden. ``z`` und ``y`` werden in unserem
- Beispiel mit dem Namen angegeben.
-Zeile 13
- Funktionsparameter können mit Standardwerten definiert werden, die
- verwendet werden, wenn ein Funktionsaufruf sie auslässt.
-Zeile 18
- Es kann ein spezieller Parameter definiert werden, der alle zusätzlichen
- Positionsargumente in einem Funktionsaufruf in einem Tupel zusammenfasst.
-Zeile 25
- Ebenso kann ein spezieller Parameter definiert werden, der alle
- zusätzlichen Schlüsselwortargumente in einem Funktionsaufruf in einem
- Dictionary zusammenfasst.
+ >>> fact.__annotations__
+ {'n': , 'return': }
+ >>> factlist.__annotations__
+ {'list': list[float], 'return': list[float]}
+
+Es findet jedoch zur Laufzeit **keine** Typ-Überprüfung statt.
+
+.. seealso::
+ * :pep:`484`
+ * :doc:`python3:library/typing`
.. toctree::
:titlesonly:
diff --git a/docs/functions/params.rst b/docs/functions/params.rst
index b9507b80..d312dbdf 100644
--- a/docs/functions/params.rst
+++ b/docs/functions/params.rst
@@ -1,6 +1,64 @@
Parameter
=========
+Python bietet flexible Mechanismen zur Übergabe von :term:`Argumenten
+` an :term:`Funktionen `:
+
+.. code-block:: pycon
+ :linenos:
+
+ >>> x, y = 2, 3
+ >>> def func1(u, v, w):
+ ... value = u + 2 * v + w**2
+ ... if value > 0:
+ ... return u + 2 * v + w**2
+ ... else:
+ ... return 0
+ ...
+ >>> func1(x, y, 2)
+ 12
+ >>> func1(x, w=y, v=2)
+ 15
+ >>> def func2(u, v=1, w=1):
+ ... return u + 4 * v + w**2
+ ...
+ >>> func2(5, w=6)
+ 45
+ >>> def func3(u, v=1, w=1, *tup):
+ ... print((u, v, w) + tup)
+ ...
+ >>> func3(7)
+ (7, 1, 1)
+ >>> func3(1, 2, 3, 4, 5)
+ (1, 2, 3, 4, 5)
+ >>> def func4(u, v=1, w=1, **kwargs):
+ ... print(u, v, w, kwargs)
+ ...
+ >>> func4(1, 2, s=4, t=5, w=3)
+ 1 2 3 {'s': 4, 't': 5}
+
+Zeile 2
+ Funktionen werden mit Hilfe der ``def``-Anweisung definiert.
+Zeile 5
+ Die ``return``-Anweisung wird von einer Funktion verwendet, um einen Wert
+ zurückzugeben. Dieser Wert kann von beliebigem Typ sein. Wird keine
+ ``return``-Anweisung gefunden, wird der Wert ``None`` von Python
+ zurückgegeben.
+Zeile 11
+ Funktionsargumente können entweder nach Position oder nach Name
+ (Schlüsselwort) eingegeben werden. ``z`` und ``y`` werden in unserem
+ Beispiel mit dem Namen angegeben.
+Zeile 13
+ Funktionsparameter können mit Standardwerten definiert werden, die
+ verwendet werden, wenn ein Funktionsaufruf sie auslässt.
+Zeile 18
+ Es kann ein spezieller Parameter definiert werden, der alle zusätzlichen
+ Positionsargumente in einem Funktionsaufruf in einem Tupel zusammenfasst.
+Zeile 25
+ Ebenso kann ein spezieller Parameter definiert werden, der alle
+ zusätzlichen Schlüsselwortargumente in einem Funktionsaufruf in einem
+ Dictionary zusammenfasst.
+
Optionen für Funktionsparameter
-------------------------------
@@ -13,7 +71,7 @@ Positionsbezogene Parameter
Die einfachste Art, Parameter an eine Funktion in Python zu übergeben, ist die
Übergabe an der Position. In der ersten Zeile der Funktion gebt ihr den
Variablennamen für jeden Parameter an; wenn die Funktion aufgerufen wird, werden
-die im aufrufenden Code verwendeten Parameter den Parametervariablen der
+die im aufrufenden Code verwendeten Parameter den Parameter-Variablen der
Funktion auf der Grundlage ihrer Reihenfolge zugeordnet. Die folgende Funktion
berechnet ``x`` als Potenz von ``y``:
@@ -50,7 +108,7 @@ so:
pass
Es können beliebig viele Parameter mit Standardwerten versehen werden wobei
-Parameter mit Standardwerten als letzte in der Parameterliste definiert werden
+Parameter mit Standardwerten als letzte in der Parameter-Liste definiert werden
müssen.
Die folgende Funktion berechnet ``x`` ebenfalls als Potenz von ``y``. Wenn ``y``
@@ -67,7 +125,7 @@ jedoch nicht in einem Funktionsaufruf angegeben wird, wird der Standardwert
... return p
...
-Wie sich das Standardargument auswirkt, können ihr im folgenden Beispiel sehen:
+Wie sich das Standardargument auswirkt, könnt ihr im folgenden Beispiel sehen:
.. code-block:: pycon
@@ -91,7 +149,7 @@ dem vorherigen Beispiels könnt ihr Folgendes eingeben:
Da die Argumente für die Potenz im letzten Aufruf mit ``x`` und ``y`` benannt
sind, ist ihre Reihenfolge irrelevant; die Argumente sind mit den gleichnamigen
Parametern in der Definition der Potenz verknüpft, und man erhält ``2^6``
-zurück. Diese Art der Argumentübergabe wird als Schlüsselwortübergabe
+zurück. Diese Art der Argument-Übergabe wird als Schlüsselwort-Übergabe
bezeichnet. Die Übergabe von Schlüsselwörtern kann in Kombination mit den
Standardargumenten von Python-Funktionen sehr nützlich sein, wenn ihr Funktionen
mit einer großen Anzahl von möglichen Argumenten definiert, von denen die
@@ -103,13 +161,13 @@ Variable Anzahl von Argumenten
Python-Funktionen können auch so definiert werden, dass sie mit einer variablen
Anzahl von Argumenten umgehen können. Dies ist auf zweierlei Arten möglich. Die
eine Methode sammelt eine unbekannte Anzahl von Argumenten in einer :doc:`Liste
-`. Die andere Methode kann eine beliebige Anzahl von Argumenten,
-die mit einem Schlüsselwort übergeben wurde und die keinen entsprechend
-benannten Parameter in der Funktionsparameterliste hat, in einem :doc:`Dict
-` sammeln.
+`. Die andere Methode kann eine beliebige Anzahl von
+Argumenten, die mit einem Schlüsselwort übergeben wurde und die keinen
+entsprechend benannten Parameter in der Liste der Funktionsparameter hat, in
+einem :doc:`Dict ` sammeln.
Bei einer unbestimmten Anzahl von Positionsargumenten bewirkt das Voranstellen
-eines ``*`` vor den endgültigen Parameternamen der Funktion, dass alle
+eines ``*`` vor den endgültigen Parameter-Namen der Funktion, dass alle
überschüssigen Nicht-Schlüsselwort-Argumente in einem Funktionsaufruf,
:abbr:`d.h. (das heißt)` die Positionsargumente, die keinem anderen Parameter
zugewiesen sind, gesammelt und als Tupel dem angegebenen Parameter zugewiesen
@@ -134,7 +192,7 @@ mit:
>>> mean(3, 5, 2, 4, 6)
4.0
-Eine beliebige Anzahl von Schlüsselwortargumenten kann ebenfalls verarbeitet
+Eine beliebige Anzahl von Schlüsselwort-Argumenten kann ebenfalls verarbeitet
werden, wenn dem letzten Parameter in der Parameterliste das Präfix ``**``
vorangestellt ist. Dann werden alle Argumente, die mit einem Schlüsselwort
übergeben wurden, in einem :doc:`Dict ` gesammelt. Der Schlüssel
@@ -147,17 +205,13 @@ Beispiel)`:
.. code-block:: pycon
- >>> def server(ip, port, **other):
- ... print(
- ... "ip: {0}, port: {1}, keys in 'other': {2}".format(
- ... ip, port, list(other.keys())
- ... )
- ... )
- ... total = 0
- ... for k in other.keys():
- ... total = total + other[k]
- ... print("The sum of the other values is {0}".format(total))
- ...
+ >>> def server(ip, port, **other):
+ ... print(f"ip: {ip}, port: {port}, other: {other}")
+ ... total = 0
+ ... for k in other.keys():
+ ... total = total + other[k]
+ ... print(f"The sum of the other values is {total}")
+ ...
Das Ausprobieren dieser Funktion zeigt, dass sie die Argumente addieren kann,
die unter den Schlüsselwörtern ``foo``, ``bar`` und ``baz`` übergeben werden,
@@ -166,15 +220,15 @@ Parameternamen sind:
.. code-block:: pycon
- >>> server("127.0.0.1", port="8080", foo=3, bar=5, baz=2)
- ip: 127.0.0.1, port: 8080, keys in 'other': ['foo', 'bar', 'baz']
- The sum of the other values is 10
+ >>> server("127.0.0.1", port="8080", foo=3, bar=5, baz=2)
+ ip: 127.0.0.1, port: 8080, other: {'foo': 3, 'bar': 5, 'baz': 2}
+ The sum of the other values is 10
-Techniken zur Argumentübergabe mischen
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Techniken zur Argument-Übergabe mischen
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Es ist möglich, alle Argumentübergabe-Möglichkeiten von Python-Funktionen
-gleichzeitig zu verwenden, obwohl dies verwirrend sein kann, wenn ihr es nicht
+Ihr könnt alle Möglichkeiten zur Argument-Übergabe von Python-Funktionen
+gleichzeitig verwenden, obwohl dies verwirrend sein kann, wenn ihr es nicht
sorgfältig macht. Dabei sollten die Positionsargumente an erster Stelle stehen,
dann benannte Argumente, gefolgt von unbestimmten Positionsargumenten mit einem
einfachen ``*`` und zuletzt unbestimmte Schlüsselwortargumente mit ``**``.
@@ -183,13 +237,15 @@ Veränderliche Objekte als Argumente
-----------------------------------
Argumente werden per Objektreferenz übergeben. Der Parameter wird zu einem neuen
-Verweis auf das Objekt. Bei unveränderlichen Objekten wie :doc:`/types/tuples`,
-:doc:`/types/strings` und :doc:`/types/numbers` hat das, was mit einem Parameter
-gemacht wird, keine Auswirkungen außerhalb der Funktion. Wenn ihr jedoch ein
-veränderliches Objekt übergeben, :abbr:`z.B. (zum Beispiel)` eine :doc:`Liste
-`, ein :doc:`Dict ` oder eine Klasseninstanz, ändert
-jede Änderung des Objekts, worauf das Argument außerhalb der Funktion verweist.
-Die Neuzuweisung des Parameters hat keine Auswirkungen auf das Argument.
+Verweis auf das Objekt. Bei :term:`unveränderlichen ` Objekten
+wie :doc:`/types/sequences-sets/tuples`, :doc:`/types/strings/index` und
+:doc:`/types/numbers/index` hat das, was mit einem Parameter gemacht wird, keine
+Auswirkungen außerhalb der Funktion. Wenn ihr jedoch ein veränderliches Objekt
+übergebt, :abbr:`z.B. (zum Beispiel)` eine :doc:`Liste
+`, ein :doc:`Dict ` oder eine
+Klasseninstanz, ändert jede Änderung des Objekts, worauf das Argument außerhalb
+der Funktion verweist. Die Neuzuweisung des Parameters hat keine Auswirkungen
+auf das Argument.
.. code-block:: pycon
@@ -203,13 +259,13 @@ Die Neuzuweisung des Parameters hat keine Auswirkungen auf das Argument.
>>> x, y
(5, [2, 4, 6, 1])
-Die Variable ``x`` wird nicht geändert, da sie unveränderlich ist. Stattdessen
-wird der Funktionsparameter ``n`` so gesetzt, dass er auf den neuen Wert ``6``
-verweist. Bei ``y`` gibt es jedoch eine Änderung, weil die Liste, auf die sie
-verweist, geändert wurde.
+Die Variable ``x`` wird nicht geändert, da sie :term:`unveränderlich
+` ist. Stattdessen wird der Funktionsparameter ``n`` so gesetzt,
+dass er auf den neuen Wert ``6`` verweist. Bei ``y`` gibt es jedoch eine
+Änderung, weil die Liste, auf die sie verweist, geändert wurde.
Checks
------
* Schreibt eine Funktion, die eine beliebige Anzahl von unbenannten Argumenten
- annehmen und deren Werte in umgekehrter Reihenfolge ausgeben kann?
+ annehmen und deren Werte in umgekehrter Reihenfolge ausgeben kann.
diff --git a/docs/functions/variables.rst b/docs/functions/variables.rst
index 3a18a767..782312b8 100644
--- a/docs/functions/variables.rst
+++ b/docs/functions/variables.rst
@@ -1,45 +1,66 @@
Variablen
=========
-Lokale, nicht-lokale und globale Variablen
-------------------------------------------
+.. _local_variables:
+
+Lokale Variablen
+----------------
Hier kehren wir zur Definition von ``fact`` vom Anfang dieses
:doc:`index`-Kapitels zurück:
-.. code-block:: pycon
+.. code-block:: python
- >>> def fact(n):
- ... """Return the factorial of the given number."""
- ... f = 1
- ... while n > 0:
- ... f = f * n
- ... n = n - 1
- ... return f
- ...
+ def fact(n):
+ """Return the factorial of the given number."""
+ f = 1
+ while n > 0:
+ f = f * n
+ n = n - 1
+ return f
Sowohl die Variablen ``f`` als auch ``n`` sind lokal für einen bestimmten Aufruf
der Funktion ``fact``; Änderungen an ihnen, die während der Ausführung der
Funktion vorgenommen werden, haben keine Auswirkungen auf Variablen außerhalb
-der Funktion. Alle Variablen in der Parameterliste einer Funktion und alle
+der Funktion. Alle Variablen in der Parameter-Liste einer Funktion und alle
Variablen, die innerhalb einer Funktion durch eine Zuweisung erzeugt werden, wie
-:abbr:`z.B. (zum Beispiel)` ``f = 1``, sind für die Funktion lokal.
+:abbr:`z.B. (zum Beispiel)` ``f = 1``, sind für die Funktion lokal:
+
+.. code-block:: pycon
+
+ >>> fact(3)
+ 6
+ >>> f
+ Traceback (most recent call last):
+ File "", line 1, in
+ f
+ NameError: name 'f' is not defined
+ >>> n
+ Traceback (most recent call last):
+ File "", line 1, in
+ n
+ NameError: name 'n' is not defined
+
+.. _global_variables:
+
+Globale Variablen
+-----------------
Ihr könnt eine Variable explizit zu einer globalen Variable machen, indem ihr
-sie mit der ``global``-Anweisung deklariert, bevor sie verwendet wird. Globale
-Variablen können von der Funktion angesprochen und geändert werden. Sie
-existieren außerhalb der Funktion und können auch von anderen Funktionen, die
-sie als global deklarieren, oder von Code, der sich nicht innerhalb einer
-Funktion befindet, aufgerufen und geändert werden. Hier ein Beispiel, das den
-Unterschied zwischen lokalen und globalen Variablen verdeutlicht:
+sie mit der :ref:`global `-Anweisung deklariert, bevor sie
+verwendet wird. Globale Variablen können von der Funktion angesprochen und
+geändert werden. Sie existieren außerhalb der Funktion und können auch von
+anderen Funktionen, die sie als global deklarieren, oder von Code, der sich
+nicht innerhalb einer Funktion befindet, aufgerufen und geändert werden. Hier
+ein Beispiel, das den Unterschied zwischen lokalen und globalen Variablen
+verdeutlicht:
-.. code-block:: pycon
+.. code-block:: python
- >>> def my_func():
- ... global x
- ... x = 1
- ... y = 2
- ...
+ def my_func():
+ global x
+ x = 1
+ y = 2
.. code-block:: pycon
@@ -62,21 +83,39 @@ innerhalb von ``my_func`` verweist zunächst auf denselben Wert wie die Variable
``y`` außerhalb von ``my_func``, aber die Zuweisung bewirkt, dass ``y`` auf
einen neuen Wert verweist, der für die Funktion ``my_func`` lokal ist.
+.. _nonlocal_variables:
-.. seealso::
+Nicht-lokale Variablen
+----------------------
+
+Während :ref:`global ` für eine Variable der obersten Ebene
+verwendet wird, bezieht sich :ref:`nonlocal ` auf jede
+Variable in einem umschließenden Bereich:
+
+.. code-block:: python
+
+ def enclosing():
+ x = "Enclosing function variable"
- * :ref:`python3:global`
+ def enclosed():
+ nonlocal x
+ x = "Enclosed function variable"
+
+ enclosed()
+ print(x)
+
+.. code-block:: pycon
-Während ``global`` für eine Variable der obersten Ebene verwendet wird, bezieht
-sich ``nonlocal`` auf jede Variable in einem umschließenden Bereich.
+ >>> enclosing()
+ Enclosed function variable
.. seealso::
- * :ref:`python3:nonlocal`
* :pep:`3104`
Checks
------
-* Angenommen, ``x = 1``, welchen Wert hat ``x`` nach der Ausführung von
- ``func()`` und ``gfunc()``?
+* Angenommen, ``x = 1``, :func:`func` setze die lokale Variable ``x`` auf ``2``
+ und :func:`gfunc` die globale Variable ``x`` auf ``3``, welchen Wert nimmt
+ ``x`` an, nachdem :func:`func` und :func:`gfunc` durchlaufen wurden?
diff --git a/docs/index.rst b/docs/index.rst
index d3b5d219..1d634703 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -8,6 +8,21 @@ als umfassendes Nachschlagewerk für Python gedacht, sondern das Ziel ist
vielmehr, euch grundlegend mit Python vertraut zu machen und euch schnell das
Schreiben eigener Programme zu ermöglichen.
+Das Buch ist veröffentlicht unter der `BSD-3-Clause license
+`_,
+so dass ihr das Buch :abbr:`u.a. (unter anderem)` für eure Zwecke anpassen und
+veröffentlichen dürft, sofern ihr die Lizenz und den Copyright-Hinweis
+beibehaltet.
+
+Ich möchte der `cusy GmbH `_ danken, die mir
+großzügig ermöglicht, meine Zeit mit dem Schreiben dieses Buches zu verbringen.
+Darüberhinaus möchte ich Kristian Rother nicht nur für die Unterstützung und
+den Rat danken, den er mir im Laufe der Jahre zu diesem Buch gegeben hat,
+sondern auch für das Lektorat, das dieses Buch besser gemacht hat. Danken möchte
+ich auch Steffen Dahlem, für die Idee und Realisierung einer nachhaltigeren
+Buchproduktion. Ein herzlicher Dank geht schließlich auch an die
+Rezensent*innen, deren Einblicke und Rückmeldungen eine große Hilfe waren.
+
.. note::
Wenn ihr Vorschläge für Verbesserungen und Ergänzungen habt, freue ich mich
über eure :doc:`Verbesserungsvorschläge `.
@@ -19,7 +34,7 @@ und -visualisierung:
* `Python für Data Science `_
* `PyViz-Tutorial `_
* `cusy Design-System: Datenvisualisierung
- `_
+ `_
Alle Tutorials dienen als Seminarunterlagen für unsere aufeinander abgestimmten
Trainings:
@@ -95,25 +110,32 @@ Trainings:
.. _`Neues aus Python für Data-Science`:
https://cusy.io/de/unsere-schulungsangebote/neues-aus-python-fuer-data-science
+Folgt uns auf…
+
+.. include:: ../README.rst
+ :start-after: follow-us:
+ :end-before: end-follow-us:
+
.. toctree::
:titlesonly:
:hidden:
intro
+ changelog
install
editors
explore
style
variables-expressions
types/index
- input
- control-flows/index
+ control-flow/index
functions/index
modules/index
libs/index
+ packs/index
oop/index
save-data/index
- dataclasses
+ logging/index
test/index
document/index
appendix/index
diff --git a/docs/install.rst b/docs/install.rst
index aa7dbc1b..9948b2f5 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -4,7 +4,7 @@ Installation
Die Installation von Python kann einfach sein. Der erste Schritt besteht darin,
die aktuelle Version von `www.python.org/downloads
`_ herunterzuladen. Das Tutorial basiert auf
-Python 3.13.0, falls ihr jedoch Python 3.8 oder neuer installiert habt, sollte
+Python 3.13.0, falls ihr jedoch Python 3.10 oder neuer installiert habt, sollte
das auch kein Problem sein.
.. tab:: Linux
@@ -31,10 +31,6 @@ das auch kein Problem sein.
um nach Sicherheitsupdates zu suchen, da es keinen integrierten
Auto-Updater gibt.
- Werden ältere Python-Versionen benötigt, :abbr:`z.B. (zum Beispiel)` um
- Bibliotheken mit :doc:`test/tox` zu testen, verwende ich `deadsnakes
- `_.
-
.. tab:: macOS
Ihr könnt Python direkt von https://www.python.org/downloads/macos/ beziehen.
@@ -48,8 +44,7 @@ das auch kein Problem sein.
``mopup`` aufrufen, um die aktuellste Version eurer Python-Installation zu
erhalten.
- Werden ältere Python-Versionen benötigt, :abbr:`z.B. (zum Beispiel)` um
- Bibliotheken mit :doc:`test/tox` zu testen, kann `python-build-standalone
+ Werden ältere Python-Versionen benötigt, kann `python-build-standalone
`_
verwendet werden.
@@ -74,7 +69,7 @@ das auch kein Problem sein.
.. code-block:: ps1con
- C:\> python -V
+ C:\> py -V
Python 3.13.0
.. warning::
@@ -82,6 +77,11 @@ das auch kein Problem sein.
um nach Sicherheitsupdates zu suchen, da es keinen integrierten
Auto-Updater gibt.
+.. _various-python-versions:
+
+Um mehrere Python-Projekte mit unterschiedlichen Versionen zu verwalten
+empfehle ich :term:`uv`.
+
.. tip::
`direnv `_ erlaubt euch, Umgebungsvariablen je nach
Verzeichnis zu setzen. Damit lassen sich Umgebungsvariablen von `The
diff --git a/docs/intro.rst b/docs/intro.rst
index 8ba01f34..0fa490be 100644
--- a/docs/intro.rst
+++ b/docs/intro.rst
@@ -8,9 +8,9 @@ Vielleicht stellt ihr euch die Frage, warum ihr Python lernen solltet. Es gibt
viele Programmiersprachen von C und C++ über Java bis hin zu Lua und Go.
.. figure:: tiobe-index.svg
- :alt: TIOBE Index für Juni 2024
+ :alt: TIOBE Index für May 2025
- `TIOBE Index für Juni 2024 `_
+ `TIOBE Index für May 2025 `_
Python
hat eine sehr große Verbreitung gefunden und einer der Gründe dürfte sein, dass
@@ -61,7 +61,7 @@ Open Source
privater Anwendungen frei verwenden. Dabei wird Python von vielen
etablierten Unternehmen genutzt und gefördert, :abbr:`u.a. (unter anderem)`
von Google, Meta und Bloomberg. Und wenn ihr etwas zurückgeben wollt, könnt
- ihr dies ebenfalls gerne machen : `Python Software Foundation Sponsorship
+ ihr dies ebenfalls gerne machen: `Python Software Foundation Sponsorship
`_.
Python hat zwar einige Vorteile, aber keine Sprache ist in allen Bereichen
@@ -90,8 +90,8 @@ Variablentypen
Anders als in vielen anderen Sprachen sind Variablen keine Container,
sondern eher Etiketten, die auf verschiedene Objekte verweisen: Ganzzahlen,
Zeichenketten, Klasseninstanzen und vieles mehr. Manche empfinden es als
- Nachteil, dass Python hier nicht einfach eine Typvalidierung durchführt,
- aber die Anzahl der Typfehler ist meist überschaubar und die Flexibilität
+ Nachteil, dass Python hier nicht einfach eine Typ-Validierung durchführt,
+ aber die Anzahl der Typ-Fehler ist meist überschaubar und die Flexibilität
der dynamischen Typisierung wiegt die Probleme meist auf.
Unterstützung für mobile Geräte
Es gibt mittlerweile einige Optionen, Python auf mobilen Geräten laufen zu
@@ -100,7 +100,7 @@ Unterstützung für mobile Geräte
`_ :abbr:`u.a. (unter anderem)`
für Windows, iOS und Pi OS bieten. Zudem soll es zukünftig einfacher werden,
:ref:`wheels` auch für mobile Endgeräte zu erstellen, indem Tools wie
- :doc:`libs/cibuildwheel` und :term:`setuptools` erweitert werden.
+ :doc:`packs/cibuildwheel` und :term:`setuptools` erweitert werden.
.. seealso::
* `The Python Language Summit 2024: Python on Mobile
diff --git a/docs/libs/batteries.rst b/docs/libs/batteries.rst
index 857b03f7..988175f7 100644
--- a/docs/libs/batteries.rst
+++ b/docs/libs/batteries.rst
@@ -2,12 +2,13 @@
======================
In Python kann eine Bibliothek aus mehreren Komponenten bestehen, einschließlich
-eingebauter Datentypen und Konstanten, die ohne eine Importanweisung verwendet
-werden können, wie :abbr:`z.B. (zum Beispiel)` :doc:`/types/numbers` und
-:doc:`/types/lists`, sowie einiger eingebauter :doc:`/functions/index` und
-:doc:`/control-flows/exceptions`. Der größte Teil der Bibliothek ist eine
-umfangreiche Sammlung von :doc:`Modulen `. Wenn ihr Python
-installiert habt, stehen euch auch verschiedene Bibliotheken zur Verfügung zum
+eingebauter Datentypen und Variablen, die ohne eine Importanweisung verwendet
+werden können, wie :abbr:`z.B. (zum Beispiel)` :doc:`/types/numbers/index` und
+:doc:`/types/sequences-sets/lists`, sowie einiger eingebauter
+:doc:`/functions/index` und :doc:`/control-flow/exceptions`. Der größte Teil der
+Bibliothek ist eine umfangreiche Sammlung von :doc:`Modulen `.
+Wenn ihr Python installiert habt, stehen euch auch verschiedene Bibliotheken zur
+Verfügung zum
* :ref:`data-types`
* :ref:`files-storage`
@@ -28,8 +29,9 @@ Datentypen und Zahlen.
String-Module
~~~~~~~~~~~~~
-.. include:: ../types/strings.rst
- :start-after: string-modules
+.. include:: ../types/strings/built-in-modules/index.rst
+ :start-after: string-modules:
+ :end-before: end-string-modules:
Module für Datentypen
~~~~~~~~~~~~~~~~~~~~~
@@ -62,16 +64,18 @@ Module für Datentypen
Module für Zahlen
~~~~~~~~~~~~~~~~~
-.. include:: ../types/numbers.rst
- :start-after: number-modules
+.. include:: ../types/numbers/index.rst
+ :start-after: number-modules:
+ :end-before: end-number-modules:
.. _files-storage:
Ändern von Dateien
------------------
-.. include:: ../types/files.rst
- :start-after: file-modules
+.. include:: ../save-data/files.rst
+ :start-after: file-modules:
+ :end-before: end-file-modules:
.. _os:
diff --git a/docs/libs/gitlab.rst b/docs/libs/gitlab.rst
deleted file mode 100644
index 7500b068..00000000
--- a/docs/libs/gitlab.rst
+++ /dev/null
@@ -1,113 +0,0 @@
-GitLab Package Registry
-=======================
-
-Ihr könnt eure Verteilungspakete auch in der Paketregistrierung eures
-GitLab-Projekts veröffentlichen und sowohl mit :term:`Pip` als auch mit
-:term:`twine` nutzen.
-
-.. seealso::
- `PyPI packages in the Package Registry
- `_
-
-Authentifizierung
------------------
-
-Zur Authentifizierung an der GitLab Package Registry könnt ihr eine der
-folgenden Methoden verwenden:
-
-* Ein :ref:`persönliches Zugriffstoken
- ` mit dem Geltungsbereich ``api``.
-* Ein :ref:`Deploy-Token ` mit den Geltungsbereichen
- ``read_package_registry``, ``write_package_registry`` oder beiden.
-* Ein :ref:`CI-Job-Token `.
-
-.. _personal-access-tokens:
-
-… mit einem persönlichen Zugriffstoken
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Um euch mit einem persönlichen Zugriffstoken zu authentifizieren, könnt ihr in
-der ``~/.pypirc``-Datei :abbr:`z.B. (zum Beispiel)` folgendes hinzufügen:
-
-.. code-block:: ini
-
- [distutils]
- index-servers=
- gitlab
-
- [gitlab]
- repository = https://ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi
- username = {NAME}
- password = {YOUR_PERSONAL_ACCESS_TOKEN}
-
-.. _deploy-tokens:
-
-… mit einem Deploy-Token
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. code-block:: ini
-
- [distutils]
- index-servers =
- gitlab
-
- [gitlab]
- repository = https://ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi
- username = {DEPLOY_TOKEN_USERNAME}
- password = {DEPLOY_TOKEN}
-
-.. _ci-job-token:
-
-… mit einem Job-Token
-~~~~~~~~~~~~~~~~~~~~~
-
-.. code-block:: yaml
-
- image: python:latest
-
- run:
- script:
- - pip install build twine
- - python -m build
- - TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*
-
-… für den Zugriff auf Pakete innerhalb einer Gruppe
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Verwendet statt der :samp:`{PROJECT_ID}` die :samp:`{GROUP_URL}`.
-
-Veröffentlichen des Verteilungspakets
--------------------------------------
-
-Ihr könnt euer Paket mit Hilfe von :term:`twine` veröffentlichen:
-
-.. code-block:: console
-
- python3 -m twine upload --repository gitlab dist/*
-
-.. note::
- Wenn ihr versucht, ein Paket zu veröffentlichen, das bereits mit demselben
- Namen und derselben Version existiert, erhaltet ihr den Fehler ``400 Bad
- Request``; ihr müssen das vorhandene Paket dann zuerst löschen.
-
-Installieren des Pakets
------------------------
-
-Ihr könnt die neueste Version eures Pakets installieren :abbr:`z.B. (zum
-Beispiel)` mit
-
-.. code-block:: console
-
- pip install --index-url https://{NAME}:{PERSONAL_ACCESS_TOKEN}@ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi/simple --no-deps {PACKAGE_NAME}
-
-… oder von der Gruppenebene aus mit
-
-.. code-block:: console
-
- pip install --index-url https://{NAME}:{PERSONAL_ACCESS_TOKEN}@ce.cusy.io/api/v4/groups/{GROUP_ID}/-/packages/pypi/simple --no-deps {PACKAGE_NAME}
-
-… oder in der :file:`requirements.txt`-Datei mit
-
-.. code-block::
-
- --extra-index-url https://ce.cusy.io/api/v4/projects/{PROJECT_ID}/packages/pypi/simple {PACKAGE_NAME}
diff --git a/docs/libs/glossary.rst b/docs/libs/glossary.rst
deleted file mode 100644
index cd3256b4..00000000
--- a/docs/libs/glossary.rst
+++ /dev/null
@@ -1,449 +0,0 @@
-Glossar
-=======
-
-.. glossary::
-
- build
- ``build`` ist ein :pep:`517`-kompatibler Python-Paket-Builder. Er bietet
- eine CLI zum Erstellen von Paketen sowie eine Python-API.
-
- `Docs `__ |
- `GitHub `__ |
- `PyPI `__
-
- Built Distribution
- bdist
- Eine Struktur aus Dateien und Metadaten, die bei der Installation nur an
- den richtigen Speicherort auf dem Zielsystem verschoben werden müssen.
- :term:`wheel` ist ein solches Format, nicht jedoch *distutil’s*
- :term:`Source Distribution`, die einen Build-Schritt erfordern.
-
- cibuildwheel
- :doc:`/libs/cibuildwheel` ist ein Python-Paket, das :term:`wheels
- ` für alle gängigen Plattformen und Python-Versionen auf den
- meisten CI-Systemen erstellt.
-
- `Docs `__ |
- `GitHub `__ |
- `PyPI `__
-
- .. seealso::
- :term:`multibuild`
-
- conda
- Paketmanagement-Tool für die `Anaconda
- `_-Distribution von
- `Continuum Analytics `_. Sie ist speziell
- auf die wissenschaftliche Gemeinschaft ausgerichtet, insbesondere auf
- Windows, wo die Installation von binären Erweiterungen oft schwierig ist.
-
- Conda installiert keine Pakete von :term:`PyPI` und kann nur von den
- offiziellen Continuum-Repositories oder von `anaconda.org
- `_ oder lokalen (:abbr:`z.B. (zum Beispiel)`
- Intranet-) Paketservern installieren. Beachtet jedoch, dass :term:`pip`
- in conda installiert werden und Seite an Seite arbeiten kann, um
- Distributionen von :term:`PyPI` zu verwalten.
-
- .. seealso::
- * `Conda: Myths and Misconceptions
- `_
- * `Conda build variants
- `_
-
- devpi
- `devpi `_ ist ein leistungsstarker
- :term:`PyPI`-kompatibler Server und ein PyPI-Proxy-Cache mit einem
- Befehlszeilenwerkzeug um Paketierungs-, Test- und
- Veröffentlichungsaktivitäten zu ermöglichen.
-
- `Docs `__ |
- `GitHub `__ |
- `PyPI `__
-
- Distribution Package
- Eine versionierte Archivdatei, die Python-:term:`Pakete
- `, -:term:`Module ` und andere Ressourcendateien
- enthält, die zum Verteilen eines :term:`Releases ` verwendet
- werden.
-
- distutils
- Paket der Python-Standardbibliothek, das Unterstützung für das
- Bootstrapping von :term:`pip` in eine bestehende Python-Installation oder
- :term:`virtuelle Umgebung` bietet.
-
- `Docs `__ |
- `GitHub `__
-
- Egg
- Ein :term:`Built Distribution`-Format, das von :term:`Setuptools`
- eingeführt wurde und nun durch :term:`wheel` ersetzt wird. Weitere
- Informationen findet ihr unter `The Internal Structure of Python Eggs
- `_
- und `Python Eggs `_.
-
- enscons
- enscons ist ein Python-Paketierungswerkzeug, das auf `SCons
- `_ basiert. Es erstellt :term:`pip`-kompatible
- :term:`Source Distributions ` und :term:`wheels
- ` ohne Verwendung von :term:`distutils` oder :term:`setuptools`,
- einschließlich Distributionen mit C-Erweiterungen. enscons hat eine
- andere Architektur und Philosophie als :term:`distutils`, da es
- Python-Paketierung zu einem allgemeinen Build-System hinzufügt. enscons
- kann euch helfen, :term:`sdists ` und :term:`wheels ` zu
- bauen.
-
- `GitHub `__ |
- `PyPI `__
-
- Flit
- Flit bietet eine einfache Möglichkeit, reine Python-Pakete und -Module zu
- erstellen und auf den :term:`Python Package Index` hochzuladen. Flit kann
- eine Konfigurationsdatei generieren, um schnell ein Projekt einzurichten,
- eine :term:`Source Distribution` und ein :term:`wheel` zu erstellen und
- sie zu PyPI hochzuladen.
-
- Flit verwendet :term:`pyproject.toml`, um ein Projekt zu konfigurieren.
- Flit ist nicht auf Werkzeuge wie :term:`setuptools` angewiesen, um
- Distributionen zu erstellen, oder auf :term:`twine`, um sie auf
- :term:`PyPI` hochzuladen.
-
- `Docs `__ |
- `GitHub `__ |
- `PyPI `__
-
- Hatch
- Hatch ist ein Kommandozeilenwerkzeug, das ihr zum Konfigurieren und
- Versionieren von Paketen, zum Spezifizieren von Abhängigkeitengenutzt
- werden kann. Das Plugin-System ermöglicht die einfache Erweiterung der
- Funktionalitäten.
-
- `Docs `__ |
- `GitHub `__ |
- `PyPI `__
-
- hatchling
- Build-Backend von :term:`Hatch`, das auch zum Veröffentlichen auf dem
- :term:`Python Package Index` genutzt werden kann.
-
- Import Package
- Ein Python-Modul, das andere Module oder rekursiv andere Pakete enthalten
- kann.
-
- maturin
- Vormals pyo3-pack, ist ein :pep:`621`-kompatibles Build-Tool für
- :doc:`binäre Erweiterungen ` in Rust.
-
- meson-python
- Build-Backend, das das `Meson `_-Build-System
- verwendet. Es unterstützt eine Vielzahl von Sprachen, einschließlich C,
- und ist in der Lage, die Anforderungen der meisten komplexen
- Build-Konfigurationen zu erfüllen.
-
- `Docs `__ |
- `GitHub `__ |
- `PyPI `__
-
- Modul
- Die Grundeinheit der Wiederverwendbarkeit von Code in Python, die in
- einem von zwei Typen existiert:
-
- Pure Module
- Ein Modul, das in Python geschrieben wurde und in einer einzigen
- ``.py``-Datei enthalten ist (und möglicherweise zugehörigen
- ``.pyc``- und/oder ``.pyo``-Dateien).
-
- Extension Module
- In der Regel in eine einzelne dynamisch ladbare vorkompilierte
- Datei, z. B. einer gemeinsamen Objektdatei (``.so``).
-
- multibuild
- ``multibuild`` ist ein Satz von CI-Skripten zum Erstellen und Testen von
- Python-:term:`wheels ` für Linux, macOS und Windows.
-
- .. seealso::
- :term:`cibuildwheel`
-
- pdm
- Python-Paketmanager mit :pep:`582`-Unterstützung. Er installiert und
- verwaltet Pakete ohne dass eine :term:`virtuelle Umgebung ` erstellt werden muss. Er verwendet auch
- :term:`pyproject.toml`, um Projekt-Metadaten zu speichern, wie in
- :pep:`621` definiert.
-
- `Docs `__ |
- `GitHub `__ |
- `PyPI `__
-
- pex
- Bibliothek und Werkzeug zur Erzeugung von Python EXecutable
- (:file:`.pex`)-Dateien, die eigenständige Python-Umgebungen sind.
- .pex-Dateien sind Zip-Dateien mit ``#!/usr/bin/env python`` und einer
- speziellen :file:`__main__.py`-Datei, die das Deployment von
- Python-Applikationen stark vereinfachen können.
-
- `Docs `__ |
- `GitHub `__ |
- `PyPI