Seite 1 von 1
Programmablauf
Verfasst: Mittwoch 5. September 2018, 15:08
von ruschu
Hallo,
ich habe neu mit Python begonnen. Kann man, um ein Programm dauerhaft laufen zu lassen, nur mit der While-Schleife arbeiten oder gibt es noch andere Möglichkeiten ? Ich konnte dazu in Dokumentationen nichts finden. Von anderen Programmiersprachen kenne ich z.B. Sprungbefehle, um wieder an den Anfang zu springen.
Im voraus vielen Dank
Gruß
Ruschu
Re: Programmablauf
Verfasst: Mittwoch 5. September 2018, 15:14
von __deets__
Sprungmarken gibt es nicht. Wenn es ein simples Programm ist, dann ist eine while-Schleife das Mittel der Wahl, ja. Ansonsten gibt es diverse mainloop-Implementierungen, zB fuer tkinter, asyncio und co.
Re: Programmablauf
Verfasst: Mittwoch 5. September 2018, 15:15
von Sirius3
@ruschu: was fehlt Dir bei einer while-Schleife an Funktionalität?
Re: Programmablauf
Verfasst: Mittwoch 5. September 2018, 15:21
von __blackjack__
@ruschu: Man kann GOTO nachrüsten:
https://github.com/snoack/python-goto/ (Nicht ernstgemeinter Vorschlag

)
@Sirius3: Das ist so furchtbar übersichtlich.

Re: Programmablauf
Verfasst: Mittwoch 5. September 2018, 16:03
von ruschu
vielen Dank für die Antworten.
@Sirius3 Es geht mir hier nicht um Funktionalitäten sondern darum ob es nur mit While geht oder ob ich hier noch was anderes nehmen kann. Ich komme aus dem Bereich SPS wo alle Programme kontinurlich durchlaufen.
Re: Programmablauf
Verfasst: Mittwoch 5. September 2018, 16:22
von __blackjack__
@ruschu: Die einfachste Möglichkeit ist ``while True:`` wenn man etwas immer wieder wiederholen möchte. Neben dem `python-goto` das ich verlinkt habe, könnte man sich noch einen „tail call optimization“-Dekorator suchen (oder selber schreiben) und das ``while`` durch Rekursion ersetzen, aber das ist alles eher exotisch. In einigen Fällen geht statt ``while`` auch eine ``for``-Schleife wenn man ein Objekt hat das iterierbar ist, oder sich so eines schreiben kann.
Auf was für eine Ebene bewegen sich denn die Programmiersprachen im SPS-Bereich? Das was ich bisher gesehen habe waren eher Low-Level-Sprachen die eher an Assembler erinnern als an eine Hochsprache. Da ist Python deutlich anders.
Re: Programmablauf
Verfasst: Mittwoch 5. September 2018, 16:33
von ruschu
@__Blackjack__ Im SPS-Bereich wird hauptsächlich mit logischen Verknüpfungen gearbeitet, die in Herstellereigenen Sprachen arbeiten. In vielen Bereichen wird auch mit SCL programmiert, was auf Pascal basiert. Der Aufbau dieser Programme ist ganz anders. Es werden am Anfang alle Eingänge eingelesen und mit diesem Abbild gearbeitet. Am Schluß eines Durchlaufs werden ein Abbild der Ausgänge ausgegeben und dann läuft das Programm wieder automatisch von vorne los. Hier werden auch viele Prozesse gleichzeitig abgearbeitet.
Re: Programmablauf
Verfasst: Mittwoch 5. September 2018, 16:42
von kbr
@ruschu: in Python ist das ähnlich umsetzbar, aber eben nicht automatisch. Du bist daher sogar freier bei der Programm-Erstellung. Was Du innerhalb der while Schleife machst, darf beliebig komplex werden.
Code: Alles auswählen
while True:
data = read_input()
result = process(data)
write_output(result)
Re: Programmablauf
Verfasst: Mittwoch 5. September 2018, 16:55
von __blackjack__
Und falls man das Lesen der Eingabedaten für jeden Durchlauf schon als iterierbares Objekt hat, oder sich so etwas schreiben kann, dann kann man das auch als ``for``-Schleife ausdrücken:
Code: Alles auswählen
for data in read_inputs():
result = process(data)
write_output(result)
Oder:
Code: Alles auswählen
for result in map(process, read_inputs()):
write_output(result)
Und dann noch ganz ohne Schleife an der Stelle im Code wenn man eine Funktion oder Methode hat die ein iterierbares Objekt von Ergebnissen schreiben kann: