Вызовы функции Python выходят за край объем, с сохранением информации, не удаваясь инициализировать параметры?

В моем случае это проблема строки подключения. Я видел это .

После того, как я добавил mem в строку URL ниже, и это сработало.

String url = "jdbc:h2:mem:~/test";

5
задан gotgenes 6 June 2009 в 06:20
поделиться

4 ответа

В Python значения параметров по умолчанию инициализируются только при разборе вызова def. В случае объекта (например, ваших списков) он повторно используется между вызовами. Взгляните на эту статью об этом, в которой также описаны необходимые обходные пути:

http://effbot.org/zone/default-values.htm

15
ответ дан 18 December 2019 в 05:55
поделиться

Это ваш проблема:

def bleedscope(a=[], b=[]):

это должно быть

def bleedscope(a=None, b=None):
    if a is None: a = []
    if b is None: b = []

Параметры по умолчанию выполняются только один раз при синтаксическом анализе функции, поэтому каждый раз используются одни и те же 2 списка.

8
ответ дан 18 December 2019 в 05:55
поделиться

Как ни странно, ваш ввод и вывод очень похожи по совершенно случайным причинам.

На самом деле, что происходит с Python, так это то, что значения по умолчанию для a и b в объявлении вашего метода: статические »значения. Они создаются один раз при определении метода. Так что по умолчанию «a» нажимается каждый раз, когда вы не передаете «a» в качестве аргумента.

Поместите «print a» в начало вашего метода, чтобы увидеть, что это произойдет.

1
ответ дан 18 December 2019 в 05:55
поделиться

Это FAQ .

4
ответ дан 18 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: