Seite 1 von 1

Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 12:07
von egon11
Ich habe hier mal ein einfaches Script, was eine "globale" liste und listen in Funktionen enthält.
Die globale Liste soll in den verschiedenen Funktionen mit Werten gefüllt werden.
In Python ist vieles möglich bzw gibt es viele Wege.
Jetzt eine Frage an die Experten, ob mein nachfolgender Code fachlich richtig wäre.
Er funktioniert genau so wie ich es wollte, nur ist das auch inhaltlich richtig?

Code: Alles auswählen

liste_gesamt = []

def beispiel_1():
    function_liste = []
    string1 = "hello"
    string2 = "world"
    function_liste.append(string1)
    function_liste.append(string2)
    liste_gesamt.append("das ist die 1. Funktion")
    return function_liste

def beispiel_2():
    function_liste = []
    string1 = "hallo"
    string2 = "welt"
    function_liste.append(string1)
    function_liste.append(string2)
    liste_gesamt.append("das ist die 2. Funktion")
    return function_liste

def auswertung():
    part1 = beispiel_1() + beispiel_2()
    part2 = liste_gesamt + part1
    for i in part2:
        print(i)


if __name__ == "__main__":
    auswertung()


Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 12:11
von sparrow
Nein!
Er verwendet globale Variablen.
Funktionen bekommen alles, was sie benötigen als Parameter und geben eine Ergebnis zurück.

Weiter setzt man Zeichenketten nicht per + zusammen. In der Regel verwendet man String-Formatierung.

Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 12:17
von egon11
Warum setzt man Zeichen ketten nicht mit + zusammen? Was wäre die alternative?

Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 12:24
von egon11
sparrow hat geschrieben: Samstag 24. Oktober 2020, 12:11
Funktionen bekommen alles, was sie benötigen als Parameter und geben eine Ergebnis zurück.
Kann man keine "globale" Liste erstellen und in jeweiligen Funktionen verändern?

Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 12:40
von sparrow
Men Fehler: Du baust ja gar keine Zeichenketten zusammen.

Man kann vieles. Nur tut man es nicht. Und man verwendet keine globalen Variablen. Das macht das Programm fürchterlich unübersichtlich und so gut wie nicht mehr zu debuggen.
Und es ist überflüssig. Um dein Programm zu verstehen, muss man ständig im Hinterkopf behalten, dass da eine globale Liste irgendwo in Funktionen verändert wird. Um zu verstehen, welche Elemente liste_gesamt hat, als es das erste Mal in auswertung() aufgerufen wird, muss mein dein gesamtes Programm lesen. Ohne Merhwert.

Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 13:29
von egon11
OK danke.
Aber warum setzt man strings nicht mit den Operator "+" zusammen?

Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 13:39
von sparrow
Weil es entweder unübersichtlich oder ineffizient ist.

Möchte man einen Variabe in eine Zeichnekette einfügen, nimmt man seit >= Python 3.6:

Code: Alles auswählen

name = "egon11"
print(f"Hallo mein Name ist {name}.")
Und wenn man Zeichen oder Zeichenketten sammelt und hinterher zusammenführen möchte, dann sammelt man sie in einer Liste und führt sie dann mit join zusammen:

Code: Alles auswählen

words = ["Ist", "das", "ein", "Satz?"]
print(" ".join(words))

Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 14:08
von egon11
Ok. Das habe ich nicht gewusst, dass sich schon wieder was ab python3.6 geändert hat.
Gibt es übrigens eine Änderungsliste gegenüber der älteren Version (wie z.b. Neuerungen 3.5 zu 3.6 ...)?

Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 14:22
von __blackjack__
Eine Möglichkeit das ohne die globale Liste zu schreiben:

Code: Alles auswählen

#!/usr/bin/env python3


def beispiel_1():
    return ["hello", "world"], "das ist die 1. Funktion"


def beispiel_2():
    return ["hallo", "welt"], "das ist die 2. Funktion"


def auswertung():
    ergebnisse = []
    liste_gesamt = []
    for beispiel in [beispiel_1, beispiel_2]:
        ergebnis, gesamt_element = beispiel()
        ergebnisse.extend(ergebnis)
        liste_gesamt.append(gesamt_element)
    
    part2 = liste_gesamt + ergebnisse
    for element in part2:
        print(element)


if __name__ == "__main__":
    auswertung()
Eine Änderungs-/Neuerungsliste gibt es bei jeder Version in der Python-Dokumentation.

Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 14:43
von snafu
egon11 hat geschrieben: Samstag 24. Oktober 2020, 14:08 Gibt es übrigens eine Änderungsliste gegenüber der älteren Version (wie z.b. Neuerungen 3.5 zu 3.6 ...)?
https://docs.python.org/3/whatsnew/3.6.html

Re: Liste und Funktionen

Verfasst: Samstag 24. Oktober 2020, 17:09
von egon11
OK Danke.

Re: Liste und Funktionen

Verfasst: Montag 26. Oktober 2020, 11:21
von egon11
Was ich mich noch gefragt habe, warum führt man die Funktionen nicht schon in der Schleife aus?

Code: Alles auswählen

def auswertung():
    ergebnisse = []
    liste_gesamt = []
    for beispiel in [beispiel_1(), beispiel_2()]:
        ergebnis, gesamt_element = beispiel
        ergebnisse.extend(ergebnis)
        liste_gesamt.append(gesamt_element)

    part2 = liste_gesamt + ergebnisse

Re: Liste und Funktionen

Verfasst: Montag 26. Oktober 2020, 23:33
von __blackjack__
@egon11: Du meinst *vor* der Schleife und das wäre dann auch die Antwort: Wenn man beide Funktionen vor der Schleife ausführt hat man ja erst einmal alle Ergebnisse in der Liste als Tupel. Wenn man sie *in* der Schleife ausführt, hat man immer nur das Ergebnis der aktuell aufgerufenen Funktion als Tupel vorliegen.

Re: Liste und Funktionen

Verfasst: Donnerstag 29. Oktober 2020, 15:47
von egon11
Aber wenn ich so wie ich es geschrieben habe ausführe komme ich aber komischerweise zum gleichen Ergebnis.

Re: Liste und Funktionen

Verfasst: Donnerstag 29. Oktober 2020, 16:24
von __blackjack__
@egon11: Ja natürlich, warum solltest Du nicht zum gleichen Ergebnis kommen‽ Es unterscheidet sich ja nur zu welchem Zeitpunkt im Programmablauf die gleichen Ergebnisse produziert werden und ob die Zwischenergebnisse alle gleichzeitig existieren, oder nur dann und so lange wie sie tatsächlich benötigt werden.

Re: Liste und Funktionen

Verfasst: Donnerstag 29. Oktober 2020, 16:53
von egon11
Ach so ok.