@ru_python

Страница 9619 из 9768
Shieldy
16.07.2019
19:33:16
Добро пожаловать, @ifrolkin! Не забудь ознакомиться с правилами чата. https://t.me/ru_python/802295

Ivan
16.07.2019
19:33:36
Пасантре, я джаваскриптер и ничего не понимаю

Julian =)
16.07.2019
19:34:16
Попробуй сложить число и строку и все поймешь

Ivan
16.07.2019
19:34:25
В общем - хочу иметь индекс элемента а колбэке, ан нет какая-то хрень

Google
Андрей
16.07.2019
19:34:26
Ivan
16.07.2019
19:34:39
[marker.observe(functools.partial(on_location_changed, ix), 'location') for (ix, marker) in enumerate(markers)]

Хочу чтоб в лямбде не один было всегда, а еще ноль иногда

Julian =)
16.07.2019
19:35:20
import random

Ivan
16.07.2019
19:36:16
import random
? ну рили - ожидаю, что в двух случаях в колбек разый индекс передастся, а хренушки

у меня два маркера прост

Aragaer
16.07.2019
19:36:37
мне что-то подсказывает, что там одна единственная лямбда

Ivan
16.07.2019
19:37:02
как одна? Онаж создается дважды, пока итерируется

Aragaer
16.07.2019
19:37:19
неа

я попробовал

одна единственная лямбда, с последним индексом

Ivan
16.07.2019
19:37:43
В джаваскрипте по крайней мере былоб так. Подскажите плз несведующему как решить задачу

Aragaer
16.07.2019
19:37:57
functools.partial

Google
Aragaer
16.07.2019
19:39:03
>>> def f(i, x): ... print(i, x) ... >>> s = [functools.partial(f, i) for i in range(3)] >>> s[0](3) 0 3 >>> s[1](3) 1 3

тут действительно создаются разные

то есть в твоем случае marker.observe(functools.partial(on_location_changed, ix), 'location')

Ivan
16.07.2019
19:41:09
top top top заработало, оч мощный подгон спасибо

Правда как оно в питоне работает по умолчанию пока не понял, но уже ближе)

Aragaer
16.07.2019
19:42:31
ну functools.partial возвращает "функцию", в которую осталось передать то, что не было привязано сразу

Ivan
16.07.2019
19:43:59
аля каррирование слева. Буду курить functools для комфортного кодинга с устоявшимися в голове абстракциями)

Daniil
16.07.2019
19:44:00
Иногда на собесах подобное спрашиваю

[marker.observe(lambda e: on_location_changed(ix, e), 'location') for (ix, marker) in enumerate(markers)]

Ivan
16.07.2019
19:44:08
спасибо еще раз

Tishka17
16.07.2019
19:51:07
мне что-то подсказывает, что там одна единственная лямбда
Я думаю там много лямбд, но все захватили одну переменную

Aragaer
16.07.2019
19:51:17
последнюю?

хотя да, много

Tishka17
16.07.2019
19:51:46
Ну типа ix - переменная, они захватили её, а не её значение

Aragaer
16.07.2019
19:52:25
>>> [lambda x: print(i, x) for i in range(3)] [<function <listcomp>.<lambda> at 0x7f4894453c80>, <function <listcomp>.<lambda> at 0x7f4894453d08>, <function <listcomp>.<lambda> at 0x7f4894453d90>]

угу

а поскольку после этого она перестала существовать, то получилось много замыканий

а в partial привязывается именно значение

Ivan
16.07.2019
19:53:34
В джаваскрипте вот примитивные типы передаются не по ссылке, а по значнию

Tishka17
16.07.2019
19:53:34
Да

Google
Tishka17
16.07.2019
19:53:47
А в питоне нет примитивов

Aragaer
16.07.2019
19:53:48
ну так а тут ничего не передается

ты создал лямбду, но ты не передавал в нее ix

а привязал его

Tishka17
16.07.2019
19:54:16
В джаваскрипте вот примитивные типы передаются не по ссылке, а по значнию
Да и как бы странно что алгоритм замыкания работает по разному в зависимости от типа переменной

Ivan
16.07.2019
19:54:21
ну в области видимости можно творить дичь и она пройдет

Tishka17
16.07.2019
19:54:34
В жс так же будет, если в цикле создавать функции

Они все захватят переменную

Ivan
16.07.2019
19:55:03
В зависимости от того, что использовать let или var)

Если let - то в области видимости будет то, что там написал

Tishka17
16.07.2019
19:56:01
Последний раз когда я писал на жс, там не было лет

И в питоне нет

Ivan
16.07.2019
19:56:17
Счастливый человек))

Я возможно охренел, но коли мы так мило общаемся

Как в питоне максимально изящно менять местами позиции в массиве туплов, когда левым верхной становится тот или иной маркер?)

Хотя самый интересный вопрос как максиально изысканно проверить на левоверхность

Aragaer
16.07.2019
19:59:21
проверить на левонижнесть - сортировкой

переставить - просто переставить a[i], a[j] = a[j], a[i]

Ivan
16.07.2019
20:00:03
По двум числам? Я прост реально не шарю - парсил на питоне интернет магазины лет 4 назад

Google
Aragaer
16.07.2019
20:00:53
да, по двум

Ivan
16.07.2019
20:00:54
Сорри))) В яваскрипте яб срезал угол через один ноль аля тру фолс, а что еще не знаю

Aragaer
16.07.2019
20:01:15
>>> sorted([(1,2), (3,4), (1,3), (2,4)]) [(1, 2), (1, 3), (2, 4), (3, 4)]

ну можно и через min/max

Ivan
16.07.2019
20:02:35
я просто присвою тупл по индексу, отсортирую и скормлю пиклу

damn это элегентно

Владимир
16.07.2019
20:03:14
Какого Бля
16.07.2019
20:03:32
парни, есть ли возможность вызвать новую функцию после возврата return? через декорацию или типа того

Ivan
16.07.2019
20:03:45
@aragaer отсалось понять что такое тензор - и буду завсегдатаем чата)))

Aragaer
16.07.2019
20:03:55
тензор это многомерная матрица

Какого Бля
16.07.2019
20:04:37
ну ты можешь функцию, в которой return, обернуть в декоратор
да, но в декораторе то мне тоже нужно ее вызвать

Alexandr
16.07.2019
20:04:46
тензор это многомерная матрица
что-то сложное и векторное?

Какого Бля
16.07.2019
20:04:48
и в итоге упераюсь в return

Aragaer
16.07.2019
20:04:50
да

эм

Ivan
16.07.2019
20:05:23
@agareer ты топ для меня сегодня знай это))

Какого Бля
16.07.2019
20:05:33
хотя

вроде понял

Aragaer
16.07.2019
20:05:46
def my_decorator(func): def inner(args): result = func(args) function_to_call() return result return inner @my_decorator def my_func(args): ....

Google
Ivan
16.07.2019
20:05:50
ну в мл ке всякой и двумерный массив чисел с какого-то попугая тензор

Владимир
16.07.2019
20:05:53
парни, есть ли возможность вызвать новую функцию после возврата return? через декорацию или типа того
В питоне есть возможность делать с ними почти всё, что хочешь. Это объекты первого рода.

Ivan
16.07.2019
20:06:29
Aragaer
16.07.2019
20:06:46
ну матрица это двумерный тензор. Вектор - одномерный тензор. Скаляр - нульмерный тензор

Владимир
16.07.2019
20:06:51
да, но в декораторе то мне тоже нужно ее вызвать
Да, ты же так и хочешь после ретён вызывать

Какого Бля
16.07.2019
20:08:05
def my_decorator(func): def inner(args): result = func(args) function_to_call() return result return inner @my_decorator def my_func(args): ....
не не, речь не со всем об этом просто воткнуть новую функци в декоратор не то пример - я хочу принять реквест - не делать ничего -> отдать респонс -> пойти обрабатывать реквест

чтоб клиент не ждал респонс

Aragaer
16.07.2019
20:08:50
не новую

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

а ты хочешь асинхронщину видимо

Какого Бля
16.07.2019
20:10:16
понял, спс

Ivan
16.07.2019
20:14:42
Если в кратце, то все круто

[marker.observe(lambda e: on_location_changed(ix, e), 'location') for (ix, marker) in enumerate(markers)]

def on_location_changed(ix, event): coordinates[ix] = tuple(event.new) with open('coordinates', 'wb') as f: pickle.dump(coordinates, f)

Aragaer
16.07.2019
20:15:53
ну и мы уже проверили, что будет много лямбд, но они в замыкание возьмут ix и у всех оно будет равно 1

и надо functools.partial

Ivan
16.07.2019
20:16:01
но стоит добавить перед пиклом coordinates = sorted(coordinates)

сорри зря ворфаднул, написал то как решили

но стоит добавить перед пиклом coordinates = sorted(coordinates)
как имеем UnboundLocalError: local variable 'coordinates' referenced before assignment

Страница 9619 из 9768