我正在与一个相对复杂的程序交互,并在其上放置GUI来发出命令。我编写了一个简单的例子,我认为这个例子可以说明问题。我知道发出命令需要传递哪些参数,但我只能将它们作为字符串。
我动态地获得了数百个具有不同返回值的命令,但这是我传递命令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告诉我这个命令的参数是mode和seconds,但它们是字符串
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
我有从用户输入传递的值,但我不知道如何将它们传递给函数,因为我只将变量作为字符串,即'mode'和'seconds'
c = issueTheCommand(mode = input1, seconds = input2)
此命令格式将根据get_command_vars中的参数类型进行更改,因此可能是'count','datalength','milliseconds,'delay'等等
@sberry - 实际上用户输入的值是模式和秒传递的值。 16位和8位在这里并没有真正发挥作用。我试图在不改变“issueTheCommand”函数期望的格式的情况下这样做。我发布它的方式现在看起来像这样: c = issueTheCommand(mode = 8,seconds = 14)。我认为这不会是一个字典吗?
答案 0 :(得分:0)
如果我对您的问题的评论是您的意思,那么也许使用字典作为关键字参数对您有用。
>>> def issueTheCommand(mode, seconds):
... print mode, seconds
...
>>> issueTheCommand(**{"mode": "16bits", "seconds": "8bits"})
16bits 8bits
答案 1 :(得分:0)
指定为关键字的参数可以作为dict选取。相反,关键字参数可以作为dict提供。看:
>>> 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}