Найти - Пользователи
Полная версия: Такой хак (lambda вместо списка параметров)
Начало » Python для новичков » Такой хак (lambda вместо списка параметров)
1 2
odnochlen
Когда происходит выполнение лямбда выражений и разрешение имен переменных в ней? Эксперименты показывают, что при выполнении.
А это значит, зачем городить костыли вроде
Thread(target=func, args=(1,2), kwargs={'a'='b', 'c'='d'})
когда можно
Thread(lambda: func(1, 2, a=b, c=d))
И читается лучше, и автодополнение и проверка синтаксиса в IDE должны работать.
Андрей Светлов

Тогда уже Thread(target=lambda: func(1, 2, a='b', c='d')). Всё равно громоздко.

odnochlen
Зато в документацию лазить не надо и автодополнение. А target могли бы сделать первым аргументом, он кагбе используется чаще, чем group. А так скопировали жавоидное api.

Собственно, этот фокус можно использовать гораздо чаще, везде там, где передается функция со списком параметров. Thread только один пример.
reclosedev
odnochlen
А target могли бы сделать первым аргументом,
Вроде такого some_func(fn, *args, **kwargs), как в concurent.futures?


odnochlen
Да нет, просто, чтобы target не надо было указывать как хеш-аргумент.
Андрей Светлов

Ребята, конструктор Thread появился очень давно, изменить его сигнатуру означает нарушить обратную совместимость со всем имеющимся кодом. Такое делать нельзя.

Вот если бы threading проектировался сейчас — он был бы другим.

Кстати, если кто заметил: в новом Питоне методы вроде setDaemon и setName стали свойствами (методы тоже остались для той самой обратки), Lock и Condition теперь классы а не функции-фабрики.

В 3.4, возможно, войдет RWLock.

Так что работа ведется, но некоторые части нельзя выкинуть или поменять.

@cckyi_boxxx
хз кому как а мне удобнее без лямбды прост код пишу не в одну строку а как-то так :

Thread(target=func, 
       args=(1,2), 
       kwargs={'a'='b', 
               'c'='d'})

зы кодю онли на 2.х , на треху переходить желания пока нет
odnochlen
Ну понятно, лет 10 назад содрали api с явы и так оно и осталось. Только питон не ява, в которой замыканий нет и функцию в новом треде не запустить, надо класс создавать.
Андрей Светлов
Кстати, если кто заметил: в новом Питоне
Никто не заметил - тройка ненужна, для нее нет модулей. Как ты на ней сидишь, кстати?
@cckyi_boxxx
Никто не заметил - тройка ненужна, для нее нет модулей. Как ты на ней сидишь, кстати?

поддерживаю , хоть сам это е***** ****мо не юзал но негативных отзывов хватает , разрабы лучше-бы не х-ней маялись а решили реальные косяки питона , такие например как постоянный геммор с кодировкой , или уже нашумевший косячный питоновский GIL подправили-бы , да и удобная возможность общения потоков друг с другом тоже не была-бы лишней , короче они походу курнули нехило когда решили чего нового в тройке сбацать
Андрей Светлов

Ровно сижу. С удобством. Мне модулей хватает.

@cckyi_boxxx: не читал, но порицаю...

Кодировка давно починена, если что. GIL мешает только виртуально, если руки кривые. На самом деле при нагрузке нужно масштабирование на кластер, что предполагает многопроцессовость а не многопоточность.

Про удобное общение потоков — вообще не понял. Есть конкретное предложение или это абстрактная хотелка из серии «сделайте мне красиво»?

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB