Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2010 12:02:53

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

использование лямбды

здравствуйте

сейчас есть такой код:

lst = list("qwertyuiopasdfghjklzxcvbnm")
random.shuffle(lst)
str = "".join(lst))[0:10]
хочу сделать код в одну строку. проблема в shuffle, который не возвращает результат своей работы

попробовал написать анонимную функцию
lambda str: random.shuffle(str); return str;
но, во-первых она не работает, потому что тут 2 строки кода, во вторых не очень понимаю как её правильно вызвать
в яваскрипте всё просто:

function(){ some code; return result; }();
как сделать подобное в питоне?



Офлайн

#2 Окт. 10, 2010 12:04:21

guranvir
От:
Зарегистрирован: 2010-03-16
Сообщения: 186
Репутация: +  0  -
Профиль   Отправить e-mail  

использование лямбды

ну return о моему убрать можно



Офлайн

#3 Окт. 10, 2010 12:24:38

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

использование лямбды

Прочитайте пару страниц про лямбда-исчисление, сразу станет всё ясно с лямбдами в питоне.



Офлайн

#4 Окт. 10, 2010 13:31:41

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

использование лямбды

>>> random.sample('qwertyuiopasdfghjklzxcvbnm',10)
['s', 'y', 'c', 'f', 'j', 'n', 'p', 'm', 'r', 'h']

Офлайн

#5 Окт. 10, 2010 20:11:51

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

использование лямбды

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

читаю
http://ru.wikibooks.org/wiki/Учебник_Python_3.1#.D0.9C.D0.BD.D0.BE.D0.B6.D0.B5.D1.81.D1.82.D0.B2.D0.B0
и всё равно непонятно

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

где задается значение параметра, который она получает?

tmp = lambda test: test+2
я так понимаю - это должно прибавлять к заданному числу 2
tmp(2) #4

а как её вызвать в одну строку и как сделать многострочной?

lambda test: test, test+2 # неправильно
lambda test: test+2(2) # и так тоже нельзя



Офлайн

#6 Окт. 10, 2010 21:13:00

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

использование лямбды

в питоне lambda по определению однострочная функция

остальные ваши вопросы ввели меня в ступор :)

mylamb = lambda x1,x2,x3 : x1 or x2 or x3
print mylamb(None, 100500, 'vv')



Отредактировано (Окт. 10, 2010 21:21:55)

Офлайн

#7 Окт. 10, 2010 23:58:53

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

использование лямбды

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

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> filter( lambda x: x%2, a )
[1, 3, 5, 7, 9]



Офлайн

#8 Окт. 11, 2010 06:09:59

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

использование лямбды

вызвать её в той же строке самостоятельно нельзя
>>> (lambda x: x / 2)(10)
5
а как её вызвать в одну строку и как сделать многострочной?
Никак, лямбда это простое выражение это не безымянная функция, которые есть в JS.

lambda test: test, test+2 # неправильно
Здесь лямбда вернёт кортеж из двух элементов, так должно быть понятнее:
>>> lambda test: (test, test+2)
>>> _(10)
(10, 12)
lambda test: test+2(2) # и так тоже нельзя
>>> (lambda test: test+2)(2)
4
..bw



Отредактировано (Окт. 11, 2010 06:17:26)

Офлайн

#9 Окт. 11, 2010 09:50:54

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

использование лямбды

спасибо!
а анонимных функций, как в JS, в питоне получается нет?



Офлайн

#10 Окт. 11, 2010 10:12:02

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

использование лямбды

Игнат
спасибо!
а анонимных функций, как в JS, в питоне получается нет?
лямбда это и есть анонимная функция, просто ее специально урезали таким образом до 1ной строчки, чтобы не загромождать код вашей программы. Если есть необходимость использовать многострочную функцию просто объявите ее где-нибудь рядом через def.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version