netch80: (Default)
[personal profile] netch80

Кто с ходу увидит ошибку?

    for i in range(0,3):                                                    
        test.acct_servers[i].handleAcctRequest = \                          
                lambda p: handleAcctRequest(test, test.acct_servers[i], p)  

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

UPD[2012-07-05]: от gegmopo4:
... lambda p, i=i: (далее по тексту)
Работает, но я не берусь отправлять такое в общее репо.

Date: 2012-07-04 12:53 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
lambda p, i=i:

Date: 2012-07-05 06:15 am (UTC)
From: [identity profile] netch80.livejournal.com
Ты аццкая сотона! :) Работает, хотя я не решусь выставить такой код на обозрение других.
Так что сделаем другим путём.

Date: 2012-07-05 07:38 am (UTC)
From: [identity profile] p1r4nh4.livejournal.com
Почему? Для питона это нормальный путь, забиндить переменную локальную через дефолтные аргументы.

Date: 2012-07-07 06:24 am (UTC)
From: [identity profile] netch80.livejournal.com
Мне ж ещё с другими людьми работать над этим кодом, они хуже понимают такие идиомы.

Date: 2012-07-05 08:25 am (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Это идиома. А во времена, когда из лямбды внешние локальные переменные не были видны, это был единственный способ.

А что за другой путь? Чем он отличается?

Date: 2012-07-06 05:21 am (UTC)
From: [identity profile] netch80.livejournal.com
Создали виртуальный метод для переопределения и свой подкласс для нужных целей.

Date: 2012-07-07 06:25 am (UTC)
From: [identity profile] netch80.livejournal.com
Знаю. Это отрицательная сторона коллективной работы - необходимость унификации стиля и адаптации под способности всех.

Date: 2012-07-07 06:54 am (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
List comprehensions у вас тоже забанены? Если range(0,3) не описка, я начинаю думать плохое.

Date: 2012-07-07 10:44 am (UTC)
From: [identity profile] netch80.livejournal.com
Нет, не забанены.
Не описка.
Что именно плохое?

Date: 2012-07-07 05:51 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Ну, по какой причине может появится range(0,3) вместо нормального range(3)? Первое, что приходит в голову (и наиболее вероятное) — опечатка или артефакт редактирования. Возможен ещё вариант разумного использования, если тут же рядом в коде есть range(1,4), range(2,5), range(-1,2) и т. п., причём в широком ассортименте. Но это очень, очень редкий случай. Остаётся ещё способности и вкусы кого-то, обладающего властью (чтобы принудить к этому питонистов), — т. е. просто самодурство.

Date: 2012-07-08 06:53 am (UTC)
From: [identity profile] netch80.livejournal.com
range(0,3) появляется очень просто: я его написал потому, что я запомнил вариант использования как range(min,limit) и не желаю специально думать о его редукции до range(3) в тех условиях, когда я хотел сказать именно "от 0 до 2 включительно". Это при том, что если мне стоит задача "повторить 10 раз", я напишу range(10), а не range(0,10). Это пример на полезные шаблоны (или даже паттерны) мышления, которые позволяют не влезать в лишние детали.

То, что Вы не рассматриваете такую причину в принципе, а вместо этого придумываете какое-то "самодурство", говорит, что Вы не используете полезную экономию мышления. И это грустно.

Date: 2012-07-08 07:45 am (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Похоже, что я обидел лично вас. Жаль.

Date: 2012-07-10 06:48 pm (UTC)
From: [identity profile] netch80.livejournal.com
Да, есть немножко. Но "жаль" должно быть не по поводу обиды лично меня или кого-то ещё, а по поводу скоропалительных обобщений и выводов из них.

Profile

netch80: (Default)
netch80

January 2026

S M T W T F S
    1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 2nd, 2026 02:17 pm
Powered by Dreamwidth Studios