2016-10-14 3 views
0
übergeben

Ich bin mit einem relativ komplexen Programm interagieren und setzen Sie eine GUI, um Befehle zu erteilen. Ich habe ein einfaches Beispiel erfunden, von dem ich denke, dass es das Problem zeigt. Ich weiß, welche Parameter übergeben werden müssen, um einen Befehl auszugeben, aber ich kann sie nur als Zeichenfolgen erhalten.Python: Wie kann ich eine Variable an eine Funktion mit nur dem String-Namen

Es gibt Hunderte von Befehlen mit unterschiedlichen Rückgabewerte, die ich dynamisch, aber dies ist ein Beispiel dafür, was ich kann zurückkommen, wenn ich einen Befehl ID

def get_command_vars(commandID = None): 
    if commandID == '0x4F': 
    return [['mode', '16bits'], ['seconds', '8bits']] 


def issueMyCommand(commandID = None): 
    commandParameters = get_command_vars(command=0x4F) 

commandParameters passieren sagt mir, dass die Parameter für diesen Befehl sind Modus und Sekunden, aber sie sind Strings

commandParm_1 = commandParameters[0][0] # 'mode' 
commandParm_2 = commandParameters[1][0] # 'seconds' 

>get User Input from the gui to pass to issuetheCommand 
input1 = getinputEntry1() # this is the 'mode' value, e.g., 8 
input2 = getinputEntry2() # this is the 'seconds' value, e.g., 14 

Ich habe die Werte aus der Benutzereingabe passieren, aber ich weiß nicht, wie sie an die Funktion zu übergeben, da ich die Variablen als Strings, ie'mode nur haben‘und‚Sekunden‘

c = issueTheCommand(mode = input1, seconds = input2) 

dieses Befehlsformat wird auf den Parameter-Typen von get_command_vars Basis ändern, könnte es so ‚count‘, ‚datalength‘, ‚Millisekunden Verzögerung ', usw.

@sberry sein - tatsächlich der Benutzer Eingabewerte werden mit Modus und Sekunden übergeben. die 16 Bit und 8 Bit kommen hier nicht wirklich zum Tragen. Ich versuche dies zu tun, ohne das Format zu ändern, das die Funktion "issueTheCommand" erwartet, wenn möglich. die Art, wie ich es jetzt ausstelle, sieht so aus: c = issueTheCommand (Modus = 8, Sekunden = 14). Ich glaube nicht, dass es ein Diktat braucht.

+0

Nur damit ich verstehe, möchten Sie 'issueTheCommand' mit benannten Parametern aufrufen, ja? Sie könnten also am Ende 'issueTheCommand (mode = '16bits', seconds = '8bits')' '? – sberry

Antwort

0

Wenn mein Kommentar zu Ihrer Frage ist, was Sie nach dann vielleicht ein Wörterbuch als Leitwort Argumenten für Sie arbeiten würde.

>>> def issueTheCommand(mode, seconds): 
...  print mode, seconds 
... 
>>> issueTheCommand(**{"mode": "16bits", "seconds": "8bits"}) 
16bits 8bits 
+0

tatsächlich, dass die Arbeit nicht - thx (können Sie kommentieren „wie“ es funktioniert?) – rebar

+0

Die Doppel Sternchen '**' das Wörterbuch in die Funktion als Argumente auspacken, wie sie in den „Auspacken Schlüsselwort-Argumente“ Abschnitt http erklärt://caisbalderas.com/blog/python-funktion-unpacking-args-and-kwargs/. Im Wesentlichen weisen die Sterne den Schlüsselwert "mode", "16bits", in den Parameter "mode" der Funktion sowie den Schlüsselwert "seconds" in den Parameter "seconds" ein. – rlee827

0

Argumente, die als Schlüsselwörter angegeben sind, können als Diktat abgerufen werden. Umgekehrt können Schlüsselwortargumente als Diktat bereitgestellt werden. Aussehen:

>>> def a(**b): # Pick up keyword args in a dict named b. 
... print(b) 
... 
>>> a(x=1, y=2) 
{'y': 2, 'x': 1} 
>>> c = {'y': 2, 'x': 1} 
>>> a(**c) 
{'y': 2, 'x': 1} 
Verwandte Themen