LINUX.ORG.RU

* При чём здесь лямбда,
* что это за странный синтаксис, (однако, не знал, спасибо)
* что ты хочешь сделать? Приведи пример с «дано/надо».

E ★★★
()
Последнее исправление: E (всего исправлений: 1)
Ответ на: комментарий от E

При чём здесь лямбда

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

что-то типа:

%for n in lst:
%url, name, *opts = чёнить.с(n)
{{name}} из {{url}}, потомучта {{url}} is name

мне нужна красивая и приятная читаемость, а не n[0] и n[1]

быть должно ровно то же самое, что и в вызове функций. поэтому и lambda. я когда-то придумал вариант с labmda, а сейчас, в полчетвёртого утра, не могу даже вспомнить, что такое lambda. для упрощения восприятия и нужен хорошо усваиваемый вариант, который я буду везде вставлять.

odii
() автор топика

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

odii
() автор топика
Ответ на: комментарий от odii

через функции это очевидно:

def x(url,name,*opts):
    return url,name,opts

url, name, opts = x(1,2,3,4)

print opts

url, name, opts = x(1,2,3,4,5)

print opts

а вот однострочник, который везде пихать буду - не могу сообразить

odii
() автор топика
Ответ на: комментарий от tailgunner

потому что я не могу запомнить принцип работы лямбды. только частные случаи. те, для кого они понятны - превратить функцию выше в лямбду это вопрос на 10 секунд.

odii
() автор топика

Extended tuple unpacking работает только для третьего питона.

А твой пример можно сделать так:

>>> first, second, rest = (lambda first, second, *rest: (first, second, rest))(*(1,2,3,4,5))
>>> first
1
>>> second
2
>>> rest
(3, 4, 5)
>>> 
theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Extended tuple unpacking работает только для третьего питона.

я знаю.

>>> first, second, rest = (lambda first, second, *rest: (first, second, rest))(*(1,2,3,4,5))

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

но за наводку спасибо - попробую это упростить :)

odii
() автор топика
Ответ на: комментарий от theNamelessOne

в чём проблема?

в том, что я даже английский не распознаю, потому что пока переключаю вкладку в браузере - часто забываю, что там написано :)

нужно как можно меньше переключать фокус внимания. a, *b = (1,2,3) можно написать не задумываясь. а когда мне срочно где-то что-то надо изменить, то пока я буду думать, как это сделать в шаблонах, я забуду, что именно хотел сделать :) поэтому и нужно решение, которое автоматически руками отбивается - такой короткий однострочник.

ладно, буду пытать твою лямбду :)

odii
() автор топика
Ответ на: комментарий от odii

только страшноватенько как-то, и всё по три раза три раза повторяется...

Ну а ты чего хотел?

Можно определить функцию:

In [11]: def unpack_first(iter, n):
   ....:   result, rest = [], []
   ....:   idx = 1
   ....:   for item in iter:
   ....:     if idx > n:
   ....:       rest.append(item)
   ....:     else:
   ....:       result.append(item)
   ....:     idx += 1
   ....:   result.append(rest)
   ....:   return result
   ....: 

In [12]: first, second, third, rest = unpack_first([1,2,3,4,5,6], 3)

In [13]: rest
Out[13]: [4, 5, 6]

In [14]: second
Out[14]: 2

In [15]: 
theNamelessOne ★★★★★
()
Ответ на: комментарий от odii

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

Deleted
()
a, b = type('', (object,), {"foo_bar_bazz": lambda self, args: (args[0], args[1:])})().foo_bar_bazz((1, 2, 3))

тред не читал, не стоит благодарить, я скромный

Virtuos86 ★★★★★
()
Ответ на: комментарий от Deleted

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

не, ты просто данные подогнал под удобную тебе форму :)

у тебя есть некая вещь, в которой n полей. и ты, чтобы не рисовать эти уродующие глаз {{n[1]}} или даже {{x[n[1]]}}, превращаешь их одной короткой строкой в важные данные и пучок неважных данных :) он может даже не понадобиться, главная его задача - это чтобы оно распаковывалось.

в функциях всё это давно и очень удобно используется - нарадоваться не могу, в такие проекты, даже если их не видел два месяца, можно в четыре часа ночи из тайги по ssh внести изменения, которые в голову пришли, и дальше пойти спать :) а вот без функций это вроде бы очевидное действие не работает (в python2. в python3 - работает, потому что это очевидное действие :), и соотносится с дао)

впрочем, ни один из представленных вариантов мне не нравится :( будем сами думать, раз чужим опытом воспользоваться не получится.

odii
() автор топика
Ответ на: комментарий от holuiitipun

ну, не совсем так, но эта идея мне уже нравится (если это не вызов функции, а переменная):

atos, portos, aramis = n[:3]
dartaniani = n[3:]
odii
() автор топика
Ответ на: комментарий от aedeph_

У тебя детские фобии относительно функций?

нет, у меня такие условия их правки... функция должна быть где-то, и об этом надо задумываться.

я же взял python, чтобы вообще не задумываться, чтобы «как дышу, так и пишу».

odii
() автор топика
Ответ на: комментарий от aedeph_

а ты всё-таки пойди погуляй

odii
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.