Python 插入多个参数的优雅方式

Python 插入多个参数的优雅方式,python,python-2.7,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 N

我有这本字典:

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
其中,
数据
是用户输入。有没有更好的方法在不同数量的争论之间导航?肯定有,是Python


谢谢

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

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())
def listen_查找_连接(命令、数量):
通过
本地命令\u dict={
r“\b(?Plisten)\b\s(?P\d+):侦听\u以获取\u连接
}
本地命令\u dict[cmd](**match.groupdict())

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

好的,如果我只想发送组
1-n
?其中
n
是组的最大数量。请注意,
n
从一个命令更改为另一个命令..groups()是所有匹配的组,因此它也会从一个命令更改为另一个命令,我不理解您的问题。因为,如果我没记错的话,
组(0)
始终是完全匹配的。我不需要将其传递到我的函数中。是的,但是如果您选中,您会看到.groups()不包含它。如果包含它,则必须在调用后放置
[1:://code>。