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:

Code: Alles auswählen

write_outputs(map(process, read_inputs()))