插入多个参数的优雅方式

时间:2016-10-24 10:53:19

标签: python python-2.7

我有这本词典:

local_commands_dict = {
    r"\b(listen)\b\s(\d+)": listen_for_connections
}

其中包含要作为键匹配的正则表达式和作为值匹配的方法变量。 我使用以下代码将用户输入导航到字典中的命令:

for cmd in local_commands_dict:
    regex = re.compile(cmd)
    match = regex.match(data)
    if match is not None:
        if regex.groups == 1:
            local_commands_dict[cmd]()
        elif regex.groups == 2:
            local_commands_dict[cmd](match.group(2))
        elif regex.groups == 3:
            local_commands_dict[cmd](match.group(2),match.group(3))
                    break

其中data是用户输入。有没有更好的方法在不同数量的参数之间导航?必须有,这是Python。

谢谢!

1 个答案:

答案 0 :(得分:5)

通常,您可以使用*传递可变数量的参数:

args = (1, 2)
func(*args)  # Same as func(1, 2)

您可以调用.groups()来检索所有参数,然后传递它们:

local_commands_dict[cmd](*match.groups())

如果您将名称提供给您的论坛,那么这也适用:

def listen_for_connections(command, amount):
    pass

local_commands_dict = {
    r"\b(?P<command>listen)\b\s(?P<amount>\d+)": listen_for_connections
}

local_commands_dict[cmd](**match.groupdict())

现在,'command'组的匹配作为'command'参数传递,'amount'作为'amount'传递。这样,函数的参数顺序和正则表达式中的组顺序不需要相同,而是名称必须是。