dememax: (Hacker Emblem)
[personal profile] dememax
Блин, вляпался таки! Всеми лапками! Помните дети!
Эти значения - вычисляются и потом эти изменяемые значения продолжают передаваться в том же виде в последующих вызовах. Читаем The Python Language Reference / 8. Compound statements / 8.6. Function definitions:

Default parameter values are evaluated from left to right when the function definition is executed. This means that the expression is evaluated once, when the function is defined, and that the same “pre-computed” value is used for each call. This is especially important to understand when a default parameter is a mutable object, such as a list or a dictionary: if the function modifies the object (e.g. by appending an item to a list), the default value is in effect modified. This is generally not what was intended. A way around this is to use None as the default, and explicitly test for it in the body of the function, e.g.:

def whats_on_the_telly(penguin=None):
    if penguin is None:
        penguin = []
    penguin.append("property of the zoo")
    return penguin

Date: 2015-11-03 07:18 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
(may I suggest not modifying things?)

Date: 2015-11-04 07:02 am (UTC)
From: [identity profile] madf.livejournal.com
Вот не зря мне Питон не нравится :)
From: [identity profile] great-mahatma.livejournal.com
>Мы ещё не услышали, что скажет этому поводу Кальтенбруннер great_mahatma?

Сказал. Но опять мой камент отмечен как подозрительный. Наверное из-за того, что в нём картинка.
From: [identity profile] great-mahatma.livejournal.com
Я умею! :-) Я ХАКОР!!! :angry:
From: [identity profile] great-mahatma.livejournal.com
Я не работал с тобой вместе "в большой интернациональной финансовой структуре в Москве", просто процитирую кусочек лога из своего скайпа за декабрь 2013-го года:

Friday, December 27, 2013

...

[2:40:25 PM] Великий Махатма: мне Питон не нравится. никак не могу привыкнуть что вместо "египетских скобок" или begin/end стейтменты и скоупы выделяются просто индентацией. неудобно IMHO. захочешь чего добавить, так вместо простого заключения этого в {} надо несколько строк исходника вправо/влево двигать. дебилизм какой-то ящитаю.
[2:41:19 PM] папаша Дорсет: согласен
[2:41:48 PM] Великий Махатма: вот уж точно write-only language, причём изначально надо всё продумывать что надо, а что нет, чтобы после блоки кода вправо/влево не двигать.
[2:42:26 PM] папаша Дорсет: Так и есть. Кто-то скрипт налабает, и все качают-запускают.
[2:44:55 PM] Великий Махатма: а потому что легче занова написать, чем добавлять/исправлять.
[2:46:07 PM] Великий Махатма: есть же нормальные скриптовые языки (нормальные по сравнению с Python). тот Perl. чего все к этому Питону так неровно дышат? не понимаю.

...


Прочитал этот твой камент и увидел что не мне одному оказывается Питон был и есть неприятен именно из-за того, что "Там же из-за отступов нельзя вот так из одного места программы в другое скопировать текст без последующего выравнивания по месту!" :-)
Edited Date: 2015-11-04 08:26 am (UTC)

Date: 2015-11-04 08:19 am (UTC)
From: [identity profile] great-mahatma.livejournal.com
Посмотрел на дату создания одного из своих файлов .py, в котором я впервые столкнулся именно с этим, с evergreen постоянством default параметров -- август 2014. До августа 2014 я тоже не знал про такую фичу недоязыка. Но с августа 2014 знаю и помню.

Date: 2015-11-05 04:44 am (UTC)
From: [identity profile] aamonster.livejournal.com
Весело. Это даже круче, чем Фортрановский прикол - все аргументы передаются по ссылке (для передаваемых констант создаются временные переменные), поэтому в отладчике после вызова процедуры можно увидеть, к примеру, что 2=3.
Edited Date: 2015-11-05 04:45 am (UTC)

Profile

dememax

May 2023

S M T W T F S
 123456
78910111213
14151617181920
21 2223 24252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 4th, 2026 06:10 pm
Powered by Dreamwidth Studios