Dynamischem Variablennamen einen Wert zuweisen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
DasIch
User
Beiträge: 2423
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Beitragvon DasIch » Montag 5. Januar 2009, 00:37

xml.dom.minidom ist wohl eines der abartigsten Dinge die die stdlib zu bieten hat, nimm ElementTree glaub mir du willst das wirklich.

Ps: Glaubt ihr ich erfinde gettext neu? :roll:

Was bietet deine Implementation was gettext nicht bietet (vorallem besser) bietet?
Benutzeravatar
alexander255
User
Beiträge: 30
Registriert: Montag 28. April 2008, 13:05

Beitragvon alexander255 » Montag 5. Januar 2009, 00:56

DasIch hat geschrieben:xml.dom.minidom ist wohl eines der abartigsten Dinge die die stdlib zu bieten hat, nimm ElementTree glaub mir du willst das wirklich.

Ich weiß, ich weiß, aber leider habe ich von ElementTree erst erfahren als es zu spät war (sprich der reader selbst war [fast] fertig und ich will nicht alles von Grund auf neu machen...)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 5. Januar 2009, 01:45

alexander255 hat geschrieben:Ps: Glaubt ihr ich erfinde gettext neu? :roll:

Nein, gettext ist bei all seinen Macken nicht halb so schlimm.

Warum:

  • getttext ist ein Standardformat, zwar kein sonderlich gutes, aber es ist populär, vor allem im Linux-Bereich und Python bietet ein Modul dafür
  • für gettext gibt es gute Software
  • die gettext-Integration in Python fühlt sich nicht an wie ein PHP-Designpattern
  • deine Lösung unterstützt keinerlei Plural. Weder einfachen Plural noch besondere Pluralarten, die einige Sprachen so haben
  • deine Lösung nutzt XML, was in dem Fall hauptsächlich überflüssig ist, keinen Vorteil bringt
  • deine Lösung nutzt DOM, was ebenso unnütz ist, insbesondere da es ElementTree in der Stdlib gibt
Zuletzt geändert von Leonidas am Montag 5. Januar 2009, 11:20, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Montag 5. Januar 2009, 09:44

@Leonidas: Ich schiebe es mal auf die Uhrzeit aber Deine Liste ist auf den ersten Blick etwas verwirrend. Bei den Punkten, die mit `es …` beginnen ändert das `es` seine Bedeutung von "Dein Eigenbau" zu "gettext".
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 5. Januar 2009, 11:21

Ja, wird wohl die Uhrzeit daran schuld gewesen sein :oops: - ausgebessert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Re: Dynamischem Variablennamen einen Wert zuweisen

Beitragvon HerrHagen » Montag 5. Januar 2009, 11:29

alexander255 hat geschrieben:Hallo,

Ich weiß nicht vielleicht eine Einsteiger? Egal...
Wie kann man (dynamische) Elemente aus einem Dict nach dem
dictschlüssel = dictwert
lokal in ein Modul einfügen?

HAA Alexander :?:

Auf die Gefahr hin, dass ich mich mit dieser Lösung wieder arg unbeliebt mache:

Code: Alles auswählen

>>> dic = {"a":1, "b":2}
>>> for i in dic:
   exec("%s = dic[%s]" % (i, repr(i)))

>>> a
1
>>> b
2

Funktioniert natürlich nur vernünftig wenn der Schlüssel ein str (und ein gültiger Variablenname) ist.

MFG HerrHagen
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Montag 5. Januar 2009, 11:36

Nachdem dein Grundansatz ziemlich umständlich ist: Was spricht eigentlich gegen die Nutzung des Dicts statt normaler Namen? Oder andersrum: Welchen Vorteil hast du, wenn du deinen globalen Namespace mit Variablen "verschmutzt", die dann eventuell andere überschreiben.

Wenn das nicht geht, solltest du eventuell doch auf gettext umsteigen.

sprich der reader selbst war [fast] fertig und ich will nicht alles von Grund auf neu machen...

Nennt sich Refactoring und erleichtert dir in Zukunft das Leben ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 5. Januar 2009, 11:37

Das fällt spätestens bei eigenen Objekten auf die Nase, denn ``<__main__.An object 0x...>`` ist keine gültige Python-Syntax.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
tordmor
User
Beiträge: 100
Registriert: Donnerstag 20. November 2008, 10:29
Wohnort: Stuttgart

Beitragvon tordmor » Montag 5. Januar 2009, 11:57

Vielleicht sowas hier:

Code: Alles auswählen

class lookup:
    def __init__(self, node):
        self.node = node
    def __getattr__(self, attr):
        n = self.findByName(self.node, attr)
        if n.nodeType = n.TEXT_NODE:
            return n.data
        else:
            return lookup(n)
    def findByName(self, name).
        # left as exercise :)
        pass
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Montag 5. Januar 2009, 12:01

Leonidas hat geschrieben:Das fällt spätestens bei eigenen Objekten auf die Nase, denn ``<__main__.An object 0x...>`` ist keine gültige Python-Syntax.

Nö, es wird ja nur der Schlüssel als str übergeben:

Code: Alles auswählen

>>> class test:
   def __init__(self, a):
      self.a = a

>>> dic = {"a":1, "b":2, "c":test(3)}
>>> for i in dic:
   exec("%s = dic[%s]" % (i, repr(i)))
   
>>> c
<__main__.test instance at 0x00BB5FA8>
>>> c.a
3

Das ganze geht nur schief wenn der Schlüssel kein gültiger Variablenname ist. Dann würde das ganze aber natürlich auch keinen Sinnn machen. (ließe sich dann leicht mit try, except SyntaxError abfangen)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 5. Januar 2009, 12:41

Hast recht, da habe ich nicht so genau geschaut.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
alexander255
User
Beiträge: 30
Registriert: Montag 28. April 2008, 13:05

Beitragvon alexander255 » Montag 5. Januar 2009, 14:43

Das ganze ließe sich auch so lösen:

Code: Alles auswählen

import msg
lang = msg.parse(name, [tools.path.abspath('lang', __name__)])

Oder so ähnlich lösen ;)

Alexander
Benutzeravatar
alexander255
User
Beiträge: 30
Registriert: Montag 28. April 2008, 13:05

Beitragvon alexander255 » Montag 5. Januar 2009, 17:50

Ihr hattet recht mit elementtree.ElementTree ich habe schon ein mindestens die hälfte der XML-Geschichten implementiert...toll :)

Leonidas hat geschrieben:
  • die gettext-Integration in Python fühlt sich nicht an wie ein PHP-Designpattern
  • deine Lösung unterstützt keinerlei Plural. Weder einfachen Plural noch besondere Pluralarten, die einige Sprachen so haben
  • deine Lösung nutzt XML, was in dem Fall hauptsächlich überflüssig ist, keinen Vorteil bringt
  • deine Lösung nutzt DOM, was ebenso unnütz ist, insbesondere da es ElementTree in der Stdlib gibtlist
  • Meinst du mit PHP-Designpattern so etwas wie <? echo blog("feed_list") ?> ?
  • Stimmt...kein Plural, mach ich gleich (Kannst du mir einen besonderen Plural nennen?)
  • Ich bin gerade dabei eine ElementTree implementation zu schreiben...s.o.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 5. Januar 2009, 18:13

alexander255 hat geschrieben:
  • Meinst du mit PHP-Designpattern so etwas wie <? echo blog("feed_list") ?> ?
  • Stimmt...kein Plural, mach ich gleich (Kannst du mir einen besonderen Plural nennen?)

Mit Üblen Designpatterns meinte ich irgendwelche Hacks an locals, globals, irgendwelche seltsamen Stringoperationen nur um sich um sauberen Code herumzuschummeln.

Und besondereren Plural gibt es etwa bei Sprachen die mehr als eine Pluralform haben. Als Beispiel etwa Singular bei 1 Ding, Plural bei 2-4 Dingen und ab 5 Dingen eine andere Pluralform (dies wird, soweit ich das verstehe, von gettext unterstützt). Oder sie haben einen Dual, Trial und dann noch den Paukal. Oder Sprachen die beim Plural unterscheiden ob der Sprecher sich mit aufnimmt in den Plural oder sich davon ausnimmt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: dark_universe