
vozzurg
03.06.2016
17:00:13
layout = (
(butt0, 4, 0, 1),
(butt1, 1, 0, 1),
(butt2, 1, 1, 1),
(butt3, 1, 2, 1),
(butt4, 2, 0, 1),
(butt5, 2, 1, 1),
(butt6, 2, 2, 1),
(butt7, 3, 0, 1),
(butt8, 3, 1, 1),
(butt9, 3, 2, 1),
(buttdot, 4, 1, 1),
(buttdiv, 4, 3, 1),
(buttmulti, 1, 3, 1),
(buttplus, 3, 3, 1),
(buttminus, 2, 3, 1),
(buttequal, 5, 3, 3),
)
for btn, row, column, columnspan in layout:
btn.grid(row=row, column=column, columnspan=columnspan)
хм, выглядит лучше
попробую
спасибо

Марк
03.06.2016
17:00:29
Вот тоже занятная штука. В уме предлагается решить(2.7 как в тройке хз)
(lambda x:x(x))(lambda z: lambda y:z)(1)(2)(3)

Google

Zart
03.06.2016
17:01:37
3 наверное
гм. проверил и таки ква

Марк
03.06.2016
17:02:17
Ну что ты спойлишь
Я вообще зх, как это решать( Я не понимаю, как ездит эта конструкция

Zart
03.06.2016
17:03:03
там проблема в том чтобы определить приоритеты

Марк
03.06.2016
17:04:01
Эта же задачка на js 1.8
(function (x) x(x))(function (z) function (y) z)(1)(2)(3)
Я не понимаю, почему код вообще валидный


Zart
03.06.2016
17:05:10
вполне валидный
обычные кложуры
»> e = '(lambda x:x(x))(lambda z: lambda y:z)(1)(2)(3)'
»> t = ast.parse(e)
»> list(ast.walk(t))
[<_ast.Module object at 0x027726F0>,
<_ast.Expr object at 0x027BF470>,
<_ast.Call object at 0x027BF670>,
<_ast.Call object at 0x027BF450>,
<_ast.Num object at 0x027C6910>,
<_ast.Call object at 0x027BF590>,
<_ast.Num object at 0x027C68F0>,
<_ast.Call object at 0x027BF5D0>,
<_ast.Num object at 0x027C68D0>,
<_ast.Lambda object at 0x027BF690>,
<_ast.Lambda object at 0x027BF5B0>,
<_ast.arguments object at 0x027BF5F0>,
<_ast.Call object at 0x027BF4B0>,
<_ast.arguments object at 0x027BF550>,
<_ast.Lambda object at 0x027C6850>,
<_ast.Name object at 0x027BF6B0>,
<_ast.Name object at 0x027BF530>,
<_ast.Name object at 0x027BF4F0>,
<_ast.Name object at 0x027BF570>,
<_ast.arguments object at 0x027C6870>,
<_ast.Name object at 0x027C68B0>,
<_ast.Param object at 0x02764B70>,
<_ast.Load object at 0x027647D0>,
<_ast.Load object at 0x027647D0>,
<_ast.Param object at 0x02764B70>,
<_ast.Name object at 0x027C6890>,
<_ast.Load object at 0x027647D0>,
<_ast.Param object at 0x02764B70>]
вот так питон разбивает это выражение на токены, под капотом


Марк
03.06.2016
17:08:49
Всё равно нихера не понятно

Zart
03.06.2016
17:09:03
давай по порядку

Google

Zart
03.06.2016
17:09:14
дано (lambda x:x(x))(lambda z: lambda y:z)(1)(2)(3)
по правилам, то что в скобочках вычисляется первым, правильно?
т.е. (lambda x:x(x))
это дает нам анонимную функцию, которая жрёт чтото на входе и после вызова возвращает то что ей скормили
поэтому следующая скобка ( - это вызов этой самой лямбды
и получается что (lambda x:x(x))(lambda z: lambda y:z) принимает на входе вот ту зет-лямбду и её же возвращает
т.е. фактически это noop
и мы получили по факту lambda z: lambda y:z

Марк
03.06.2016
17:11:30
In [10]: a = (lambda x:x(x))
In [11]: a
Out[11]: <function __main__.<lambda>>

Zart
03.06.2016
17:11:36
а теперь мы вызываем эту лямбду с (1)
а нет ,вру...
там же не x:x, а x:x(x)

Марк
03.06.2016
17:12:40
In [12]: (lambda x:x(x))(1)
Сразу ругань

Zart
03.06.2016
17:13:06
a(lambda x:100)
100

Марк
03.06.2016
17:13:47
Как она входящие принимает? Давай с простого, я ее только в книгах видал, а так не юзал

Zart
03.06.2016
17:14:11
тогда (lambda x:x(x))(lambda z: lambda y:z) дает нам довольно веселую вещь
(lambda z:lambda y:z)(lambda z:lambda y:z)
lambda arguments, *posargs, **kwargs:expression
эквивалентна
def f(arguments, *posargs, **kwargs):
return expression
(lambda z:lambda y:z)(lambda z:lambda y:z) дает нам lambda yy:(lambda z:lambda y:z)
теперь вызов этой фигни с (1) вернет нам (lambda z:lambda y:z)

Google

Zart
03.06.2016
17:18:06
вызов с (2) дает нам lambda yyy:2
и финальный вызов с (3) вернет нам 2
довольно извращенно

Марк
03.06.2016
17:23:27
А как мы забираем для правой лямбды аргумент?

Zart
03.06.2016
17:23:45
тут происходит объявление лямбд и тут же вызов их
и они каррят

Марк
03.06.2016
17:24:26
Чего?
(lambda z: lambda y:z)(1)(2)
Out[7]: 1

Zart
03.06.2016
17:25:48
»> (lambda x:1)
<function <lambda> at 0x02755930>
»> (lambda x:1)(0)
1
»> (lambda x:1)(123)
1

Марк
03.06.2016
17:25:54
Тут это валидно

Zart
03.06.2016
17:25:55
вот это ясно как работает?
»> (lambda x:x)(0)
0
»> (lambda x:x)(1)
1
и это думаю тоже

Марк
03.06.2016
17:27:03
Ага, разобрался

Zart
03.06.2016
17:27:39
»> (lambda x:(lambda:x))(0)()
0
»> (lambda x:(lambda:x))(1)()
1
»> (lambda x:(lambda y:x))(0)('y')
0
»> (lambda x:(lambda y:x))(1)('y')
1
избавляемся от некоторых скобок и получаем что игрек там чисто для отвода глаз

Марк
03.06.2016
17:28:41
n [25]: (lambda x,y:y)(10,20)
Out[25]: 20
Значение всегда только одно?

Kolyann
03.06.2016
17:29:08

Google

Zart
03.06.2016
17:29:14
ты можешь возвращать что угодно - туплы, дикты, лямбды 8)

Kolyann
03.06.2016
17:29:15
вернёт тульпу

Alex
03.06.2016
17:29:35
// если кому надо, то здесь xyz по 15 центов namecheap.com

Марк
03.06.2016
17:30:12
Всё. Вьехал

Zart
03.06.2016
17:31:14
когда мы объявляем функцию, которая возвращает другую функцию - у той всё еще остается ссылка на аргументы изначальной функции
поэтому мы можем сделать несколько вызовов такой ерунды и получить разные функции, которые будут помнить что им изначально задали
такая фигня зовется кложурой
к примеру человек выше вон просил упростить ему код в ткинтере
применяем лямбды:
layout = (
(butt0, 4, 0, 1),
(butt1, 1, 0, 1),
(butt2, 1, 1, 1),
(butt3, 1, 2, 1),
(butt4, 2, 0, 1),
(butt5, 2, 1, 1),
(butt6, 2, 2, 1),
(butt7, 3, 0, 1),
(butt8, 3, 1, 1),
(butt9, 3, 2, 1),
(buttdot, 4, 1, 1),
(buttdiv, 4, 3, 1),
(buttmulti, 1, 3, 1),
(buttplus, 3, 3, 1),
(buttminus, 2, 3, 1),
(buttequal, 5, 3, 3),
)
place = lambda (btn, row, column, columnspan):btn.grid(row=row, column=column, columnspan=columnspan)
map(place, layout)
(так делать в реальном коде не надо, если что)

Марк
03.06.2016
17:35:34
Код же проще вставить, чем скрин

Kolyann
03.06.2016
17:36:42
m1 = lambda x: re.match('(.*?[aoeui]){3}',x)
m2 = lambda s: len(re.findall('(.)(?=\\1)',s))
m3 = lambda s: sum(list(map(lambda x:x in s,['ab','cd','pq','xy'])))==0

Марк
03.06.2016
17:38:42
Болчег бузил как-то на идлы, мол неудобно ему, если надо влезсть в код на левом серваке, а там только вим/фар или mc

Kolyann
03.06.2016
17:39:04

Zart
03.06.2016
17:39:10
втф идла?
sum(list(...)) - бессмысленное использование list
у идлы довольно ебанутая эмуляция консоли

Kolyann
03.06.2016
17:40:42

Марк
03.06.2016
17:40:46

Zart
03.06.2016
17:40:51
уже не раз видел новичков, которые пытались под ним работать с тк/вх/куте/пигтк и получали очень странные вещи

Google

Kolyann
03.06.2016
17:41:04
перлоёбство это вот
for i in $(ls *.gz); do echo -n $i | perl -ne 's/.*?(RUS..).*/\1;/; print'; zcat $i | perl -ne '@F = split(/;/); $s1 += $F[4]; $s2 += $F[5]; $s3 += $F[6]; END{print($s1.";".$s2.";".$s3."\n");}'; done > res_1.txt

Zart
03.06.2016
17:42:44
выглядит как подсчет трафика по сжатым логам веб-сервера

Kolyann
03.06.2016
17:43:48
какую-то сумму-хуюмму считал

Марк
03.06.2016
17:43:48
Это как способ ебли с мервыми овечками особо изощренным образом. Но для перла как раз норма

Zart
03.06.2016
17:43:55
при этом выводятся имена файлов с (RUS** в имени
проще было тупо zcat *.gz | awk имхо

Kolyann
03.06.2016
17:44:38
я так и не вкурил авк

Zart
03.06.2016
17:44:46
зря
он охуителен, а синтаксис прост как три копейки

Kolyann
03.06.2016
17:45:20
мне там что-то показалось крайне неочевидным для меня
не помню уже что
(ПЕРЛ-ТО ОЧЕВИДЕН КАНЕШН ДА)

Dmitry
03.06.2016
17:45:38
Ларри ниасилил awk и наговнокодил perl

Zart
03.06.2016
17:45:40
обычно одним авком можно запилить обработку вот такого вида, причем очень наглядно

Марк
03.06.2016
17:45:47
АВК - это как секс под одеялом, а перл - охохо, огого, Браззерс отдыхают

Zart
03.06.2016
17:45:59
ларри взял и испортил авк

Марк
03.06.2016
17:46:32
Ой, ща покажу вам еще изврат. Правда, у меня уже не запускается