Ivan
Я возможно охренел, но коли мы так мило общаемся
Ivan
Как в питоне максимально изящно менять местами позиции в массиве туплов, когда левым верхной становится тот или иной маркер?)
Ivan
Хотя самый интересный вопрос как максиально изысканно проверить на левоверхность
Aragaer
проверить на левонижнесть - сортировкой
Aragaer
переставить - просто переставить a[i], a[j] = a[j], a[i]
Ivan
По двум числам? Я прост реально не шарю - парсил на питоне интернет магазины лет 4 назад
Aragaer
да, по двум
Ivan
Сорри))) В яваскрипте яб срезал угол через один ноль аля тру фолс, а что еще не знаю
Aragaer
>>> sorted([(1,2), (3,4), (1,3), (2,4)]) [(1, 2), (1, 3), (2, 4), (3, 4)]
Aragaer
ну можно и через min/max
Ivan
я просто присвою тупл по индексу, отсортирую и скормлю пиклу
Ivan
damn это элегентно
Vladyslav 🇺🇦🇪🇺
парни, есть ли возможность вызвать новую функцию после возврата return? через декорацию или типа того
Ivan
@aragaer отсалось понять что такое тензор - и буду завсегдатаем чата)))
Aragaer
тензор это многомерная матрица
Vladyslav 🇺🇦🇪🇺
ну ты можешь функцию, в которой return, обернуть в декоратор
да, но в декораторе то мне тоже нужно ее вызвать
Alexandr
тензор это многомерная матрица
что-то сложное и векторное?
Vladyslav 🇺🇦🇪🇺
и в итоге упераюсь в return
Aragaer
да
Aragaer
эм
Ivan
@agareer ты топ для меня сегодня знай это))
Vladyslav 🇺🇦🇪🇺
хотя
Vladyslav 🇺🇦🇪🇺
вроде понял
Aragaer
def my_decorator(func): def inner(args): result = func(args) function_to_call() return result return inner @my_decorator def my_func(args): ....
Ivan
ну в мл ке всякой и двумерный массив чисел с какого-то попугая тензор
Vladimir
парни, есть ли возможность вызвать новую функцию после возврата return? через декорацию или типа того
В питоне есть возможность делать с ними почти всё, что хочешь. Это объекты первого рода.
Aragaer
ну матрица это двумерный тензор. Вектор - одномерный тензор. Скаляр - нульмерный тензор
Vladimir
да, но в декораторе то мне тоже нужно ее вызвать
Да, ты же так и хочешь после ретён вызывать
Vladyslav 🇺🇦🇪🇺
def my_decorator(func): def inner(args): result = func(args) function_to_call() return result return inner @my_decorator def my_func(args): ....
не не, речь не со всем об этом просто воткнуть новую функци в декоратор не то пример - я хочу принять реквест - не делать ничего -> отдать респонс -> пойти обрабатывать реквест
Vladyslav 🇺🇦🇪🇺
чтоб клиент не ждал респонс
Aragaer
не новую
Aragaer
старую функцию завернуть в декоратор, чтобы она поменялась на "когда в старой функции был return, вместо этого еще дополнительно что-то запустить, а потом все-таки return"
Aragaer
а ты хочешь асинхронщину видимо
Vladyslav 🇺🇦🇪🇺
понял, спс
Ivan
Если в кратце, то все круто
Ivan
[marker.observe(lambda e: on_location_changed(ix, e), 'location') for (ix, marker) in enumerate(markers)]
Ivan
def on_location_changed(ix, event): coordinates[ix] = tuple(event.new) with open('coordinates', 'wb') as f: pickle.dump(coordinates, f)
Aragaer
ну и мы уже проверили, что будет много лямбд, но они в замыкание возьмут ix и у всех оно будет равно 1
Aragaer
и надо functools.partial
Ivan
но стоит добавить перед пиклом coordinates = sorted(coordinates)
Ivan
сорри зря ворфаднул, написал то как решили
Ivan
но стоит добавить перед пиклом coordinates = sorted(coordinates)
как имеем UnboundLocalError: local variable 'coordinates' referenced before assignment
Aragaer
потому что до этого ты работал с глобальной
Aragaer
а теперь вдруг решил сделать локальную
Ivan
прям сдвиг парадигмы, сорри если вопросы шляпа пошли)
Nikolay
Подскажите. В пакете requests влияет ли на что -то 'Content-Type'? я про то, что если я указываю какой-то конкретный контетн тайп, то будут ли выполнятся какие-то проверки или может формат сам применится или это просто поле и уже принимающая сторона его интерпретирует
Ivan
принимающая сторона
🍁 Jaŭhien
Content-Type серверу нужен
Aragaer
это сортировка по месту - переменная останется глобальной. А coordinates = sorted(coordinates) это создание нового списка и присвоение его (в по умолчанию локальную переменную)
Ivan
это сортировка по месту - переменная останется глобальной. А coordinates = sorted(coordinates) это создание нового списка и присвоение его (в по умолчанию локальную переменную)
попробывал написать global coordinates, но получил ошибку SyntaxError: name 'coordinates' is used prior to global declaration. Погнал гуглить, но ясности прибавиться не успелось
Ivan
Область видимости, контексты выполнения - до сих пор загадочно в питоне, и на раз два не найтиж тутор
maxlunar
ничего не загадочно
Aragaer
ну надо писать global раньше, чем первый раз используешь в функции
Aragaer
но лучше .sort(), чем sorted же
maxlunar
перенеси глобал в самое начало фцнкции
maxlunar
а лучше - выкинуть глобал
Aragaer
и глобал не понадобится
Ivan
Сорт мутируем, а сортед возвращает новую структуру данных. По жс костылям ФП подход менее костылен
Aragaer
ты в любом случае меняешь глобальное состояние
Ivan
перенеси глобал в самое начало фцнкции
У меня там функцм=ия с трех строк (две в чате третья в уме) - в самое начало ставил
Ivan
У меня тк не микро, а нано сервис планирутся (фронетнд в юпитере для растовления точек на карте), так что сойдкт
maxlunar
выкинь глобал просто
maxlunar
он тебе не нужен
maxlunar
он не нужен в 99.99% случаев
Ivan
так и сделал, но ниче не понял)
Nikolay Markov
global в коде - верная примета плохого дизайна
Andrey
ну и мы уже проверили, что будет много лямбд, но они в замыкание возьмут ix и у всех оно будет равно 1
Если не путаю, то можно передавать меняющийся аргумент kwarg-ом, тогда он захватится правильно: ‘[lambda i=i: i for i in range(5)]’ (Сейчас проверить нет возможности)
Vladyslav 🇺🇦🇪🇺
https://faust.readthedocs.io/en/latest/index.html
Vladyslav 🇺🇦🇪🇺
кто нибудь уже трогал?
Vladyslav 🇺🇦🇪🇺
у меня все никак руки не дойдут
Ivan
выкинь глобал просто
прост вместо глобала замутировал глобальную переменную, что, ТАК-ТО, еще более дичь
Ivan
замутировать можно, а переприсвоить низзя
maxlunar
хуевый дизайн
Ivan
да там дизайна-то