Я не уверен в точном способе формулировать вопрос, поскольку его проще просто продемонстрировать с помощью кода. Я хотел бы иметь функцию, которая принимает переменное число из набора из 3 необходимых и 1 необязательных аргументов. В качестве иллюстрации, matplotlib.pyplot.plot()
может принимать любое количество значений (x, y, color)
. Я хотел бы скопировать это поведение, но я не уверен в правильном способе сделать это, используя * args или подобное. Ниже я иллюстрирую поведение, которое я бы хотел.Пропустить произвольное число набора переменных для функции Python
myFunc(name, lo, hi, step) # Do something
myFunc(name, lo, hi, step, name2, low2, hi2, step2) # Do something for name and name2
myFunc(name, lo, hi, name2, low2, hi2) # Same as above but use default step for both
Единственный способ, которым я могу думать о том, чтобы проходные аргументах и выполнить ряд проверок убедитесь, что он удовлетворяет тип для (name, lo, hi, step)
и проверить, если step
даже дан, но я хотел бы знать, если есть более эффективный способ сделать это.
Edit:
Я хотел выше поведение, так как моя функция использует первый набор для идентификации параметра и создать время цикла. Если осталось больше наборов параметров, он вызывает себя рекурсивно для построения вложенного цикла while с оставшимися параметрами и т. Д. Если дополнительных наборов не останется, он выполнит некоторое измерение данных и затем вернется. Таким образом, я могу прокрутить сколь угодно большое многомерное пространство, используя одну рекурсивную функцию.
Возможно, вы хотите ** kwargs. Они позволят вам необязательные аргументы ключевых слов. –
Есть части «matplotlib» api, которые я нахожу очень ужасными - это один из них. :-). В этом случае я бы рекомендовал, чтобы функция/метод вызывалась несколько раз с 3 обязательными и 1 необязательным аргументом. , , Это будет возможно для вашего случая использования? – mgilson
Отметьте это сообщение: http://stackoverflow.com/questions/3394835/args-and-kwargs – Jaco