Да. Python поддерживает специальные модификаторы входных аргументов. *
говорит, что обрабатывает аргумент как список и присваивает любые оставшиеся входные аргументы этому списку. (**
говорит, что обрабатывайте arg как dict и присваивайте ему все пары ключевых слов.) Таким образом, вы можете получить удовольствие c вроде:
def (a, b, *cd):
"do something for 'a' and 'b'"
for e in cd:
"do something for each arg 'e' in 'cd'"
Arg 'cd' может быть пустым или это может быть долго, в зависимости от того, какие параметры вы используете для вызова веселья c. Если вы ожидаете, что cd
всегда будет приходить парами, вы можете изменить for
l oop на:
for c, d in zip(cd[::2], cd[1::2]):
"do something for 'c' and 'd'"
Функция zip
принимает два списка и создает список кортежей. Итак, вышеприведенный for
l oop берет один список и разбивает его на пары, четные и нечетные. Таким образом, если 'cd' равно (x0, y0, x1, y1), вызов zip
приведет к ((x0, y0), (x1, y1)).