Guru Deshmukh Ответов: 2

Пожалуйста, объясните результат работы программы


def extendList(val, list=[]):
      list.append(val)
      return list
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print(list1)
print(list2)
print(list3)


Что я уже пробовал:

выход из программы
list1 -- [10,'a']
list2 -- [123]
list3 -- [10,'a']


Как list1 имеет 'a' в своем выводе

Patrice T

Не перепечатывайте один и тот же вопрос.

Guru Deshmukh

Извините, дублировали, удалили другой:)

2 Ответов

Рейтинг:
9

Richard MacCutchan

См. пункт, озаглавленный Важное предупреждение: около 4. Больше инструментов, управление потоком — 3.4.9 документации по языку Python [^]


Рейтинг:
0

Patrice T

Цитата:
Как list1 имеет 'a' в своем выводе

Это связано с тем, как Python внутренне работает с указателями.
Когда вы храните список в переменной, список не копируется, вместо этого указатель на фактический список хранится в переменной, это одновременно эффективно и быстро.
Что для меня противоречит интуиции, так это то, что list=[] не создавайте новый список во второй раз, но повторно используйте тот же самый, что и в первый раз.
Обратитесь к документации для получения подробной информации о списках и указателях.
Используйте отладчик, чтобы точно видеть, что происходит.
-----
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]
27.3. ПДБ — отладчика Python — питон 3.6.1 документации[^]
Отладка в Python | Python покоряет Вселенную[^]
pdb – интерактивный отладчик - Python модуль недели[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Richard MacCutchan

Смотрите мой ответ.

Guru Deshmukh

Большое спасибо.