Bezeichnung einer Variable

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.
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Samstag 29. März 2008, 09:16

Hallo,

Wie bekomme ich den Namen bzw. die Bezeichnung einer Variablen raus?

Beispielsweise habe ich

a=1000

Nun möchte ich den Namen von a in einem String schreiben, sozusagen (Pseudocode):

print bezeichnung_von(a)

>>> 'a'

Das wäre schön praktisch zum Abspeichern im ConfigParser. Was ich eingentlich haben möchte, ist eine Liste in die ich alle Variablen eintrage, die gesichert werden sollen. Und die soll dann möglichst einfach vom ConfigParser verwurstet werden...

Danke!
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Samstag 29. März 2008, 09:48

Ich denke, du suchst ein Dictionary.

Code: Alles auswählen

options = {}
options['a'] = 1000
...

# zum Sichern dann:
c = ConfigParser()
for key, value in options.iteritems():
    c.set('section', key, value)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Samstag 29. März 2008, 09:48

Um es kurz zu machen: Schau dir mal Dicts an.
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Samstag 29. März 2008, 10:26

Dictionaries sind leider nicht das, was ich suche. Ich benötige ja eigentlich kein Key-Value-Paar. (Wenn es aber eine Funktion gäbe, die aus einer einfachen Variable eines erstellt, dann ließe ich mich vielleicht überreden).

Ich suche lediglich eine Funktion, die den Variablennamen ausliest.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 29. März 2008, 10:34

Um die Diskussion nicht nochmal zu wiederholen: geht nicht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Samstag 29. März 2008, 10:51

RedSharky hat geschrieben:Dictionaries sind leider nicht das, was ich suche. Ich benötige ja eigentlich kein Key-Value-Paar.
Doch, genau das brauchst du, wenn du den Namen brauchst.

Es gibt natürlich auch Möglichkeiten, aus dem aktuellen Namespace ein Dictionary zu machen: locals()
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Samstag 29. März 2008, 12:27

Also danke für eure Antworten.
Werde mir Dictionary noch mal anschauen (da es wohl nix besseres gibt).
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Samstag 29. März 2008, 14:29

RedSharky hat geschrieben:Also danke für eure Antworten.
Werde mir Dictionary noch mal anschauen (da es wohl nix besseres gibt).
Der Punkt ist weniger, sofern du nicht gerade einen Debugger o.Ä. schreibst, dass es nichts besseres als das Dictionary gibt, als eher, dass deine Herangehensweise ungünstig ist.
Kannst du vielleicht das Problem etwas erläutern, wozu du den Namen der Variablen brauchst?
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Samstag 29. März 2008, 18:57

Die Idee dahinter ist folgende:

Wenn man beim ConfigParser etwas mit Set speichern möchte, muss man Werte für Section, Key und Value angeben. Um sich nicht jedesmal einen Key-Namen ausdenken zu müssen, dachte ich mir, nehme ich einfach den Variablennamen. Dafür scheint aber, so wie ich das vertanden habe, keine geeignete Funktion zu existieren.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 29. März 2008, 18:59

RedSharky hat geschrieben:Dafür scheint aber, so wie ich das vertanden habe, keine geeignete Funktion zu existieren.
Das Funktioniert schon allein logisch nicht, denn ein Objekt kann mehrere Namen speichern. Willst du etwas das gleiche Objekt mehrmals speichern, weil es verschiedene Namen hat?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Samstag 29. März 2008, 19:02

Leonidas hat geschrieben:Das Funktioniert schon allein logisch nicht, denn ein Objekt kann mehrere Namen speichern.
Urgh, du kriegst damit den Preis für die schlimmste Terminologie verliehen :).
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Samstag 29. März 2008, 19:10

Nein, ich möchte nur den ConfigParser benutzen und zwar mit so wenig Aufwand wie möglich, nix besonderes. Wie macht ihr das denn so?

Ich hab hier im Forum schon einige Beispiele gefunden. Die sind aber deutlich über- oder unterdimensioniert, will sagen: so kompliziert wie ich sie überhaupt nicht brauche/verstehe, oder so minimalistisch, dass sie keiner verwenden kann. Was ich bräuchte, wäre mal so ein mittelkompliziertes Beispiel für den Einsatz eines ConfigParsers.

Natürlich habe ich mir sowas selbst zusammengetippt (funktioniert sogar), aber es geht sicherlich besser. Jedesmal einen Namen für den Key angeben zu müssen, obwohl er ja eigentlich als Variablenname existiert, ist für mein Verständnis einfach unelegant. Ich tippe dann jedesmal den Variablennamen als Key noch mal ab... Außerdem habe ich dabei Schwierigkeiten das ganze in ein separates Modul auszulagern.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 29. März 2008, 19:22

birkenfeld hat geschrieben:
Leonidas hat geschrieben:Das Funktioniert schon allein logisch nicht, denn ein Objekt kann mehrere Namen speichern.
Urgh, du kriegst damit den Preis für die schlimmste Terminologie verliehen :).
s/speichern/haben/. Ums zu präzisieren: ein Objekt weiß nicht wie es heißt, es ist sich nicht bewusst, welche Namen daran gebunden sind.

Grml, manchmal sollte ich die Logik meiner Antworten checken, dann kommt auch weniger Schmarrn raus. Oder dauerhaft aufs Neo-Layout schalten, dann geht das mit dem Schmarrn schreiben nicht so schnell.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 29. März 2008, 19:24

RedSharky hat geschrieben:Natürlich habe ich mir sowas selbst zusammengetippt (funktioniert sogar), aber es geht sicherlich besser. Jedesmal einen Namen für den Key angeben zu müssen, obwohl er ja eigentlich als Variablenname existiert, ist für mein Verständnis einfach unelegant. Ich tippe dann jedesmal den Variablennamen als Key noch mal ab... Außerdem habe ich dabei Schwierigkeiten das ganze in ein separates Modul auszulagern.
Wenn du große Teile deines Programmes 1:1 abspeicherst ist das eher ein Fall für pickle als für ConfigParser, denn eine Konfiguration kann man gut mit einem Dictionary lösen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
RedSharky
User
Beiträge: 99
Registriert: Donnerstag 13. April 2006, 15:38

Samstag 29. März 2008, 19:42

Danke, aber pickle kenn ich schon.

Ich habe mal aus ein Beispiel erstellt, das ich so ähnlich auch in anderen Projekten verwende. Allerdings bin ich damit nicht wirklich zufrieden. Es wäre echt freundlich, wenn mir jemand ein paar Tipps zur Verbesserung geben könnte. Insbesondere möchte ich weg von den globalen Variablen, und das später mal in ein eigenes Modul packen, damit ich das leicht wiederverwenden kann.

Code: Alles auswählen

import ConfigParser 
import sys

#--- global variables ---------------------------------------------------------

a = 1000
b = 'abcd'


#--- funcions -----------------------------------------------------------------

def write_config():
    global a, b
    
    config = ConfigParser.ConfigParser()
    
    # set parameters
    config.add_section('variables')    #create a section
    config.set('variables','a', a)      #set the 'name: value'
    config.set('variables','b', b)
    
    # write to screen
    print
    print "Save configuration:"
    config.write(sys.stdout)
   
    # write to file
    new_config = file('example.ini','w') #create file object
    config.write(new_config)            #write file object
    print "Configuration saved.\n"
    
    
def read_config():
    global a, b
    config = ConfigParser.ConfigParser()
    config.read('example.ini')
    
    # feedback to screen
    print
    print "Load configuration:"
    config.write(sys.stdout)
    print "Configuration loaded.\n"
    
    try: a = config.get('variables','a') #get(section,name)
    except: print "Unable to load a!"
    
    try: b = config.get('variables','b') #get(section,name)
    except: print "Unable to load b!"


#--- main stuff ---------------------------------------------------------------

def main():    
    global a, b
    read_config()

    # here comes main part of the script
    
    print 'a:', a
    print 'b:', b
    
    
    # here ends the main part of the script
    
    write_config()
    print "End of script."


if __name__ == '__main__':
    main()
Antworten