Python: повторно инициализировать значение функции по умолчанию для последующих вызовов функции - PullRequest
1 голос
/ 01 апреля 2010

У меня есть функция, которая вызывает себя для увеличения и уменьшения стека.

Мне нужно звонить несколько раз, и я бы хотел, чтобы он работал аналогичным образом при последующих вызовах

но, как и ожидалось, он не использует значение по умолчанию.

Я читал, что это ловушка для новичка, и я видел предложенные решения, но я не смог

, чтобы любое решение работало.

Было бы неплохо иметь возможность "fun.reset"

def a(x, stack = [None]):
    print x,'  ', stack
    if x > 5:
        temp = stack.pop()
    if x <=5:
        stack.append(1)
    if stack == []:
        return    
    a(x + 1)

print a(0)
print a(2)  #second call
print a(3)  #third call

Я ожидал, что это сработает, но это не так.

print a(0, [None])
print a(2, [None])  #second call
print a(3, [None])  #third call

Можно ли вернуть функцию в исходное состояние?

Буду признателен за любую помощь.

Ответы [ 3 ]

4 голосов
/ 01 апреля 2010

Просто передайте стек явно при выполнении рекурсивного вызова:

def a(x, stack=None):
    if stack is None:
        stack = [None]
    ...
    a(x + 1, stack)
3 голосов
/ 01 апреля 2010
def a(x, stack = None):
    if stack is None:
        stack = [None]
    ...
0 голосов
/ 01 апреля 2010

Эта проблема возникает из-за изменения аргумента по умолчанию, который является изменяемым. Как и в ответе Кая, обычно это решают, не изменяя аргумент по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...