python - 在函数中连接必需的参数和可选的参数?

标签 python

我想定义一个函数,它接受任意数量的字典,但至少有两个,我想遍历所有字典。目前我只是创建前两个列表并附加可选的列表:

def func(dict1, dict2, *dicts):
    dicts = [dict1, dict2] + list(dicts)
    for d in dicts:
        # Do stuff

但我觉得这有点不必要地复杂。我想知道是否有一种检查 *dicts 长度的替代方法可能更好,因为我不需要创建一个新的可迭代对象:

def func(*dicts):
    if len(dicts) < 2:
        raise ValueError('Too few dictionaries, you must give this function at least 2.')
    for d in dicts:
        # Do stuff

但我仍然觉得这不是很方便,因为我需要在某处解释这一点,因为函数签名看起来可以接受任意数量的指令(甚至 0 或 1)。那么有没有什么方法可以让第一个选项的签名不必在函数中创建一个完整的可迭代对象?

最佳答案

第一种方法对我来说似乎很好,您可以通过使用元组而不是第一对列表来稍微简化它,这样您就不需要额外的 list 调用:

all_dicts = (dict1, dict2) + dicts

如果你只是迭代,你不需要做一个临时变量:

for d in (dict1, dict2) + dicts:

关于python - 在函数中连接必需的参数和可选的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35834969/

相关文章:

python - Django REST Framework 3.0 - NOT NULL 约束失败 :

python - 不能使用 haystack 和引擎 Elasticsearch (Django) 与 EdgeNgramField 自动完成

python - 你如何复制 virtualenv?

python - 在 Python 中拟合正弦数据

python - 在 For 循环中格式化 Django ValidationError

python - 在 Python 中使用正则表达式匹配输入

python - 列出所有组合 (Python)

python - 将目录文件中的特定列提取到新文件中

python - 如何检查两个列表中的元素是否相同(顺序已更改)

python - 如何在discord.py中获取调用命令的人的姓名