
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

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Vor ab: der Code ist schrottig. getsum() ist überflüssig wie ein Kropf - es gibt sum() als build-in Method. Auch das global ist hier überflüssig. suxmac:~ ajung$ cat foo.py data = [0]*10 def init(): for i in range(10): data[i] = 2*i init() print data suxmac:~ ajung$ python foo.py [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] Was ist also das reale Problem? - -aj Bernd Hohmann wrote:
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
_______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
- -- ZOPYX Limited | Python | Zope | Plone | E-Publishing Hundskapfklinge 33 | Consulting & Development D-72074 Tübingen | Electronic Publishing Solutions www.zopyx.com | Scalable Web Solutions - -------------------------------------------------- Produce & Publish - www.produce-and-publish.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQGUBAEBAgAGBQJSzioOAAoJEADcfz7u4AZjg3cLvRyM0xJ3HQ3GwYpZrbZfIqq9 wfzI/pDuvlU3wpfqAAekFNhO7OvAo+7wdrlhmZRu9pQzHwELWHG1NtZavasfVqV+ zceWZQp4txRjb1bOKvELJWw5++etIpaZefEfOKEEUYSYwpqCnLrn08tsc3Mh6i37 bsmYc5gp4F2nuvFRSfSII386vutKs6YYY+iP7MKUBHT0cOBPeRVmxNCb+mifqODz djQKlx0CJ1dGchDiUXor82ad0Bqv8kmv/KmF/dQrXdZ/jusMOSS5mMbFokaTWprl 8xcN7you0hN6zlTy3v/xdhr7Ns3VoqBvvh0gfjCl7PsUBSz+PfLZHp+EI/+LE05D HuVGFxUzHTiy58dRgBKqtrp39MTZ8uGZHCnChbucP0nBWqJS+bEBtiY0wXyhsWvh lw75elByweZKePci7Wz6IB0Dtmyt2OlUwN3SCJh7ZqUTm12n+/BhqGZZ8Y3o5WCN n4kThe7OzEdHGSDNiyhs4bQ+eXzrf3c= =Pd5N -----END PGP SIGNATURE-----

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 - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
participants (3)
-
Andreas Jung
-
Bernd Hohmann
-
robert rottermann