Skip to main content

Strutture di controllo Python (con esempi)

Cicli

A differenza di C e ST, for i loop in Python non contano le variabili di loop, ma eseguono l'iterazione su una sequenza. Questo tipo di sequenza può essere un "dizionario", un elenco, una tupla, i caratteri di una stringa o le righe di un file.

L'esempio seguente ne mostra alcuni for loop:

Esempio 13. Esempio: 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)

Uscita risultante:

_cds_script_messages_loops.png


Se hai bisogno di un indice o di un numero oltre all'articolo, dovresti usarlo enumerate come mostrato nell'ultimo caso dello script di esempio. Il codice seguente è considerato uno stile scadente:

Esempio 14. Esempio: stile scadente
text = "CODESYS"

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


inoltre for loop, anche Python ha while loop che sono molto simili a quelli in C e ST:

Esempio 15. Esempio di ciclo "mentre".
i = 0
while i < 3;
    print(i)
    i += 1

Nota: questo esempio non è molto pratico. È più probabile che tu usi a for loop con un intervallo.



SE ALTRO

Il if/else build è simile a quelli di altri linguaggi di programmazione. Ecco un breve esempio:

Esempio 16. Esempio: "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.")


Il else branch è facoltativo e possono esserci zero, uno o molti elif rami.

Funzioni, classi e metodi

Python consente di definire funzioni e classi con metodi. Una classe con metodi è fondamentalmente simile a un blocco funzione in ST o classi in linguaggi come C++, Java o C#. Tuttavia, Python non supporta le interfacce.

Per informazioni dettagliate, vedere la documentazione Python per la definizione Funzioni e Classi.

Esempio 17. Esempi: funzioni, classi e metodi
#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")


Moduli e librerie standard

In IEC, puoi importare librerie per il riutilizzo da parte di altro codice scritto. Come ciondolo, c'è la possibilità in Python di importare moduli.

Il Libreria standard Python contiene molti moduli per scopi diversi, come ad esempio:

  • Elaborazione di stringhe

  • Gestione della data e dell'ora

  • Collezioni

  • Filettatura

  • Funzioni matematiche

  • Gestione dei file

  • Persistenza

  • Compressione e archiviazione

  • Accesso al database

  • Servizi di crittografia

  • Rete e accesso a Internet

  • Invio di email

Per creare i tuoi moduli, scrivi un file Python che definisce le funzioni e le classi che vuoi fornire. Salva questo file nella stessa directory del nostro script di esempio. Se dai un nome al file mymodule.py, quindi puoi importarlo con import mymodule.

Ecco un esempio di importazione e utilizzo della funzione coseno e della costante pi dal file math modulo:

Esempio 18. Esempio: Importa funzione matematica
from math import cos, pi

print(pi) # prints 3.14159265359

print(cos(pi)) # prints -1.0


Quanto segue contiene altri esempi che accedono alle informazioni sul sistema operativo, la versione Python e l'interprete:

Esempio 19. Altri esempi di importazione
import os
print(os.environ["OS"])

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


C'è un modulo speciale __future__ per l'attivazione di nuove funzionalità linguistiche. Soprattutto, viene utilizzato quando gli sviluppatori Python introducono nuove funzionalità compatibili con le versioni precedenti. Questi tipi di funzionalità devono essere attivati con appositi "__future__ imports". Un esempio che utilizziamo nella maggior parte dei nostri script di esempio qui è l'attivazione della nuova sintassi di alimentazione di print come una funzione anziché come un'istruzione.

Esempio 20. Esempio: "__futuro__"
# make print() a function instead of a statement
from __future__ import print_function


La documentazione di Python fornisce un completo elenco di tutti __future__ importazioni.

Oltre ai normali moduli Python, il codice IronPython può anche accedere agli assembly .NET come se fossero moduli Python. Questo apre l'accesso al Libreria di classi .NET Framework e librerie di terze parti. Ecco un esempio di come aprire una finestra di dialogo tramite il Windows Forms biblioteca:

Esempio 21. Esempio: apertura di una finestra di dialogo .NET
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import MessageBox

MessageBox.Show("Hello")