Python функция не может инициализировать значение аргумента - PullRequest
0 голосов
/ 05 мая 2020

У меня есть функция, которая перебирает многоуровневый вложенный словарь (arg1), собирая данные на каждой итерации, примерно так:

def dummy(arg1, found=[], index=0):
    found.append('xyz')

    for d in arg1:
        dummy(arg1[d], found, index+1)

    return found

Мои функции работают так, как предполагалось, проблема в том, что когда Я вызываю функцию во второй раз, найденный аргумент сохраняет значение из предыдущего вызова функции, т.е. возвращаемое значение из второго вызова включает в себя возвращаемые значения из предыдущего вызова. Мне пришлось добавить что-то вроде

if index == 0:
   found=list() # restart value

в начало функции, чтобы инициализировать значение найденного аргумента. Есть идеи, почему это происходит? это ошибка?

1 Ответ

1 голос
/ 05 мая 2020

Нет, это не баг; см. здесь

Чтобы избежать этого, вы должны сделать:

def dummy(arg1, found=None, index=0):
    if found is None:
        found = []
    ...

или еще лучше (см. здесь ):

sentinel = object()
def dummy(arg1, found=sentinel, index=0):
    if found is sentinel:
        found = []
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...