@ru_python

Страница 7735 из 9768
Terminator
15.01.2019
08:13:31
@nsniko будет жить. Поприветствуем!

LighteR
15.01.2019
08:16:01
этот кейс работает, да. А вот с иерархией объектов чет нет
Это разные кейсы. По иерархию объектов читай про covariance/contravariance

Владимир
15.01.2019
08:16:57
f(cb: Callable[[object], str]) — хороший пример как это портит лаконичность питонячьего кода

Google
Tishka17
15.01.2019
08:17:14
http://codephoto.ru/i/VlYIe

вот так надо было

Tishka17
15.01.2019
08:18:24
f(cb: Callable[[object], str]) — хороший пример как это портит лаконичность питонячьего кода
почему портит? ты все равно в доке небось что-то такое напишешь. В духе “передавайте сюда функцию или другой вызываемый объект, которые ожидаются любой объект и ниег тне возвращают”

Винни
15.01.2019
08:18:30
пачанята, давайте взломаем эппль на питоне и чистом html?

Tishka17
15.01.2019
08:18:46
LighteR
15.01.2019
08:19:02
окей, полез читать. Мне это объяснять ещё
Вот вроде неплохая статья: https://blog.daftcode.pl/covariance-contravariance-and-invariance-the-ultimate-python-guide-8fabc0c24278

Винни
15.01.2019
08:19:07
LighteR
15.01.2019
08:19:17
ну и доке mypy тоже что-то есть

Владимир
15.01.2019
08:19:23
В смысле чисто визуально?
Да, когда много аннотаций код весь загромождается и выглядит так себе

LighteR
15.01.2019
08:19:45
Да, когда много аннотаций код весь загромождается и выглядит так себе
По мне так норм выглядит. Сразу понятно что функция принимает

Tishka17
15.01.2019
08:19:51
Вот вроде неплохая статья: https://blog.daftcode.pl/covariance-contravariance-and-invariance-the-ultimate-python-guide-8fabc0c24278
понимаешь в чем проблема моего кейса - pycharm и mypy ругаются на разные строки!!!

Google
Tishka17
15.01.2019
08:20:41
видимо придется писать багрепорт в jetbrains или наоборот

а я статью пишу

и все равно такие вопросы будут

Винни
15.01.2019
08:20:58
и заставим все маки гавкать
& xcode-select --install || brew remove portaudio || brew install portaudio || pip3 install pyaudio || say "gav gav"

& xcode-select --install || brew remove portaudio || brew install portaudio || pip3 install pyaudio || say "gav gav"
хз короч, но если установить pyaudio, то можно ввести say и оно тебе будет пиздякать

Tishka17
15.01.2019
08:21:40
давайте винни забаним

Винни
15.01.2019
08:21:57
я же добрый

Tishka17
15.01.2019
08:22:07
какой-то оффтоп опять

Винни
15.01.2019
08:22:20
я про питон говорил

Tishka17
15.01.2019
08:22:29
не вижу

Винни
15.01.2019
08:22:33
так что это отчасти оффтоп

pyaudio

LighteR
15.01.2019
08:22:38
а я статью пишу
вторую часть по type hint'ам?

Tishka17
15.01.2019
08:22:41
даа

Винни
15.01.2019
08:22:50
даа
окей, как хочешь, я молчу

Tishka17
15.01.2019
08:23:43
вторую часть по type hint'ам?
думал щас быстро про callable скажу и перейду к мезханизму дженериков. Но нет

на простом примере сам застрял

ладно, пора работать

Google
Tishka17
15.01.2019
08:25:32
блин, статья это хорошо, но лучше наверно PEP перечитать

о. https://www.python.org/dev/peps/pep-0484/#covariance-and-contravariance

кратенько

LighteR
15.01.2019
08:30:25
еще у mypy есть разъяснения: https://mypy.readthedocs.io/en/latest/generics.html#variance-of-generics

В общем, в твоем, случае mypy правильно ругается, а pycharm - нет

Tishka17
15.01.2019
08:31:17
угуу

LighteR
15.01.2019
08:31:22
Callable - это контравариантный generic по агрументам

Tishka17
15.01.2019
08:31:34
надо осилить и написать репорт

Егор
15.01.2019
08:32:27
Прошка 2015 года
Как дело с анонимностью у маков ?

LighteR
15.01.2019
08:32:58
ну я бы во второй части статьи по covariance/contravariance не писал, слишком сложно, кмк, для неподготовленных читателей. Многие разработчики просто Generic'и осознать могут с трудом

Digital
15.01.2019
08:34:42
Народ, где можно найти архив с парой, тройкой тысяч фото автомобильных номеров?

LighteR
15.01.2019
08:35:19
написал бы только кратко почему mutable generic'и инвариантны

Владимир
15.01.2019
08:39:03
Пиши код без аннотаций и отдельно stub-файлы
Я выбрал вариант умеренной аннотации там, где она действительно улучшает код

Владимир
15.01.2019
08:39:37
Это как?
не аннотировать все подряд, а только там, где есть явная необходимость

Whore Amazing
15.01.2019
08:40:18
Как бы мне универсально получать доступ к элементу любой вложенности в многоуровневом списке? Чтобы иметь возможность брать и list[3], и list[2][8][1][0] в зависимости от глубины. Эвал смотрится очень антипаттерново.

Google
Whore Amazing
15.01.2019
08:41:52
Чтобы при этом не случался IndexError?
Об этом я позабочусь сам, мне бы просто способ получить доступ к элементам.

LighteR
15.01.2019
08:42:15
Whore Amazing
15.01.2019
08:42:54
Ну а почему тогда просто не list[2][8][1][0]?
Очевидно, потому что я не пишу это каждый раз вручную, а значения и количество индайсов генерируются.

LighteR
15.01.2019
08:44:00
Очевидно, потому что я не пишу это каждый раз вручную, а значения и количество индайсов генерируются.
т.е. у тебя есть например indicies = [2,8,1,0] и ты хочешь получить элемент list[2][8][1][0]?

Владимир
15.01.2019
08:44:05
А как понять где необходимо, а где нет? И как это mypy воспринимает?
Нормально воспринимает. Вот, хотя бы пример из пеп def find_first_str(a: List[object]) -> str: index = next(i for i, x in enumerate(a) if isinstance(x, str)) # We only get here if there's at least one string in a return cast(str, a[index]) Я понимаю все благие намерения, но cast(str, a[index]) — это уже грязно.

Michael
15.01.2019
08:44:21
Admin
ERROR: S client not available

Whore Amazing
15.01.2019
08:44:40
Может цикл, который будет доставать подлист из листа и т.д.?
Да ладно бы доставать, мне его изменяь надо...

ᵇʳᵒᵏᵉᵑ
15.01.2019
08:45:16
Как дело с анонимностью у маков ?
Есть Настройки конфедициальности, что не нужно — отключи

Whore Amazing
15.01.2019
08:45:53
def get_rec(list, *path): for i in prath: list=list[i] return i
Мне надо не взять, мне надо изменить элемент.

Tishka17
15.01.2019
08:46:00
get_rec(lst, 2, 3)

ну сделай get и set

Tishka17
15.01.2019
08:46:40
у set можно ещэ параметр на вставку промежуточных

Whore Amazing
15.01.2019
08:46:51
можешь показать, как это?

Tishka17
15.01.2019
08:47:44
хотя про промежутоные перебор

Google
Whore Amazing
15.01.2019
08:48:48
твой гет каждую итерацию цикла обрезает список а мне исходный надо модифицировать

Владимир
15.01.2019
08:49:21
Ну это пример из раздела Cast, не мудрено что там показан пример его использования
Примеры из разделов про overloading не лучше. Да я не спорю, что все это несет луч света, но и мусора привносит немало,

Michael
15.01.2019
08:49:39
твой гет каждую итерацию цикла обрезает список а мне исходный надо модифицировать
Так там же ссылка вроде будет на элемент в итоге, а не его копия?

LighteR
15.01.2019
08:51:02
Примеры из разделов про overloading не лучше. Да я не спорю, что все это несет луч света, но и мусора привносит немало,
Ну это не мусор же а декларация типов для их последующей проверки. Так можно и про unit test'ы сказать, что они лишний мусор

Копия же.
В каком месте создается копия?

Whore Amazing
15.01.2019
08:51:50
В каком месте создается копия?
list = list[i] или у меня лыжи не едут?

Tishka17
15.01.2019
08:51:53
http://codephoto.ru/i/SgWBh

LighteR
15.01.2019
08:52:11
Tishka17
15.01.2019
08:52:30
или вы что делаете?

Whore Amazing
15.01.2019
08:53:04
щас проверю, чото нихуя не понимаю

Tishka17
15.01.2019
08:53:13
я плозо понимаю что ты хотел получить

Michael
15.01.2019
08:53:37
Хм, там от исходного листа 1 элемент останется

Whore Amazing
15.01.2019
08:53:51
вот-вот

Tishka17
15.01.2019
08:53:58
в смысле?

Valar
15.01.2019
08:54:20
В слишком быстром цикле while , get запросы дублируются игнорируя условия. Как обрезать дублирования, подскажите плиз на двух словах.

4 й день мучаюсь

Michael
15.01.2019
08:55:00
в смысле?
Отбой, всё как надо работает

LighteR
15.01.2019
08:55:06
Примеры из разделов про overloading не лучше. Да я не спорю, что все это несет луч света, но и мусора привносит немало,
А cast и overload это workaround для излишне динамического кода, их часто применяют когда уже есть какой-то код, который без рефакторинга довольно сложно аннотировать типами

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