Python-Funktionen und Module

PythonBeginner
Jetzt üben

Einführung

In diesem Lab werden Sie zwei grundlegende Konzepte der Python-Programmierung untersuchen: Funktionen und Module. Funktionen ermöglichen es Ihnen, Ihren Code in wiederverwendbare Blöcke zu strukturieren, wodurch Ihre Programme modularer und leichter verständlich werden. Module erlauben es Ihnen, zusammengehörige Funktionen und Variablen in separaten Dateien zu organisieren, was die Wiederverwendbarkeit und Wartbarkeit des Codes fördert. Durch das Beherrschen dieser Konzepte werden Sie in der Lage sein, effizienteren und besser organisierten Python-Code zu schreiben.

Definieren und Verwenden von Funktionen

In diesem Schritt lernen Sie, wie Sie Funktionen in Python definieren und aufrufen.

Öffnen Sie den Python-Interpreter, indem Sie den folgenden Befehl in Ihrem Terminal eingeben:

python

Sie sollten den Python-Prompt (>>>) sehen, der anzeigt, dass Sie sich nun in der interaktiven Python-Shell befinden.

Python Interpreter

Beginnen wir mit der Definition einer einfachen Funktion, die eine Person begrüßt. Geben Sie im Python-Interpreter Folgendes ein:

def greet(name):
    return f"Hello, {name}!"

result = greet("Alice")
print(result)

Sie sollten die folgende Ausgabe sehen:

Hello, Alice!

Funktionen werden mit dem Schlüsselwort def definiert, gefolgt vom Funktionsnamen und Parametern in Klammern. Der Funktionskörper ist eingerückt.
Diese Funktion nimmt einen Parameter name entgegen und gibt einen Begrüßungs-String zurück. Wir rufen die Funktion dann mit dem Argument "Alice" auf und geben das Ergebnis aus.
Die return-Anweisung wird verwendet, um einen Wert aus der Funktion zurückzugeben. Wenn keine return-Anweisung vorhanden ist, gibt die Funktion None zurück.
Funktionen dienen dazu, wiederverwendbaren Code zu kapseln und spezifische Aufgaben auszuführen. Sie sind der Hauptbaustein von Python-Programmen.

Erstellen wir nun eine Funktion, die eine Berechnung durchführt:

def calculate_area(length, width):
    return length * width

area = calculate_area(5, 3)
print(f"The area is: {area}")

Sie sollten die folgende Ausgabe sehen:

The area is: 15

Diese Funktion berechnet die Fläche eines Rechtecks basierend auf seiner Länge und Breite.

Funktionen können auch Standardwerte für Parameter haben:

def power(base, exponent=2):
    return base ** exponent

print(power(3))
print(power(3, 3))

Sie sollten die folgende Ausgabe sehen:

9
27

Hier wird, falls kein Exponent angegeben wird, der Wert 2 als Standardwert verwendet.

Funktionen können mithilfe von Tuples mehrere Werte zurückgeben:

def min_max(numbers):
    return min(numbers), max(numbers)

minimum, maximum = min_max([1, 5, 3, 9, 2])
print(f"Minimum: {minimum}, Maximum: {maximum}")

Sie sollten die folgende Ausgabe sehen:

Minimum: 1, Maximum: 9

Diese Funktion gibt sowohl den Minimal- als auch den Maximalwert aus einer Liste von Zahlen zurück.

Denken Sie daran, dass die Einrückung in Python entscheidend ist. Funktionskörper müssen konsistent eingerückt sein.

Den Gültigkeitsbereich von Funktionen verstehen

In diesem Schritt lernen Sie den Gültigkeitsbereich (Scope) von Funktionen kennen und erfahren, wie sich Variablen innerhalb und außerhalb von Funktionen verhalten.

Lassen Sie uns im Python-Interpreter lokale und globale Variablen untersuchen:

x = 10  ## Global variable

def print_x():
    print(f"Global x: {x}")

print_x()

def change_x():
    x = 20  ## Local variable
    print(f"Local x: {x}")

change_x()
print(f"Global x after change_x(): {x}")

Sie sollten die folgende Ausgabe sehen:

Global x: 10
Local x: 20
Global x after change_x(): 10

Beachten Sie, dass die Funktion change_x() eine neue lokale Variable x erstellt, die das globale x nicht beeinflusst.

Um eine globale Variable innerhalb einer Funktion zu ändern, verwenden Sie das Schlüsselwort global:

def modify_global_x():
    global x
    x = 30
    print(f"Modified global x: {x}")

modify_global_x()
print(f"Global x after modify_global_x(): {x}")

Sie sollten die folgende Ausgabe sehen:

Modified global x: 30
Global x after modify_global_x(): 30

Jetzt wurde das globale x tatsächlich geändert.

Funktionen können auch auf Variablen aus ihrem umschließenden Gültigkeitsbereich zugreifen:

def outer_function(x):
    def inner_function():
        print(f"x from outer function: {x}")
    inner_function()

outer_function(40)

Sie sollten die folgende Ausgabe sehen:

x from outer function: 40

Die innere Funktion kann auf den Parameter x der äußeren Funktion zugreifen.

Das Verständnis des Gültigkeitsbereichs ist entscheidend für das Schreiben von sauberem und fehlerfreiem Code. Es hilft, unbeabsichtigte Nebenwirkungen zu vermeiden und macht Ihre Funktionen vorhersehbarer.

Erstellen und Verwenden von Modulen

In diesem Schritt lernen Sie, wie Sie Python-Module erstellen und verwenden.

Verlassen Sie den Python-Interpreter, indem Sie exit() eingeben oder Strg+D drücken.

Öffnen Sie die WebIDE in der LabEx VM-Umgebung.

WebIDE LabEx VM interface

Erstellen Sie eine neue Datei namens math_operations.py im Verzeichnis ~/project:

touch ~/project/math_operations.py

Öffnen Sie die neu erstellte Datei im WebIDE-Editor und fügen Sie den folgenden Inhalt hinzu:

## math_operations.py

def add(a, b):
      return a + b

def subtract(a, b):
      return a - b

def multiply(a, b):
      return a * b

def divide(a, b):
      if b != 0:
         return a / b
      else:
         return "Error: Division by zero"

PI = 3.14159

Dieses Modul enthält vier mathematische Grundoperationen und eine Konstante PI.

Speichern Sie die Datei (Auto-Save ist in der WebIDE aktiviert).

Erstellen Sie nun eine weitere Datei namens use_math_module.py im selben Verzeichnis:

touch ~/project/use_math_module.py

Öffnen Sie use_math_module.py in der WebIDE und fügen Sie den folgenden Inhalt hinzu:

## use_math_module.py

import math_operations

result_add = math_operations.add(5, 3)
result_subtract = math_operations.subtract(10, 4)
result_multiply = math_operations.multiply(2, 6)
result_divide = math_operations.divide(15, 3)

print(f"Addition: {result_add}")
print(f"Subtraction: {result_subtract}")
print(f"Multiplication: {result_multiply}")
print(f"Division: {result_divide}")
print(f"Value of PI: {math_operations.PI}")

Dieses Skript importiert das Modul math_operations und verwendet dessen Funktionen und Konstanten.

Speichern Sie die Datei und führen Sie sie mit dem folgenden Befehl im Terminal aus:

python ~/project/use_math_module.py

Sie sollten eine Ausgabe ähnlich dieser sehen:

Addition: 8
Subtraction: 6
Multiplication: 12
Division: 5.0
Value of PI: 3.14159

Durch das Erstellen von Modulen können Sie zusammengehörige Funktionen und Variablen in separaten Dateien organisieren, was Ihren Code wartbarer und wiederverwendbarer macht.

Wenn Sie ein Modul importieren, kompiliert Python es in Bytecode und speichert diesen in einem Verzeichnis namens __pycache__. Dieses Verzeichnis wird am selben Ort wie die Moduldatei erstellt und enthält die kompilierten Bytecode-Dateien (.pyc oder .pyo).

Sie können dieses Verzeichnis getrost ignorieren, da Python die Kompilierung und das Caching von Modulen automatisch verwaltet.

Importieren spezifischer Funktionen aus Modulen

In diesem Schritt lernen Sie, wie Sie gezielt einzelne Funktionen aus Modulen importieren und Aliase verwenden, um Ihren Code prägnanter zu gestalten.

Erstellen Sie eine neue Datei namens advanced_math.py im Verzeichnis ~/project:

touch ~/project/advanced_math.py

Öffnen Sie advanced_math.py in der WebIDE und fügen Sie den folgenden Inhalt hinzu:

## advanced_math.py

import math

def square_root(x):
      return math.sqrt(x)

def power(base, exponent):
      return math.pow(base, exponent)

def sin(angle):
      return math.sin(math.radians(angle))

def cos(angle):
      return math.cos(math.radians(angle))

Dieses Modul nutzt Pythons integriertes math-Modul, um fortgeschrittenere mathematische Operationen bereitzustellen.

Erstellen Sie nun eine Datei namens use_advanced_math.py im selben Verzeichnis:

touch ~/project/use_advanced_math.py

Öffnen Sie use_advanced_math.py in der WebIDE und fügen Sie den folgenden Inhalt hinzu:

## use_advanced_math.py

from advanced_math import square_root, power
from advanced_math import sin as sine, cos as cosine

x = 16
y = 2
angle = 30

print(f"Square root of {x}: {square_root(x)}")
print(f"{x} to the power of {y}: {power(x, y)}")
print(f"Sine of {angle} degrees: {sine(angle)}")
print(f"Cosine of {angle} degrees: {cosine(angle)}")

Dieses Skript importiert spezifische Funktionen aus dem Modul advanced_math und verwendet Aliase für sin und cos.

Speichern Sie die Datei und führen Sie sie im Terminal aus:

python ~/project/use_advanced_math.py

Sie sollten eine Ausgabe ähnlich dieser sehen:

Square root of 16: 4.0
16 to the power of 2: 256.0
Sine of 30 degrees: 0.49999999999999994
Cosine of 30 degrees: 0.8660254037844387

Durch den Import spezifischer Funktionen und die Verwendung von Aliasen können Sie Ihren Code lesbarer machen und Namenskonflikte zwischen verschiedenen Modulen vermeiden.

Erstellen eines Pakets

In diesem letzten Schritt lernen Sie, wie Sie ein Paket (Package) erstellen. Ein Paket ist eine Möglichkeit, zusammengehörige Module in einer Verzeichnishierarchie zu organisieren.

Erstellen Sie ein neues Verzeichnis namens geometry im Verzeichnis ~/project:

mkdir ~/project/geometry

Erstellen Sie innerhalb des Verzeichnisses geometry zwei Dateien: __init__.py und shapes.py:

touch ~/project/geometry/__init__.py
touch ~/project/geometry/shapes.py

Die Datei __init__.py ist erforderlich, damit Python das Verzeichnis als Paket behandelt. Sie kann leer sein oder Initialisierungscode für das Paket enthalten.

Öffnen Sie shapes.py in der WebIDE und fügen Sie den folgenden Inhalt hinzu:

## geometry/shapes.py

import math

def circle_area(radius):
      return math.pi * radius ** 2

def rectangle_area(length, width):
      return length * width

def triangle_area(base, height):
      return 0.5 * base * height

Erstellen Sie nun eine Datei namens use_geometry_package.py im Verzeichnis ~/project:

touch ~/project/use_geometry_package.py

Öffnen Sie use_geometry_package.py in der WebIDE und fügen Sie den folgenden Inhalt hinzu:

## use_geometry_package.py

from geometry.shapes import circle_area, rectangle_area, triangle_area

radius = 5
length = 4
width = 6
base = 3
height = 8

print(f"Area of circle with radius {radius}: {circle_area(radius):.2f}")
print(f"Area of rectangle with length {length} and width {width}: {rectangle_area(length, width)}")
print(f"Area of triangle with base {base} and height {height}: {triangle_area(base, height)}")

Speichern Sie die Datei und führen Sie sie im Terminal aus:

python ~/project/use_geometry_package.py

Sie sollten eine Ausgabe ähnlich dieser sehen:

Area of circle with radius 5: 78.54
Area of rectangle with length 4 and width 6: 24
Area of triangle with base 3 and height 8: 12.0

Durch das Erstellen eines Pakets haben Sie zusammengehörige Module in einer Verzeichnisstruktur organisiert, was die Verwaltung und den Import von Funktionen in Ihren Projekten erheblich erleichtert.

Zusammenfassung

In diesem Lab haben Sie zwei fundamentale Konzepte der Python-Programmierung erkundet: Funktionen und Module. Sie haben gelernt, wie man Funktionen definiert und verwendet, den Gültigkeitsbereich von Funktionen versteht, Module erstellt und nutzt, spezifische Funktionen importiert und zusammengehörige Module in Paketen organisiert.

Sie haben mit einfachen Funktionen begonnen und sich schrittweise zu komplexeren Konzepten wie dem Gültigkeitsbereich und globalen Variablen vorgearbeitet. Danach haben Sie gelernt, wie man Module erstellt, um Funktionen und Variablen in separaten Dateien zu strukturieren, was Ihren Code wartbarer und wiederverwendbarer macht.

Sie haben verschiedene Wege kennengelernt, Funktionen aus Modulen zu importieren, einschließlich des Imports spezifischer Funktionen und der Verwendung von Aliasen. Dieses Wissen ermöglicht es Ihnen, prägnanteren und lesbareren Code zu schreiben und gleichzeitig Namenskonflikte zu vermeiden.

Schließlich haben Sie gelernt, wie man ein Paket erstellt, um Module in einer Verzeichnishierarchie zu ordnen. Dies ist besonders nützlich für größere Projekte, bei denen viele zusammengehörige Module verwaltet werden müssen.

Diese Konzepte von Funktionen und Modulen sind entscheidend für das Schreiben von gut strukturiertem, effizientem und wiederverwendbarem Python-Code. Auf Ihrem weiteren Weg mit Python werden diese Fähigkeiten unerlässlich sein, um komplexere Programme zu entwickeln und an größeren Projekten mitzuarbeiten. Üben Sie diese Konzepte regelmäßig und erkunden Sie das riesige Ökosystem an Python-Modulen und -Paketen, um Ihre Programmierfähigkeiten stetig zu erweitern.