Python 2 / Jython: Modularisierung

09/01/2014 - 02:31 von Bernd Hohmann | Report spam
Ich möchte mein Forschungsprojekt unter Jython/Sikulix langsam mal
modularisieren und eine Toolbox bauen.

Mein Problem ist jetzt der Scoping-Mechanismus von Python weil ich nicht
verstehe/weiss, ob der nun Imports einfach includiert und irgendwo
Pràfixe zur Kollisionsvermeidung setzt oder das separat zur Laufzeit
kompiliert.

Mal ein simples Beispiel aus dem Kopf analog den Konstruktionen in
meinem Projekt:

intValues = [0] * 10

def setval(idx, val):
global intValues
intValues[idx]=val

def getsum():
sum=0
for i in intValues:
sum=sum+intValues[i]
return sum

In anderen (Script)Sprachen bràuchte ich kein "global intValues" bzw.
"intValues" wàre von jeder Funktion les- und beschreibbar.

Wie lagert man sowas jetzt sowas am geschicktesten in eine separate
Datei bzw. Toolbox aus?

Bernd
 

Lesen sie die antworten

#1 robert rottermann
09/01/2014 - 10:18 | Warnen spam
Am 09.01.2014 02:31, schrieb Bernd Hohmann:
Ich möchte mein Forschungsprojekt unter Jython/Sikulix langsam mal
modularisieren und eine Toolbox bauen.

Mein Problem ist jetzt der Scoping-Mechanismus von Python weil ich nicht
verstehe/weiss, ob der nun Imports einfach includiert und irgendwo
Pràfixe zur Kollisionsvermeidung setzt oder das separat zur Laufzeit
kompiliert.

Mal ein simples Beispiel aus dem Kopf analog den Konstruktionen in
meinem Projekt:

intValues = [0] * 10

def setval(idx, val):
global intValues
intValues[idx]=val

def getsum():
sum=0
for i in intValues:
sum=sum+intValues[i]
return sum

In anderen (Script)Sprachen bràuchte ich kein "global intValues" bzw.
"intValues" wàre von jeder Funktion les- und beschreibbar.


das scheint mir unwahrscheinlich, zumindest unsauber.
Das würde ja bedeuten, dass irgend eine Methode deine globale Variable
entweder definiert oder auch nicht..
Du wüsstest also nie, ob sie definiert ist.

Wie lagert man sowas jetzt sowas am geschicktesten in eine separate
Datei bzw. Toolbox aus?


Du machst ein config modul, das Du überall inkludierst.
Ausserdem kannst Du im Falle von Listen, Dictonaries usw auf die global
declaration verzichten.
intValues = [0] * 10

def setval(idx, val):
intValues[idx]=val
print intValues
setval(3, 'geaendert')
print intValues

ergibt:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 'geaendert', 0, 0, 0, 0, 0, 0]

gruss
robert


Bernd


_______________________________________________
python-de maillist -
https://mail.python.org/mailman/listinfo/python-de

Ähnliche fragen