我有这本词典:
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。
谢谢!
答案 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'传递。这样,函数的参数顺序和正则表达式中的组顺序不需要相同,而是名称必须是。