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