Tagebuch-Eintrag #22
Funktionen importieren in Python
In meinem vorherigen Tagebuch-Eintrag #21 habe ich gelernt, was Funktionen sind, wie ich diese erstelle und den Programm-Code aus einer Funktion aufrufen/ausgeben/aktivieren kann.
Jedoch erfolgte die Ausgabe in der gleichen Datei wie die vorhandene Funktion.
Für eine bessere Übersicht der Programm-Dateien, ist es sicher besser alle Funktionen in einer Datei zu schreiben und die jeweilige Funktionen bei Verwendung dann zu laden.
Das alles kenne ich und habe ich auch bei der Erstellung von individuellen WordPress-Themes umgesetzt. Warum sollte es also bei Python anders sein? 😉
Importieren mit from und import
Spontan fallen mir 2 Szenarien an, von wo ich die Funktionen importieren können bzw. wo sich die Datei mit den Funktionen für das Hauptprogramm befinden.
- Szenario #1: Die Datei mit den Funktionen ist im gleichen Ordner, wie die verwendete Datei
- Szenario #2: Die Datei mit den Funktionen ist in einem anderen Ordner, wie die verwendete Datei.
In jedem Fall wird der from-Befehl und der import-Befehl benötigt.
Szenario #1
Befinden sich die Datei mit den Funktionen und die Datei des Hauptprogrammes im gleichen Ordner, wird die Funktion – in meinem Beispiel die Lottozahlen – wie folgt importiert:
# 1. Aus der Datei f_lottozahlen.py im gleichen Ordner die Funktion lotto importieren
from f_lottozahlen import lotto
print("Lottozahlen-Generator aus der Datei f_lottozahlen.py im gleichen Ordner")
# Funktion lotto ausgeben.
lotto()
Der Aufbau ist super leicht zu verstehen und zu merken:
- from wählt die Datei, also die Quelle der Funktion ohne Endung .py
- import wählt dann die Funktion aus der Datei
Szenario #2
Es wird vorkommen, dass die Datei mit den Funktionen auch in einem anderen Ordner ist. Habe ich selbst schon oft gesehen – nicht nur auf Python bezogen.
Der Aufbau ist ein wenig anders, aber trotzdem noch sehr logisch und leicht zu merken:
- from wählt zuerst den Ordner, dann folgt ein Punkt (.) ohne Leerzeichen und dann den Dateinamen ohne die Endung .py mit den Funktionen
- import wählt dann die Funktion aus der Datei
# 2. Aus dem Ordner functions von der Datei wuerfeln.py die Funktion f_wuefel importieren
from functions.wuerfeln import f_wuerfel
# Funktion des Würfel-Simulartors ausgeben.
print("Würfel-Simulartor aus der Datei wuerfeln.py im Ordner functions.")
f_wuerfel()
Aus meiner bisherigen Erfahrung kann ich schon sagen, dass es für die bessere Struktur sehr zu empfehlen ist Funktionen in einer separaten Datei + Ordner abzuspeichern. Somit wird Szenario #2 für mich später sicherlich sehr wichtig sein.
Zusammengefasst
Über from spreche ich zuerst die Datei mit den Funktionen an. Wobei ich den Dateinamen ohne der Endung .py eingeben. Anschließend wird über import der Name der Funktion aus der Datei angesprochen und importiert.
Befindet sich die Datei mit den Funktionen in einem anderen Order, wird der Name des Ordner vor der Datei mit den Funktionen angegeben und mit einem Punkt (.) verbunden: from ordner.datei import funktion_name
Sauberer und übersichtlicher Programmier-Code
Meine Übung
Ich übe nun die Funktionen zu importieren. Dafür habe ich zunächst eine Datei mit den Funktionen erstellt und eine Datei für den Hauptprogramm, wo die Funktionen importiert werden.
Hauptprogramm:
from functions.my_functions import welcome
name = input("Wie heißt du? ")
welcome(name)
start_lotto = input("Möchtest du die Lottozahlen wissen? ")
if start_lotto == "j":
from functions.my_functions import lotto
print("Das sind deine Lottozahlen:")
lotto()
print("\nViel Glück!")
# Funktion Lottozahlen starten
else:
print("Du möchtest wohl nicht in Lotto gewinnen ;)")
math = input("Möchtest du Mathe-Aufgaben lösen? ")
if math == "j":
from functions.my_functions import math_test
number_of_test = input("Wie viele Aufgaben möchtest du lösen? ")
math_test(number_of_test)
print("Du hast alle", number_of_test, "Aufgaben beantwortet" )
else:
print("Du möchtest wohl nicht rechnen üben ;)")
print("Bis bald!", name)
Datei mit den Funktionen:
#== Funktion: User Name ausgeben.
def welcome(name):
print("Hallo", name + "!")
#== Funktion Lottozahlen generieren
def lotto():
import random
# Leere Liste erstellen
lottozahlen = []
# Liste erweitern um die Zahlen 1 bis 49
lottozahlen.extend(range(1,50))
# 6 Zahlen aus der Liste werden zufällig ausgegen. Bei der Verwendung von .sample werden keine doppelten Zahlen generiert.
lottozahlen_6 = random.sample(lottozahlen, 6)
# Zahlen werden hier sortiert.
lottozahlen_6.sort()
print()
# Gezogene Lottozahlen untereinander über einer for-Schleife ausgeben.
for lottozahl in lottozahlen_6:
print (lottozahl)
#== Funktion Mathe-Aufgaben generieren
def math_test(count):
# Modul random importieren
import random
# Zufallsgenerator initialisieren
random.seed()
start_calc = 0
#Generator startet
while start_calc < int(count):
# Die Zufallszahlen generieren
zahl1 = random.randint(1,100)
zahl2 = random.randint(1,100)
# Das richtige Ergebnis ausrechnen
richtiges_ergebnis = int(zahl1) + int(zahl2)
# Die Additions-Aufgabe mit den Zufallszahlen ausgeben.
print("Die Aufgabe: " + str(zahl1) + " + " + str(zahl2))
# User gibt sein Ergebnis ein
user_ergebnis = input("Ergebnis: ")
zahl3 = int(user_ergebnis)
# Das Ergebnis des Users ausgeben
print("Dein Ergebnis: ", user_ergebnis)
start_calc += 1
if zahl3 == richtiges_ergebnis:
# Ausgabe, wenn das eingegebene Ergebnis richtig ist.
print("Richtig!")
continue
else:
# Ausgabe, wenn das Ergebnis falsch ist.
print("Leider falsch.")
print("Richtige Antwort ist:", richtiges_ergebnis)
# Frage, ob eine neue Aufgabe generiert werden soll
continue
Der Code für das Hauptprogramm ist deutlich kleiner und übersichtlicher und umfasst nur 21 Zeilen Code.
Stell dir vor, die drei Funktionen mit insgesamt 50 Zeilen wären auch noch dadrin. Der Programm-Code wäre etwas zu unübersichtlich, trotz der Kommentare.
Das war’s für dieses Jahr! 😉
Mein Kopf ist voll 😀