Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2009 12:14:46

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

Покажите пожалуйста примеры, где использование lambda-функций более целесообразно, чем что-то аналогичное. Желательно, не сложные и с пояснениями. Как мне кажется, в любой ситуации можно обойтись без них, но раз их изобрели, то должны быть моменты, где они более уместны, несмотря на их некоторую запутанность (по крайней мере, для новичков).



Офлайн

#2 Июль 16, 2009 12:38:27

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

Самый простой пример. Только что проскакивало у меня в gui

    self.exit=Button(self.win,text='Выход',command=lambda :self.win.destroy() )
# без lambda было так...
self.exit=Button(self.win,text='Выход',command=self.exit_action )
....
def exit_action(self):self.win.destroy()
Можно использовать, можно не использовать…. В примере выше, нецелесообразно создавать новую функцию для одного лишь действия.



Офлайн

#3 Июль 16, 2009 14:05:17

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

2 igor.kaist, а в этом примере разве нельзя просто написать

self.exit=Button(self.win,text='Выход',command=self.win.destroy)



Офлайн

#4 Июль 16, 2009 14:55:55

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

Viper
2 igor.kaist, а в этом примере разве нельзя просто написать
нет, иначе, эта функция тут же вызовется…



Офлайн

#5 Июль 16, 2009 15:09:00

paganmind
От:
Зарегистрирован: 2008-12-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

Целесообразно использовать там, где аргументом должна быть функция, которой у вас еще нет, но которую легко сделать на базе другой функции.
Простой пример:


>>> s=('111;222;333','555;666;777')
>>> map(lambda x: x.split(';'), s)
[['111', '222', '333'], ['555', '666', '777']]
или

>>> s = (1,2,3,4,5)
>>> map(lambda x: pow(x,3), s)
[1, 8, 27, 64, 125]



Отредактировано (Июль 16, 2009 15:11:10)

Офлайн

#6 Июль 16, 2009 17:29:52

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

paganmind
Целесообразно использовать там, где аргументом должна быть функция, которой у вас еще нет, но которую легко сделать на базе другой функции.
Хм. Сомневаюсь я что это удачные примеры использование лямбды.
Вот аналоги ваших примеров, которые на мой взгляд более понятно читаются, да и работают быстрее:
[x.split(';') for x in s]
[pow(x,3) for x in s]



Офлайн

#7 Июль 16, 2009 18:37:45

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

хороший пример – это параметр `key` в `sorted`

>>> a = [(1, 2), (2, 9), (3, 5)]

>>> sorted(a)
<<< [(1, 2), (2, 9), (3, 5)]

>>> sorted(a, key=lambda x: x[1])
<<< [(1, 2), (3, 5), (2, 9)]



Офлайн

#8 Июль 17, 2009 09:54:41

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

igor.kaist
нет, иначе, эта функция тут же вызовется…
Непонял, с чего бы ей сразу вызываться??? Передаётся ф-ция, просто забрали обёртку в виде лямбды.



Офлайн

#9 Июль 17, 2009 16:21:10

paganmind
От:
Зарегистрирован: 2008-12-12
Сообщения: 56
Репутация: +  0  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

Ed
Хм. Сомневаюсь я что это удачные примеры использование лямбды.
Возможно примеры неудачные. На простых показать сложно. Смысл примера был в том, чтобы не решить конкретную задачу, а передать функции (map), которая требует в качестве аргумента другую функцию, новую модифицированную функцию.



Офлайн

#10 Июль 17, 2009 18:20:10

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Примеры выгодного практического применения lambda-функций

То есть лямбду удобно применять там, где надо передать небольшую функцию, как объект?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version