Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 17, 2012 05:22:50

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Такой хак (lambda вместо списка параметров)

Когда происходит выполнение лямбда выражений и разрешение имен переменных в ней? Эксперименты показывают, что при выполнении.
А это значит, зачем городить костыли вроде

Thread(target=func, args=(1,2), kwargs={'a'='b', 'c'='d'})
когда можно
Thread(lambda: func(1, 2, a=b, c=d))
И читается лучше, и автодополнение и проверка синтаксиса в IDE должны работать.

Отредактировано odnochlen (Окт. 30, 2012 03:46:25)

Офлайн

#2 Окт. 17, 2012 14:00:06

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Такой хак (lambda вместо списка параметров)

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



Офлайн

#3 Окт. 17, 2012 17:56:12

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Такой хак (lambda вместо списка параметров)

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

Собственно, этот фокус можно использовать гораздо чаще, везде там, где передается функция со списком параметров. Thread только один пример.

Офлайн

#4 Окт. 17, 2012 18:25:35

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Такой хак (lambda вместо списка параметров)

odnochlen
А target могли бы сделать первым аргументом,
Вроде такого some_func(fn, *args, **kwargs), как в concurent.futures?


Офлайн

#5 Окт. 17, 2012 18:51:27

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Такой хак (lambda вместо списка параметров)

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

Офлайн

#6 Окт. 17, 2012 21:31:54

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Такой хак (lambda вместо списка параметров)

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

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

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

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

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



Офлайн

#7 Окт. 18, 2012 02:02:24

@cckyi_boxxx
От:
Зарегистрирован: 2012-01-13
Сообщения: 181
Репутация: +  14  -
Профиль   Отправить e-mail  

Такой хак (lambda вместо списка параметров)

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

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

зы кодю онли на 2.х , на треху переходить желания пока нет



Отредактировано @cckyi_boxxx (Окт. 18, 2012 02:03:18)

Офлайн

#8 Окт. 18, 2012 03:37:56

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Такой хак (lambda вместо списка параметров)

Ну понятно, лет 10 назад содрали api с явы и так оно и осталось. Только питон не ява, в которой замыканий нет и функцию в новом треде не запустить, надо класс создавать.

Андрей Светлов
Кстати, если кто заметил: в новом Питоне
Никто не заметил - тройка ненужна, для нее нет модулей. Как ты на ней сидишь, кстати?

Офлайн

#9 Окт. 18, 2012 04:24:43

@cckyi_boxxx
От:
Зарегистрирован: 2012-01-13
Сообщения: 181
Репутация: +  14  -
Профиль   Отправить e-mail  

Такой хак (lambda вместо списка параметров)

Никто не заметил - тройка ненужна, для нее нет модулей. Как ты на ней сидишь, кстати?

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



Офлайн

#10 Окт. 18, 2012 12:08:50

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Такой хак (lambda вместо списка параметров)

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

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

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

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version