
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
А в питоне нет примитивов

Ivan
16.07.2019
19:53:48

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

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

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
чтоб клиент не ждал респонс

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

Владимир
16.07.2019
20:10:01

Какого Бля
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)
сорри зря ворфаднул, написал то как решили