Почему mutable умолчания в аргументах функций - плохо?

  Рет қаралды 2,794

Хитрый питон

Хитрый питон

3 жыл бұрын

Одной из самых раздражающих ловушек в питоне, в которую попадают новички - это mutable значения по-умолчанию у именованных аргументов функции. Давайте разберемся, почему так происходит.
Я в Telegram - t.me/tricky_python
Канал создан при поддержке сообщества Moscow Python.
Наш KZfaq-канал - / @moscowdjangoru
Курсы Learn Python - learn.python.ru/

Пікірлер: 22
@dmitryzagorevskiy507
@dmitryzagorevskiy507 3 жыл бұрын
Очередная порция полезной информации. Благодарю
@radceb2474
@radceb2474 2 жыл бұрын
Спаааасиииибооооооооо!!!!! Твой канал для меня настоящая находка!!!
@86Blind
@86Blind 2 жыл бұрын
Здорово 👍👍 Редко где встретишь объяснения таких тонкостей.
@abnatop
@abnatop 3 жыл бұрын
Пожалуй самое доступное обЪяснение проблемы. Спасибо!
@andreyanokhin7235
@andreyanokhin7235 3 жыл бұрын
Кажется, проще делать проверку my_list is None и создавать пустой список )
@avazart614
@avazart614 3 жыл бұрын
Как еще один из вариантов доработки делать копирование списка из __defaults__
@user-dy4nj1cd2d
@user-dy4nj1cd2d 3 жыл бұрын
@@avazart614 а вот это уже явно перебор
@DmitrijLytkin
@DmitrijLytkin 3 жыл бұрын
Отлично. Спасибо за видео!
@xlebylllek321
@xlebylllek321 3 жыл бұрын
Спасибо за видео=)
@sainco3036
@sainco3036 3 жыл бұрын
спасибо
@nateriver8261
@nateriver8261 2 жыл бұрын
К счастью прочитал про эту проблему еще в самом начале знакомства с питоном)
@user-nb2zf3lk7j
@user-nb2zf3lk7j 2 жыл бұрын
Вот какой хитрый питон! Спасибо вам, не знал!
@alun7996
@alun7996 3 жыл бұрын
Спасибо! Очень понравилось, лайк. Но есть вопрос. Как вы считаете создание списка в рантайме (т.е. выделение места в куче и т.д.) это точно хорошая идея?
@user-dy4nj1cd2d
@user-dy4nj1cd2d 3 жыл бұрын
Что то я не допонял как так удалось обратиться к экземпляру функции изнутри самой функции. Она же вроде ещё не скомпилирована на этом этапе, разве нет? Это особенность юпитера или я что то путаю?
@user-th6xg5bk4c
@user-th6xg5bk4c 3 жыл бұрын
Это стандартная штука. В момент обработки объявления функции (блока def) интерпретатором сразу создается объект функции. Например рекурсия в питоне работает благодаря этому.
@user-dy4nj1cd2d
@user-dy4nj1cd2d 3 жыл бұрын
@@user-th6xg5bk4c как то я этого раньше не осознавал. Получается сборка экземпляра происходит из определения, а тело функции просто кидается туда как аргумент. Меня сбило с толку, что у классов это наоборот работает и там такое не пройдёт.
@snoop9860
@snoop9860 3 жыл бұрын
+1
@turtle_wave_77
@turtle_wave_77 2 жыл бұрын
но так и не объяснил, почему питон себя так ведёт. понятно, что параметр по умолчанию меняется, но не понятно как это работает.
@petyap7600
@petyap7600 3 жыл бұрын
Что за негодяй под каждым видео Диз ставит?;)
@user-zc3zk8wd8p
@user-zc3zk8wd8p 2 жыл бұрын
[mylist.append(i) for i in range(times)] - какой то дикий способ написать цикл в одну строчку, видел где то или сам придумал? (или сам видел? :)) )
@nicholasspezza9449
@nicholasspezza9449 2 жыл бұрын
базу подучи, уася, чтоб чушь не писать
@user-zc3zk8wd8p
@user-zc3zk8wd8p 2 жыл бұрын
​@@nicholasspezza9449 учись васюлька: mylist.extend(range(times))
Что такое атрибуты класса в python?
8:42
Хитрый питон
Рет қаралды 4,5 М.
아이스크림으로 체감되는 요즘 물가
00:16
진영민yeongmin
Рет қаралды 62 МЛН
Женская драка в Кызылорде
00:53
AIRAN
Рет қаралды 468 М.
Зачем нужны указатели в C++?
8:14
Знакомимся с аннотациями типов в python
8:41
Хитрый питон
Рет қаралды 6 М.
Как использовать *args и **kwargs в python?
11:22
Хитрый питон
Рет қаралды 6 М.
Generics: The most intimidating TypeScript feature
18:19
Matt Pocock
Рет қаралды 168 М.
25 Nooby Pandas Coding Mistakes You Should NEVER make.
11:30
Rob Mulla
Рет қаралды 264 М.