Найти - Пользователи
Полная версия: использование лямбды
Начало » Python для новичков » использование лямбды
1 2
Игнат
здравствуйте

сейчас есть такой код:
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; }();
как сделать подобное в питоне?
guranvir
ну return о моему убрать можно
fata1ex
Прочитайте пару страниц про лямбда-исчисление, сразу станет всё ясно с лямбдами в питоне.
o7412369815963
>>> random.sample('qwertyuiopasdfghjklzxcvbnm',10)
['s', 'y', 'c', 'f', 'j', 'n', 'p', 'm', 'r', 'h']
Игнат
спасибо за наводку на 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) # и так тоже нельзя
sp3
в питоне lambda по определению однострочная функция

остальные ваши вопросы ввели меня в ступор :)
mylamb = lambda x1,x2,x3 : x1 or x2 or x3
print mylamb(None, 100500, 'vv')
fata1ex
лямбда создает функцию. вызвать её в той же строке самостоятельно нельзя, но в контексте какого-нибудь filter можно например так :

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> filter( lambda x: x%2, a )
[1, 3, 5, 7, 9]
bw
вызвать её в той же строке самостоятельно нельзя
>>> (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
Игнат
спасибо!
а анонимных функций, как в JS, в питоне получается нет?
Zubchick
Игнат
спасибо!
а анонимных функций, как в JS, в питоне получается нет?
лямбда это и есть анонимная функция, просто ее специально урезали таким образом до 1ной строчки, чтобы не загромождать код вашей программы. Если есть необходимость использовать многострочную функцию просто объявите ее где-нибудь рядом через def.
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