Seite 1 von 2

Dynamischem Variablennamen einen Wert zuweisen

Verfasst: Sonntag 4. Januar 2009, 18:15
von alexander255
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 :?:

Verfasst: Sonntag 4. Januar 2009, 18:19
von nkoehring
Sorry, ich wuerde dir gern weiterhelfen, aber kann mit deiner Fragestellung nicht so richtig was anfangen.

Was genau willst du tun?

Verfasst: Sonntag 4. Januar 2009, 18:19
von DasIch
Das ist i.d.R. eine ganz schlechte Idee. Wieso willst du dass überhaupt machen?

Verfasst: Sonntag 4. Januar 2009, 18:22
von veers

Code: Alles auswählen

globals().update({"foo":"bar"})
Aber sei gewarnt, du willst das nicht tun. Wirklich nicht.

Verfasst: Sonntag 4. Januar 2009, 18:34
von alexander255
Aber sei gewarnt, du willst das nicht tun. Wirklich nicht.
Warum nicht?


Ps: Soll ich's mit locals machen? ;)

Verfasst: Sonntag 4. Januar 2009, 18:39
von DasIch
Der Code wird sehr schwierig zu verstehen bis nicht mehr nachvollziehbar, wenn man dass unnötigerweise einsetzt. Wenn du schreibst wofür du dass brauchst fällt vielleicht jemandem eine bessere Lösung ein.

Verfasst: Sonntag 4. Januar 2009, 19:05
von nkoehring
Ich vermute hier sowieso ein XY-Problem ...

Verfasst: Sonntag 4. Januar 2009, 19:20
von Darii
Wusste gar nicht, dass es dafür einen Namen gibt ^^

Verfasst: Sonntag 4. Januar 2009, 19:28
von audax
alexander255 hat geschrieben:
Aber sei gewarnt, du willst das nicht tun. Wirklich nicht.
Warum nicht?


Ps: Soll ich's mit locals machen? ;)
mit locals geht das so nicht, siehe Doku.

Verfasst: Sonntag 4. Januar 2009, 19:35
von alexander255
audax hat geschrieben:
alexander255 hat geschrieben:
Aber sei gewarnt, du willst das nicht tun. Wirklich nicht.
Warum nicht?


Ps: Soll ich's mit locals machen? ;)
mit locals geht das so nicht, siehe Doku.
:oops: stimmt das würde nicht sehr gut funktionieren

Verfasst: Sonntag 4. Januar 2009, 19:42
von cofi
Wenn du uns in deinen Plan einweihen würdest, könnten wir dir Vorschläge machen, wie du das besser löst ;)

Verfasst: Sonntag 4. Januar 2009, 20:14
von alexander255
Ein Sprachen backend mit Baumstruktur

Code: Alles auswählen

import lang
lang.parse(name, [tools.path.abspath('lang', __name__)])
und dann die strings über lang.[...] aufrufen zB: lang.toolbar.add

Ps: Danke für den update Tipp (seit heute unterstützt das System L10N...:))

Verfasst: Sonntag 4. Januar 2009, 20:29
von DasIch
Sorry aber dass ist imho die dümmste Idee wie man soetwas realisieren kann die ich je gesehen habe. Statt das Rad nach dem Motto "Hauptsache rund" neuzuerfinden wäre es sinnvoller etwas bestehendes wie z.B. Babel zu nutzen.

Verfasst: Montag 5. Januar 2009, 00:08
von nkoehring
Darii hat geschrieben:Wusste gar nicht, dass es dafür einen Namen gibt ^^
Ich habe das auch erst erfahren, als es mir in nem IRC wurde vorgehalten wurde :roll:

Ich hab immer noch nicht verstanden, was der gute Thread-Schreiber eigentlich bezwecken will :(

Verfasst: Montag 5. Januar 2009, 00:30
von alexander255
Ich glaube ich sollte mich einmal klar ausdrücken:

Die eigentlichen Sprachstrings stehen in einer XML Datei
Beispiel lang/pycast/de.xlf:

Code: Alles auswählen

<language>
	<group name="tray">
		<value name="tip"></value>
		<value name="Busy">Arbeitet...</value>
		<value name="Tray"></value>
		<group name="menu">
			<value name="show">&Anzeigen</value>
			<value name="showTip">Das Fenster Anzeigen</value>
			<value name="hide">&Verstecken</value>
			<value name="hideTip">Das Fenster Ausblende</value>
		</group>
	</group>
	[b]...[/b]
</language>
und diese Strukturen werden mithilfe [mod]xml.dom.minidom[/mod] in meinem [mod]lang[/mod] eingelesen und stehen dann in Python zur verfügung:

Code: Alles auswählen

>>> import lang
>>> lang.parse(name, [tools.path.abspath('lang', __name__)])
>>> lang.tray.menu
{'show': '&Anzeigen', 'showTip': 'Das Fenster Anzeigen', 'hide': '&Verstecken', 'hideTip': 'Das Fenster Ausblenden'}
>>> lang.tray.menu.show
'&Anzeigen'
Ich hoffe die Beispiele konnten den Sinn (oder unsinn) besser Darstellen

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

Verfasst: Montag 5. Januar 2009, 00:37
von DasIch
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?

Verfasst: Montag 5. Januar 2009, 00:56
von alexander255
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...)

Verfasst: Montag 5. Januar 2009, 01:45
von Leonidas
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

Verfasst: Montag 5. Januar 2009, 09:44
von BlackJack
@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".

Verfasst: Montag 5. Januar 2009, 11:21
von Leonidas
Ja, wird wohl die Uhrzeit daran schuld gewesen sein :oops: - ausgebessert.