2016-06-17 14 views
0

Ich bin ziemlich neu bei Python und Programmierung im Allgemeinen, so entschuldige ich mich im Voraus, wenn meine Terminologie nicht korrekt ist.Python-Funktion String-Parameter in Variablenname konvertieren

hue_alert_delay = 0 

def delays(name, delay): 
    global hue_alert_delay 

    if name == 'hue_alert_delay': 
     for i in range(0, delay): 
      hue_alert_delay += 1 
      time.sleep(1) 

     hue_alert_delay = 0 

delays('hue_alert_delay', 60) 

Was ich versuche zu erreichen:

ich die Funktion möchte den ‚name‘ Parameter konvertieren, die eine Zeichenfolge eingegeben wird, in eine vorge austretende Variable, die die Notwendigkeit zunichte machen wird für mehrere IF-Anweisungen.

Das obige Beispiel enthält nur eine IF-Anweisung, aber für mein Projekt gibt es viel mehr sein, und ich würde eher die Funktion einfach und sauber halten.

Das wird nicht funktionieren, aber es ist, was ich versuche zu zielen:

hue_alert_delay = 0 

def delays(name, delay): 
    global name 

    for i in range(0, delay): 
     name += 1 
     time.sleep(1) 

    hue_alert_delay = 0 

delays('hue_alert_delay', 60) 

Jede Hilfe würde geschätzt.

Antwort

0

Verwenden Sie ein Wörterbuch wie folgt.

vars = {'hue_alert_delay':0} 
def delays(name, delay): 
    for i in range(0, delay): 
     vars[name] += 1 
     time.sleep(1) 
    vars[name] = 0 

Sie können auch globals()[name] verwenden, aber ich werde es nicht empfehlen.

+1

Die 'global' Schlüsselwort ist hier nicht notwendig. Du versuchst nicht, diesen Namen zu irgendeinem Zeitpunkt neu zuzuweisen. Sie mutieren gerade dieses Objekt. – TigerhawkT3

+0

Danke sehr, sehr viel, ich angewandt, dieses Prinzip auf mein Projekt und es funktionierte perfekt. – Sparkacus

+0

Ich bin auch ziemlich neu in Foren :). Sollte ich den Beitrag etwas auf den neusten Stand bringen? – Sparkacus

1

Verwenden Sie ein dict:

values = { 
    'hue_alert_delay': 0 
} 

def delays(name, delay): 
    values[name] += 1 

Jedes Mal, wenn Sie wie mit „Variable Variablen“ fühlen, was Sie wahrscheinlich wirklich wollen, ist ein dict Schlüssel-Wert-Assoziationen zu speichern. Ja, dort sind andere Möglichkeiten, wörtlich zu tun, was Sie wollen, aber das führt bald zu verrückt Code.

+0

Vielen Dank – Sparkacus

0

ein Wörterbuch verwenden:

vars = {'hue_alert_delay':0} 

def delays(name, delay): 
    for i in range(delay): 
     vars[name] += 1 
     time.sleep(1) 

    vars[name] = 0 

delays('hue_alert_delay', 60) 
+0

Big danke euch allen – Sparkacus