python - 插入多个参数的优雅方式

标签 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。

谢谢!

最佳答案

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

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())

现在,“命令”组的匹配作为“命令”参数传递,“金额”作为“金额”传递。这样,函数的参数顺序和正则表达式中的组顺序不需要相同,但名称必须相同。

关于python - 插入多个参数的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40216632/

相关文章:

python - FastAPI 变量查询参数

python - 使用 sum() 打印列表中偶数的总和

python - 如何使 QTextTable 覆盖整个文档宽度

python - 为什么int.__eq__在python2中似乎没有实现

python - 如何将数字转换成文字

postgresql - 如何使用 python 或查询将嵌套的 json 列从 postgresql 数据库转换为数据框?

python - Selenium Firefox webdriver 导致错误 : Service geckodriver unexpectedly exited. 状态代码为:2

python - 绘制方程显示一个圆

python - 在 Python 3.5 中使用 PyEval_EvalCode

python - 为什么当我完成解码和编码时,我的字符串末尾有一个换行符?