Я пишу вспомогательную функцию python, которая принимает в качестве аргументов два списка и перебирает их. Часто второй список должен быть массивом нулей такой же длины, как и первый. Я хотел бы установить второй список в качестве аргумента ключевого слова и присвоить ему это значение по умолчанию.
def iterate(list_a, list_b = np.zeros((len(list_a),), dtype=int)):
for a, b in zip(list_a, list_b):
# do something with a and b
Однако я получаю сообщение об ошибке, что list_a не определен, что свидетельствует о том, что я не могу выполнить самоссылку вычисления в скобках при определении функции. Очевидное решение состоит в том, чтобы выбрать специальное значение по умолчанию для list_b и, если оно оставлено неизменным при вызове функции, изменить его на список нулей с помощью оператора if:
def iterate(list_a, list_b = 'zeros'):
if list_b == 'zeros':
list_b = np.zeros((len(list_a),), dtype=int)
for a, b in zip(list_a, list_b):
# do something with a and b
Это решение не кажется очень pythoni c для меня, и мне интересно, есть ли лучшая практика для этого.
Я придерживаюсь этого намерения, но могу дать более подробную информацию о том, что делает моя функция, если это необходимо.