Skip to main content

Python Kontrollstrukturen und Beispiele

Schleifen

Im Unterschied zu C und ST, zählen for-Schleifen in Python keine Schleifenvariable, sondern iterieren über eine Sequenz. Eine solche Sequenz kann beispielsweise ein „Dictionary“, eine Liste, ein Tupel, die Zeichen in einem String, oder die Zeilen in einer Datei sein.

Das folgende Beispiel zeigt einige for-Schleifen:

Beispiel 13. Beispiel loops.py
from __future__ import print_function

print("Enumerating over a simple list:")
for i in (1,2,3,4):
    print(i, end=", ") # end= replaces the newline with ", "
print()                # but we still need a newline at the end of this case.

print("Enumerating over the characters in a string:")
for i in "CODESYS": # characters are representet as strings of length 1.
    print(i, end=", ")
print()

print("Enumerating over the integers 1 to 4:")
for i in range(1, 5): # upper bound is exclusive.
    print(i, end=", ")
print()

print("Enumerating using xrange:")
for i in xrange(5): # xrange is similar to range, but needs less memory for large ranges.
    print(i, end=", ")
print()

print("Enumerating including the item number:")
for i, v in enumerate("CODESYS"):
    print(i, v)

Resultierende Ausgabe:

_cds_script_messages_loops.png


Wenn Sie Index oder Nummer zusammen mit dem Item benötigen, sollten Sie enumerate verwenden, wie oben im letzten Fall des Beispielskripts gezeigt. Es gilt als schlechter Stil, Code wie den folgenden zu verwenden:

Beispiel 14. Beispiel schlechter Stil
text = "CODESYS"

for i in range(len(text)):   # BAD STYLE!
    v = text[i]              # DON'T TRY THIS AT HOME!
    print(i, v)


Neben den for-Schleifen gibt es in Python auch while-Schleifen, die denen in C oder ST sehr ähnlich sind:

Beispiel 15. Beispiel while-Schleife
i = 0
while i < 3;
    print(i)
    i += 1

Anmerkung: Dieses Beispiel ist nicht sehr praxisnah, man würde eher eine for-Schleife mit Bereichsangabe verwenden.



IF / ELSE

Das if/else-Konstrukt ist denen ähnlich, die wir aus anderen Programmiersprachen kennen. Hier ein kurzes Beispiel:

Beispiel 16. Beispiel if_else.py
from __future__ import print_function
i = int(system.ui.query_string("Please enter an integral number..."))
if i < 0:
    print("Your number was negative.")
elif i > 0:
    print("Your numer was positive.")
else:
    print("It seems your number was zero.")


Der else-Zweig ist optional und es kann keine, einen oder mehrere elif-Zweige geben.

Funktionen, Klassen und Methoden

Python erlaubt es, Funktionen und Klassen mit Methoden zu definieren. Eine Klasse mit Methoden ist grob einem Funktionsbaustein in ST ähnlich, oder Klassen in Sprachen wie C++, Java oder C#. Aber Python unterstützt keine Schnittstellen.

Detaillierte Informationen finden Sie in der Python-Dokumentation zum Definieren von Funktionen und Klassen.

Beispiel 17. Beispiele Funktionen, Klassen, Methoden
#defining a function with name sum and two parameters a and b:
def sum(a, b):
    return a + b # we return the sum of a and b.

# we can now call the function defined above:
print(sum(5,7))

# Now we define a class Foo:
class Foo:
    # The class gets a method "bar".
    # Note: for methods, the first parameter is always "self" and
    # points to the current instance. This is similar to "this" in
    # ST and other languages.
    def bar(self, a, b):
        print("bar(%s,%s)" % (a,b))

# We create an instance of the class:
f = Foo()

# We call the method bar on the instance.
f.bar("some", "params")


Module und Standardbibliotheken

In IEC kann man Bibliotheken importieren, um von anderen geschriebenen Code wiederzuverwenden. Als Pendant gibt es in Python die Möglichkeit, Module zu importieren.

Die Python-Standardbibliothek enthält viele Module, die verschiedene Zwecke abdecken, wie beispielsweise:

  • String-Verarbeitung

  • Datums- und Zeithandhabung

  • Collections

  • Threading

  • Mathematische Funktionen

  • Dateihandhabung

  • Persistenz

  • Komprimieren und Archivieren

  • Datenbankzugriff

  • Verschlüsselungsdienste

  • Netzwerk- und Internetzugang

  • Senden von Emails

Um selbst ein Modul zu erzeugen, schreiben Sie am besten eine Python-Datei, die die Funktionen und Klassen definiert, die Sie bereitstellen wollen. Speichern Sie diese Datei im gleichen Verzeichnis wie unser Beispielskript. Wenn Sie die Datei mit mymodule.py benennen, können Sie sie mit Hilfe von import mymodule importieren.

Hier ein Beispiel für das Importieren der Cosinus-Funktion und der pi-Konstanten aus dem math-Modul sowie für deren Verwendung:

Beispiel 18. Beispiel Import mathematischer Funktion
from math import cos, pi

print(pi) # prints 3.14159265359

print(cos(pi)) # prints -1.0


Im Folgenden weitere Beispiele, in denen auf Information zum Betriebssystem, zur Python-Version und zum Interpreter zugegriffen wird:

Beispiel 19. Weitere Import-Beispiele
import os
print(os.environ["OS"])

from sys import platform, version, executable
print(platform)
print(version)
print(executable)
_cds_script_print_version_info.png


Es gibt auch ein spezielles Modul __future__, mit dem Sie neue Sprach-Features aktivieren können. Es wird vor allem verwendet, wenn Python-Entwickler neue Funktionalitäten einführen, die rückwärtskompatibel sind. Solche Funktionalitäten müssen mit speziellen „__future__-Importen“ aktiviert werden. Ein Beispiel, das wir in den meisten unserer Beispielskripte hier verwenden, ist das Aktivieren der neuen, mächtigeren Syntax von print als Funktion anstatt als Anweisung.

Beispiel 20. Beispiel __future__
# make print() a function instead of a statement
from __future__ import print_function


In der Python-Dokumentation gibt es eine volle Liste aller __future__-Importe.

Zusätzlich zu normalen Python-Modulen kann IronPython-Code auch auf .NET-Assemblys zugreifen, als wären sie Python-Module. Dies öffnet den Zugriff auf die .NET Framework Klassenbibliothek und Bibliotheken von Drittanbietern. Hier ein Beispiel, wie mit Hilfe der Bibliothek Windows Forms eine Meldungsbox geöffnet wird:

Beispiel 21. Beispiel Öffnen einer .NET Meldungsbox
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import MessageBox

MessageBox.Show("Hello")