python:如何将变量传递给只有字符串名称的函数

时间:2016-10-14 22:53:49

标签: python string variables parameters

  

我正在与一个相对复杂的程序交互,并在其上放置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)。我认为这不会是一个字典吗?

2 个答案:

答案 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}