Tutorial:Programmieren mit Python/Funktionen und Bibliotheken: Unterschied zwischen den Versionen
Sn (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „==Funktionen aufrufen== Funktionen kennen wir aus der Mathematik als (vereinfacht gesagt) Rechenvorschriften, um ein oder mehrere Objekte in andere umzurechnen. Zum Beispiel erhält die Funktion <math>f(x) = x^2</math> einen Wert für den Parameter <math>x</math> und gibt dessen Quadrat als Ergebnis zurück. Nun können wir Funktionswerte wie <math>f(4)=16</math> berechnen. Dieses Konzept existiert auch…“) |
Sn (Diskussion | Beiträge) K (→Bibliotheken: Fehlendes Wort) |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{../Navigation}} | |||
==Funktionen aufrufen== | ==Funktionen aufrufen== | ||
[[Unterprogramm#Funktion|Funktionen]] kennen wir aus der Mathematik als (vereinfacht gesagt) Rechenvorschriften, um ein oder mehrere [[Objekt (Informatik)|Objekte]] in andere umzurechnen. Zum Beispiel erhält die Funktion <math>f(x) = x^2</math> einen Wert für den Parameter <math>x</math> und gibt dessen Quadrat als Ergebnis zurück. Nun können wir Funktionswerte wie <math>f(4)=16</math> berechnen. | [[Unterprogramm#Funktion|Funktionen]] kennen wir aus der Mathematik als (vereinfacht gesagt) Rechenvorschriften, um ein oder mehrere [[Objekt (Informatik)|Objekte]] in andere umzurechnen. Zum Beispiel erhält die Funktion <math>f(x) = x^2</math> einen Wert für den Parameter <math>x</math> und gibt dessen Quadrat als Ergebnis zurück. Nun können wir Funktionswerte wie <math>f(4)=4^2=16</math> berechnen. | ||
Dieses Konzept existiert auch in Python. Zum Beispiel existiert die Funktion | Dieses Konzept existiert auch in Python. Zum Beispiel existiert die Funktion {{Python|round(x)}}, die eine als Parameter übergebene Zahl {{Python|x}} kaufmännisch rundet. | ||
<syntaxhighlight lang="pycon"> | |||
>>> round(4.2) | >>> round(4.2) | ||
4 | 4 | ||
Zeile 9: | Zeile 11: | ||
>>> round(-5) | >>> round(-5) | ||
-5 | -5 | ||
</ | </syntaxhighlight> | ||
Die Schreibweise {{Python|funktionsname(parameterwert)}} orientiert sich an der mathematischen Notation. | |||
==Funktionen definieren== | ==Funktionen definieren== | ||
In Python lassen sich auch eigene Funktionen definieren. Dieses Konzept kennen wir bereits aus der [[Visuelle Programmierung|visuellen Programmierung]]: In [[Scratch]] können wir | In Python lassen sich auch eigene Funktionen definieren. Dieses Konzept kennen wir bereits aus der [[Visuelle Programmierung|visuellen Programmierung]]: In [[Scratch]] können wir <q>neue Blöcke</q> erstellen, hinter denen sich selbst definierte Unterprogramme verbergen. | ||
In Python lassen sich mit dem Schlüsselwort | In Python lassen sich mit dem Schlüsselwort {{Python|def}} eigene Funktionen definieren. Die einfachste Form dafür lautet {{Python|def}} ''Funktionsname''{{Python|():}} | ||
Das folgende Beispiel definiert eine Funktion bzw. Unterprogramm mit dem Funktionsnamen | Das folgende Beispiel definiert eine Funktion bzw. Unterprogramm mit dem Funktionsnamen {{Python|waagerechte_linie}}, das beim Aufruf eine Zeile mit 40 Strichzeichen in die Konsole schreibt:<syntaxhighlight lang="python" line="1"> | ||
def waagerechte_linie(): | def waagerechte_linie(): | ||
print('----------------------------------------') | print('----------------------------------------') | ||
</syntaxhighlight>Die erste Zeile, die mit | </syntaxhighlight>Die erste Zeile, die mit {{Python|def}} eingeleitet wird, nennen wir den ''Funktionskopf'', den Rest den ''Funktionsrumpf''. Der Funktionsrumpf enthält das eigentliche Unterprogramm, also die Anweisungen, die beim Aufruf der Funktion ausgeführt werden sollen. | ||
Im Funktionskopf können wir zusätzlich Parameter festlegen, über die der Funktion beim Aufruf Werte übergeben werden können, die in der Funktionsausführung eine Rolle spielen. Dazu schreiben wir in die Klammern die Namen der Parameter. Bei der Abarbeitung dieser Funktion werden die Parameter dann wie lokale Variablen verwendet, die nur innerhalb der Funktion sichtbar sind. Mehrere Parameter werden mit Komma getrennt angegeben:<syntaxhighlight lang="python" line="1"> | Im Funktionskopf können wir zusätzlich Parameter festlegen, über die der Funktion beim Aufruf Werte übergeben werden können, die in der Funktionsausführung eine Rolle spielen. Dazu schreiben wir in die Klammern die Namen der Parameter. Bei der Abarbeitung dieser Funktion werden die Parameter dann wie lokale Variablen verwendet, die nur innerhalb der Funktion sichtbar sind. Mehrere Parameter werden mit Komma getrennt angegeben:<syntaxhighlight lang="python" line="1"> | ||
Zeile 29: | Zeile 32: | ||
</syntaxhighlight>Beim Funktionsaufruf muss darauf geachtet werden, dass für alle Parameter geeignete Werte angegeben werden. | </syntaxhighlight>Beim Funktionsaufruf muss darauf geachtet werden, dass für alle Parameter geeignete Werte angegeben werden. | ||
Die Aufrufe der drei oben definierten Funktionen könnten dann beispielsweise folgendermaßen aussehen:< | Die Aufrufe der drei oben definierten Funktionen könnten dann beispielsweise folgendermaßen aussehen: | ||
<syntaxhighlight lang="pycon"> | |||
>>> waagerechte_linie() | >>> waagerechte_linie() | ||
------------------------------------------- | ------------------------------------------- | ||
Zeile 38: | Zeile 42: | ||
>>> sehr_flexible_linie(5, '.') | >>> sehr_flexible_linie(5, '.') | ||
..... | ..... | ||
</ | </syntaxhighlight> | ||
{{Achtung|Die Definition einer Funktion ist für sich genommen wertlos, solange die Funktion nirgendwo im Programm aufgerufen wird. Erst beim Aufruf einer Funktion wird der Programmteil, der durch die Funktion definiert wird, ausgeführt.}} | |||
===Rückgabewerte=== | ===Rückgabewerte=== | ||
Mit dem Schlüsselwort | Mit dem Schlüsselwort {{Python|return}} kann das Ergebnis einer Funktion an die Aufrufstelle zurückgegeben werden. Die Funktionsausführung endet an dieser Stelle.<syntaxhighlight lang="python" line="1"> | ||
def quadrat(x): | def quadrat(x): | ||
return x * x | return x * x | ||
</syntaxhighlight>Funktionen mit Rückgabewert können im Programm nicht nur als [[Anweisung|Anweisungen]], sondern als [[Ausdruck|Ausdrücke]] eingesetzt werden. Das bedeutet, dass sie z. B. in mathematischen Berechnungen oder Parametern von weiteren Funktionsaufrufen eingesetzt werden können. | </syntaxhighlight>Funktionen mit Rückgabewert können im Programm nicht nur als [[Anweisung|Anweisungen]], sondern als [[Ausdruck|Ausdrücke]] eingesetzt werden. Das bedeutet, dass sie z. B. in mathematischen Berechnungen oder Parametern von weiteren Funktionsaufrufen eingesetzt werden können. | ||
<syntaxhighlight lang="pycon"> | |||
>>> quadrat(5) | |||
25 | |||
>>> quersumme(1234) | |||
10 | |||
>>> quersumme(3190701205) | |||
28 | |||
>>> quersumme(quersumme(3190701205)) | |||
10 | |||
>>> quadrat(11) + quersumme(11) | |||
123 | |||
</syntaxhighlight> | |||
Funktionen können natürlich sehr viel umfangreicher sein, als nur einfache mathematische Ausdrücke auszuwerten und als Ergebnis zurückzugeben. Prinzipiell können die Unterprogramme, die in den Funktionsrümpfen stehen, beliebig komplex sein – also Anweisungssequenzen, Kontrollstrukturen, Ein- und Ausgaben sowie weitere Funktionsaufrufe enthalten.<syntaxhighlight lang="python" line="1"> | Funktionen können natürlich sehr viel umfangreicher sein, als nur einfache mathematische Ausdrücke auszuwerten und als Ergebnis zurückzugeben. Prinzipiell können die Unterprogramme, die in den Funktionsrümpfen stehen, beliebig komplex sein – also Anweisungssequenzen, Kontrollstrukturen, Ein- und Ausgaben sowie weitere Funktionsaufrufe enthalten.<syntaxhighlight lang="python" line="1"> | ||
def quersumme(zahl): | def quersumme(zahl): | ||
Zeile 65: | Zeile 72: | ||
==Bibliotheken== | ==Bibliotheken== | ||
Wie viele andere [[Programmiersprache|Programmiersprachen]] verfügt Python nur über sehr wenige eingebaute Funktionen, z. B. | Wie viele andere [[Programmiersprache|Programmiersprachen]] verfügt Python nur über sehr wenige eingebaute Funktionen, z. B. {{Python|len()}}, {{Python|int()}} oder {{Python|range()}}. Diese Funktionen stellen die wichtigsten Funktionalitäten zum Programmieren und die wichtigsten [[Datentyp|Datentypen]] zur Verfügung. Alles, was man darüber hinaus benötigen könnte, wird von so genannten ''[[Programmbibliothek|Bibliotheken]]'' zur Verfügung gestellt, wobei jede Bibliothek eine klar definierte Funktionalität erfüllt. | ||
In Python sind einige Bibliotheken standardmäßig vorinstalliert und können mit | In Python sind einige Bibliotheken standardmäßig vorinstalliert und können mit {{Python|import}} genutzt werden. Dazu gehören u. a.: | ||
{| class="wikitable" | {| class="wikitable" | ||
!Name | !Name | ||
!Zweck | !Zweck | ||
|- | |- | ||
| | |{{Python|math}} | ||
|Mathematische Funktionen wie Wurzeln, Sinus/Kosinus, Logarithmen usw. | |Mathematische Funktionen wie Wurzeln, Sinus/Kosinus, Logarithmen usw. | ||
|- | |- | ||
| | |{{Python|os}} | ||
|Zugriff auf das Betriebssystem | |Zugriff auf das Betriebssystem | ||
|- | |- | ||
| | |{{Python|sys}} | ||
|Zugriff auf Attribute und Funktionen des Python-Interpreters | |Zugriff auf Attribute und Funktionen des Python-Interpreters | ||
|- | |- | ||
| | |{{Python|random}} | ||
|Generieren von Zufallszahlen | |Generieren von Zufallszahlen | ||
|- | |- | ||
| | |{{Python|tkinter}} | ||
|Programmieren von grafischen Benutzeroberflächen | |Programmieren von grafischen Benutzeroberflächen | ||
|- | |- | ||
| | |{{Python|turtle}} | ||
|Zeichnen von Turtle-Grafiken | |Zeichnen von Turtle-Grafiken | ||
|- | |- | ||
| | |{{Python|datetime}} | ||
|Operationen mit Datum und Zeit | |Operationen mit Datum und Zeit | ||
|- | |- | ||
| | |{{Python|shutil}} | ||
|Komplexere Operationen auf Dateien | |Komplexere Operationen auf Dateien | ||
|} | |} | ||
Zeile 101: | Zeile 108: | ||
!Zweck | !Zweck | ||
|- | |- | ||
| | |{{Python|bottle}} | ||
|Ein einfacher [[Webserver]] | |Ein einfacher [[Webserver]] | ||
|- | |- | ||
| | |{{Python|cryptography}} | ||
|Eine Bibliothek mit [[Kryptographie| | |Eine Bibliothek mit [[Kryptographie|kryptografischen Funktionen]] | ||
|} | |} | ||
Zeile 111: | Zeile 118: | ||
===Bibliotheken einbinden und nutzen=== | ===Bibliotheken einbinden und nutzen=== | ||
Zum Einbinden einer Bibliothek in ein Python-Programm wird das Schlüsselwort | Zum Einbinden einer Bibliothek in ein Python-Programm wird das Schlüsselwort {{Python|import}} verwendet. Entweder bindet man die ganze Bibliothek mit {{Python|import math}} ein oder pickt sich einzelne Funktionen heraus, etwa die Funktion {{Python|sqrt}} zum Berechnen der Quadratwurzel. In diesem Fall schreibt man {{Python|from math import sqrt}}. Mit {{Python|from math import *}} können alle Funktionen und Konstanten aus der {{Python|math}}-Bibliothek importiert werden. | ||
Im ersten Fall muss man dann, um auf die Konstanten und Funktionen der Bibliothek zugreifen zu können, den Namen der Bibliothek (mit Punkt getrennt) vor die Aufrufe setzen: Für 4 schreibt man dann | Im ersten Fall muss man dann, um auf die Konstanten und Funktionen der Bibliothek zugreifen zu können, den Namen der Bibliothek (mit Punkt getrennt) vor die Aufrufe setzen: Für 4 schreibt man dann {{Python|math.sqrt(4)}}. Im zweiten Fall ({{Python|from math import sqrt}} oder {{Python|from math import *}}) schreibt man einfach {{Python|sqrt(4)}}, um die Funktion aufzurufen. | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! | ||
Zeile 121: | Zeile 128: | ||
|- | |- | ||
|Einbinden | |Einbinden | ||
| | |{{Python|import math}} | ||
| | |{{Python|from math import sqrt}} | ||
| | |{{Python|from math import *}} | ||
|- | |- | ||
|<math>\sqrt | |<math>\sqrt{4}</math> | ||
| | |{{Python|math.sqrt(4)}} → {{Python|2}} | ||
| | |{{Python|sqrt(4)}} → {{Python|2}} | ||
| | |{{Python|sqrt(4)}} → {{Python|2}} | ||
|- | |- | ||
|<math>\pi</math> | |<math>\pi</math> | ||
| | |{{Python|math.pi}}→ {{Python|3.141592653589793}} | ||
| | |{{Python|pi}} → Fehler, weil nur {{Python|sqrt}} importiert wurde! | ||
| | |{{Python|pi}} → {{Python|3.141592653589793}} | ||
|- | |- | ||
|Vorteile | |Vorteile | ||
Zeile 141: | Zeile 148: | ||
|- | |- | ||
|Nachteile | |Nachteile | ||
|Größerer Schreibaufwand und unintuitive Notationen wie | |Größerer Schreibaufwand und unintuitive Notationen wie {{Python|datetime.datetime}} | ||
|Verwirrende Fehlermeldungen, wenn man nicht importierte Funktionen verwenden möchte | |Verwirrende Fehlermeldungen, wenn man nicht importierte Funktionen verwenden möchte | ||
|Risiko von Namensverwirrungen, z. B. gibt es | |Risiko von Namensverwirrungen, z. B. gibt es {{Python|ceil}}-Funktionen in den Bibliotheken {{Python|math}}, {{Python|numpy}} und {{Python|torch}}. | ||
|} | |} | ||
===Bibliotheken in Thonny installieren=== | ===Bibliotheken in Thonny installieren=== | ||
<gallery mode="slideshow"> | |||
Datei:Thonny Package Overview.png|Thonny enthält eine Paket-Verwaltung für PyPI, die sich im Menü unter ''Extras → Verwalte Plug-Ins…'' aufrufen lässt. | |||
Thonny enthält eine Paket-Verwaltung für | Datei:Thonny Paket Suche.png|Dieses Fenster gestattet es, im PyPI nach Paketen zu suchen... | ||
Datei:Thonny Paket Details.png|... Details zu einzelnen Bibliotheken anzuzeigen... | |||
Dieses Fenster gestattet es, im | Datei:Thonny Paket installiert.png|... und Pakete zu installieren oder deinstallieren. | ||
</gallery> | |||
Details zu einzelnen Bibliotheken anzuzeigen: | |||
und Pakete zu installieren oder deinstallieren | |||
==Weblinks== | ==Weblinks== | ||
*[https://pypi.python.org Python Package Index {{Flagge|GB}}] | *[https://pypi.python.org Python Package Index {{Flagge|GB}}] |
Aktuelle Version vom 9. Oktober 2024, 13:08 Uhr
Funktionen aufrufen
Funktionen kennen wir aus der Mathematik als (vereinfacht gesagt) Rechenvorschriften, um ein oder mehrere Objekte in andere umzurechnen. Zum Beispiel erhält die Funktion einen Wert für den Parameter und gibt dessen Quadrat als Ergebnis zurück. Nun können wir Funktionswerte wie berechnen.
Dieses Konzept existiert auch in Python. Zum Beispiel existiert die Funktion round(x)
, die eine als Parameter übergebene Zahl x
kaufmännisch rundet.
>>> round(4.2)
4
>>> round(6.66)
7
>>> round(-5)
-5
Die Schreibweise funktionsname(parameterwert)
orientiert sich an der mathematischen Notation.
Funktionen definieren
In Python lassen sich auch eigene Funktionen definieren. Dieses Konzept kennen wir bereits aus der visuellen Programmierung: In Scratch können wir neue Blöcke
erstellen, hinter denen sich selbst definierte Unterprogramme verbergen.
In Python lassen sich mit dem Schlüsselwort def
eigene Funktionen definieren. Die einfachste Form dafür lautet def
Funktionsname():
Das folgende Beispiel definiert eine Funktion bzw. Unterprogramm mit dem Funktionsnamen waagerechte_linie
, das beim Aufruf eine Zeile mit 40 Strichzeichen in die Konsole schreibt:
def waagerechte_linie():
print('----------------------------------------')
Die erste Zeile, die mit def
eingeleitet wird, nennen wir den Funktionskopf, den Rest den Funktionsrumpf. Der Funktionsrumpf enthält das eigentliche Unterprogramm, also die Anweisungen, die beim Aufruf der Funktion ausgeführt werden sollen.
Im Funktionskopf können wir zusätzlich Parameter festlegen, über die der Funktion beim Aufruf Werte übergeben werden können, die in der Funktionsausführung eine Rolle spielen. Dazu schreiben wir in die Klammern die Namen der Parameter. Bei der Abarbeitung dieser Funktion werden die Parameter dann wie lokale Variablen verwendet, die nur innerhalb der Funktion sichtbar sind. Mehrere Parameter werden mit Komma getrennt angegeben:
def unterschiedlich_lange_linie(laenge):
print('-' * laenge)
def sehr_flexible_linie(laenge, zeichen):
print(zeichen * laenge)
Beim Funktionsaufruf muss darauf geachtet werden, dass für alle Parameter geeignete Werte angegeben werden.
Die Aufrufe der drei oben definierten Funktionen könnten dann beispielsweise folgendermaßen aussehen:
>>> waagerechte_linie()
-------------------------------------------
>>> unterschiedlich_lange_linie(10)
----------
>>> sehr_flexible_linie(15, '=')
===============
>>> sehr_flexible_linie(5, '.')
.....
Die Definition einer Funktion ist für sich genommen wertlos, solange die Funktion nirgendwo im Programm aufgerufen wird. Erst beim Aufruf einer Funktion wird der Programmteil, der durch die Funktion definiert wird, ausgeführt.
Rückgabewerte
Mit dem Schlüsselwort return
kann das Ergebnis einer Funktion an die Aufrufstelle zurückgegeben werden. Die Funktionsausführung endet an dieser Stelle.
def quadrat(x):
return x * x
Funktionen mit Rückgabewert können im Programm nicht nur als Anweisungen, sondern als Ausdrücke eingesetzt werden. Das bedeutet, dass sie z. B. in mathematischen Berechnungen oder Parametern von weiteren Funktionsaufrufen eingesetzt werden können.
>>> quadrat(5)
25
>>> quersumme(1234)
10
>>> quersumme(3190701205)
28
>>> quersumme(quersumme(3190701205))
10
>>> quadrat(11) + quersumme(11)
123
Funktionen können natürlich sehr viel umfangreicher sein, als nur einfache mathematische Ausdrücke auszuwerten und als Ergebnis zurückzugeben. Prinzipiell können die Unterprogramme, die in den Funktionsrümpfen stehen, beliebig komplex sein – also Anweisungssequenzen, Kontrollstrukturen, Ein- und Ausgaben sowie weitere Funktionsaufrufe enthalten.
def quersumme(zahl):
zahl_als_string = str(zahl)
summe = 0
for ziffer in zahl_als_string:
summe = summe + int(ziffer)
return summe
Bibliotheken
Wie viele andere Programmiersprachen verfügt Python nur über sehr wenige eingebaute Funktionen, z. B. len()
, int()
oder range()
. Diese Funktionen stellen die wichtigsten Funktionalitäten zum Programmieren und die wichtigsten Datentypen zur Verfügung. Alles, was man darüber hinaus benötigen könnte, wird von so genannten Bibliotheken zur Verfügung gestellt, wobei jede Bibliothek eine klar definierte Funktionalität erfüllt.
In Python sind einige Bibliotheken standardmäßig vorinstalliert und können mit import
genutzt werden. Dazu gehören u. a.:
Name | Zweck |
---|---|
math
|
Mathematische Funktionen wie Wurzeln, Sinus/Kosinus, Logarithmen usw. |
os
|
Zugriff auf das Betriebssystem |
sys
|
Zugriff auf Attribute und Funktionen des Python-Interpreters |
random
|
Generieren von Zufallszahlen |
tkinter
|
Programmieren von grafischen Benutzeroberflächen |
turtle
|
Zeichnen von Turtle-Grafiken |
datetime
|
Operationen mit Datum und Zeit |
shutil
|
Komplexere Operationen auf Dateien |
Daneben lassen sich auch weitere Bibliotheken von Drittanbietern nachinstallieren. Die offizielle Sammlung von Python-Bibliotheken ist der Python Package Index (PyPI). Python-Programmierys können eigene Bibliotheken erstellen und über den PyPI veröffentlichen. Dort findet man unter anderem nützliche Bibliotheken wie:
Name | Zweck |
---|---|
bottle
|
Ein einfacher Webserver |
cryptography
|
Eine Bibliothek mit kryptografischen Funktionen |
Im PyPI sind beliebte und vielgenutzte Pakete wie die Webserver Django, Bottle und Flask zu finden, aber auch Nonsens-Pakete wie shittypackage und teilweise sogar bösartige Pakete. Darum sollte man beim Benutzen von PyPI-Paketen eine gewisse Vorsicht walten lassen und sich vorher über diese Pakete informieren.
Bibliotheken einbinden und nutzen
Zum Einbinden einer Bibliothek in ein Python-Programm wird das Schlüsselwort import
verwendet. Entweder bindet man die ganze Bibliothek mit import math
ein oder pickt sich einzelne Funktionen heraus, etwa die Funktion sqrt
zum Berechnen der Quadratwurzel. In diesem Fall schreibt man from math import sqrt
. Mit from math import *
können alle Funktionen und Konstanten aus der math
-Bibliothek importiert werden.
Im ersten Fall muss man dann, um auf die Konstanten und Funktionen der Bibliothek zugreifen zu können, den Namen der Bibliothek (mit Punkt getrennt) vor die Aufrufe setzen: Für 4 schreibt man dann math.sqrt(4)
. Im zweiten Fall (from math import sqrt
oder from math import *
) schreibt man einfach sqrt(4)
, um die Funktion aufzurufen.
Ganze Bibliothek importieren | Einzelne Funktionen aus einer Bibliothek importieren | Alle Funktionen aus einer Bibliothek importieren | |
---|---|---|---|
Einbinden | import math
|
from math import sqrt
|
from math import *
|
| math.sqrt(4) → 2
|
sqrt(4) → 2
|
sqrt(4) → 2
|
math.pi → 3.141592653589793
|
pi → Fehler, weil nur sqrt importiert wurde!
|
pi → 3.141592653589793
| |
Vorteile | Keine Namensverwirrung, weil beim Funktionsaufruf der Bibliotheksname mit angegeben werden muss | Entlastet den Arbeitsspeicher, weil nur wirklich benötigte Funktionen geladen werden | Importiert eine ganze Bibliothek, ermöglicht aber kompakte Notation. |
Nachteile | Größerer Schreibaufwand und unintuitive Notationen wie datetime.datetime
|
Verwirrende Fehlermeldungen, wenn man nicht importierte Funktionen verwenden möchte | Risiko von Namensverwirrungen, z. B. gibt es ceil -Funktionen in den Bibliotheken math , numpy und torch .
|