@ru_python

Страница 8638 из 9768
Aram
06.04.2019
07:32:29
Нашёл такую фразу "любой пользовательский тип является хэшируемым по определению, потому что его хэш-значение равно id() и никакие два объекта этого типа не равны". Почему? Если я определю класс с атрибутом значение которого установлю равным изменяемому объекту, например, пустому листу и потом будут добавлять элементы в этот лист, разве это не делает наличие среди атрибутов объекта изменяемого объекта сам объект не хэшируемым? Ведь сам объект при этом тоже изменится, а следовательно должен измениться и хэш?

Aram
06.04.2019
07:42:36
Хм, не знаю, если например посмотреть id созданного листа потом добавить элемент в лист и принтануть id листа ещё раз id совпадают, хотя лист не хэшируемый. То есть адрес листа тоже не изменился как я понимаю

Google
Aram
06.04.2019
07:43:53
И при этом хэшируемость по определению предполает что хэш объекта должен оставаться не изменяемым на протяжении жизни объекта

Aram
06.04.2019
07:49:36
Хз, не знаю что здесь имеется в виду, это переведенная фраза из глоссария документации

Макс
06.04.2019
07:52:33
Хз, не знаю что здесь имеется в виду, это переведенная фраза из глоссария документации
попробую так. у тебя есть пользовательский объект с разными полями. как легче всего найти уникальное значение для этого объекта? взять его адресс. Адресс у объекта будет уникален и объект будет равен только сам себе

Monch
06.04.2019
07:54:50
Здравствуйте. Проблема в следующем: Нужно сделать скриншот элемента в headless браузере (chrome) Есть следующий простенький код, который работает: https://pastebin.com/pJd5fMcq Но если раскомментировать строчку с headless, он перестает работать.

Aram
06.04.2019
08:01:06
попробую так. у тебя есть пользовательский объект с разными полями. как легче всего найти уникальное значение для этого объекта? взять его адресс. Адресс у объекта будет уникален и объект будет равен только сам себе
"a = [1, 2] print(id(a)) a.append(10) print(id(a)) выдаёт одинаковые адреса, но объект не хэшируемый, т.е. один и тот же адрес не предполагает хэшируемость, Для листа будет тот же адрес, после его изменения, но он не хэшируемый

Google
?? Eugene
06.04.2019
08:02:41
При создании объекта ему назначается какой-то айди, который впоследствии не изменяется

Даже если сам объект мутируется

Макс
06.04.2019
08:03:35
хеш не говорит, что объект неизменяем. хеш говорит, что объект должен быть уникален

Макс
06.04.2019
08:06:45
"a = [1, 2] print(id(a)) a.append(10) print(id(a)) выдаёт одинаковые адреса, но объект не хэшируемый, т.е. один и тот же адрес не предполагает хэшируемость, Для листа будет тот же адрес, после его изменения, но он не хэшируемый
попробую так. Есть человек. у человека есть Фамилия и Имя. Фамилия и Имя не гарантирует уникальность человека (у нас без проблем может бы 2 Васи Пупкиных)

при этом если Человек сменит Имя/Фамилию, это все-равно останется прежний человек

Andrew
06.04.2019
08:26:18
Ребята подскажите ловлю ValueError: list.remove(x): x not in list while len(spisok) > 0: print('Длина списка:', len(spisok)) with Pool(25) as p: p.map(download_html, spisok) def download_html(url): spisok.remove(url) print('Скачал и удалил', url) в чем проблема?

Артем
06.04.2019
08:27:03
Народ подскажите а у jinja2 рендеринг файла асинхронный? Я чет не могу понять из доков (( Уже и в код залез а там блокирующий open()

Макс
06.04.2019
08:27:17
url нев в списке)

Andrew
06.04.2019
08:27:54
url нев в списке)
а как его может не быть в списке если он был передан в функцию

Alex
06.04.2019
08:28:45
Артем
06.04.2019
08:29:16
синхронный
Вот блин ((( а тогда какой профит использования в асинхронных фреймворках?

Aram
06.04.2019
08:29:42
хеш не говорит, что объект неизменяем. хеш говорит, что объект должен быть уникален
Почему лист тогда не хэшируемый, он ведь тоже может быть уникальный?

Alex
06.04.2019
08:29:58
Вот блин ((( а тогда какой профит использования в асинхронных фреймворках?
а в чем собственно проблема? рендеринг шаблона в основном CPU bound за исключением его чтения из файла и записи в кеш.

Однако файловый IO не может быть асинхронным (на самом деле может).

Макс
06.04.2019
08:31:14
Почему лист тогда не хэшируемый, он ведь тоже может быть уникальный?
ибо его уникальность напрямую зависит от содержимого, а содержимое можно менять.

?? Eugene
06.04.2019
08:31:26
Вот есть асинхронная жинжа для аиохттп https://github.com/aio-libs/aiohttp-jinja2

Alex
06.04.2019
08:31:38
Поэтому если рендеринг шаблона у тебя становится узким местом - выноси ее в отдельный поток.

Google
?? Eugene
06.04.2019
08:31:39
Не смотрел что именно там асинхронное

Артем
06.04.2019
08:31:52
Alex
06.04.2019
08:32:00
Не смотрел что именно там асинхронное
Ну скорее всего как и aiofiles, просто враппер над отдельным потоком.

Артем
06.04.2019
08:33:14
Вот есть асинхронная жинжа для аиохттп https://github.com/aio-libs/aiohttp-jinja2
видел - но не пробовал к санек прикручивать и возможно ли это ))) А тот что предлагает сам санек юзать он синхронный

Alex
06.04.2019
08:33:41
Почему лист тогда не хэшируемый, он ведь тоже может быть уникальный?
не уникальный, а неизменяемый. чтобы гарантировать что хеш объекта не меняется в течение времени его жизни, он должен быть неизменяемым.

?? Eugene
06.04.2019
08:34:02
Ну скорее всего как и aiofiles, просто враппер над отдельным потоком.
В общем, глянул, там один файл, асинхронщины нет, просто интерфейс к аиохттп

Ну оно и понятно

Alex
06.04.2019
08:34:42
дык, а что ты ожидал. файлового асинхронного IO в общем случае не бывает.

(под линуксами, если не брать во внимание AIO)

который поддерживается в очень ограниченном количестве случаев.

смущает
если ты запускаешь Pool.map(), нафига вообще удалять из списка урлы?

Aram
06.04.2019
08:37:44
не уникальный, а неизменяемый. чтобы гарантировать что хеш объекта не меняется в течение времени его жизни, он должен быть неизменяемым.
А почему хэш должен меняться, если объект остаётся в памяти на своём месте просто скажем в список добавили новый элемент?

Alex
06.04.2019
08:38:52
А почему хэш должен меняться, если объект остаётся в памяти на своём месте просто скажем в список добавили новый элемент?
А представь себе что у тебя твой список является ключем у дикта… ты добавил элемент, хеш изменился.

Alex
06.04.2019
08:39:06
Aram
06.04.2019
08:39:56
Скажите, вы понимаете, зачем хеши вообще нужны?)
Чтобы было уникальное соответствие между ключом и значением

Alex
06.04.2019
08:40:05
при чем тут адрес объекта в памяти к его хешу?

Чтобы было уникальное соответствие между ключом и значением
нет, хеши не могут быть уникальными по определению.

Google
Alex
06.04.2019
08:41:41
предлагаю тебе забуриться в любую книжку по Алгоритмам и Структурам данных и наконец-то изучить как работает хеш-таблица и зачем там нужны хеши.

Andrey
06.04.2019
08:45:00
Чтобы было уникальное соответствие между ключом и значением
Хеш нужен, чтобы можно было по _значению_ объекта "примерно" понять, есть он в хеш-таблице (dict, set) или нет. Примерно — см. коллизии. Проблема с изменяемыми (mutable) типами вроде списка в том, что после изменения этот список будет лежать не в той ячейке хеш-таблицы.

Для кастомных типов по умолчанию есть максимально тупая реализация хешей — хеш это условно адрес в памяти, сравнение всегда возвращает False.

Andrey
06.04.2019
08:48:29
> сравнение всегда возвращает False. шта?
А, неправильно. Сравнение сравнивает адреса, т.е. сам с собой объект будет сравниваться на True.

Andrey
06.04.2019
08:49:24
нет
Я про вот такое: >>> class User: ... def __init__(self, name): ... self.name = name ... >>> User('abc') == User('abc') False

Alex
06.04.2019
08:49:53
А, неправильно. Сравнение сравнивает адреса, т.е. сам с собой объект будет сравниваться на True.
нет, если у кастомного типа не реализован оператор сравнения, то сравниваются id() объектов.

Andrey
06.04.2019
08:50:24
Alex
06.04.2019
08:50:26
для CPython id() возвращает адрес объекта в памяти, но это особенность реализации.

Tishka17
06.04.2019
08:51:07
Вы в двух чатах одновременно это обсуждаете?

Aram
06.04.2019
09:09:35
Хеш это просто int
Все равно не понял почему кастомный объект хэшируемый(( ведь здесь прямая аналогия с листом если среди атрибутов этого объекта есть лист, который нехэшируемый, то и объект должен быть нехэшируемый?

Denis
06.04.2019
09:10:07
Приветствую. У gunicorn можно выбрать асинхронный тип воркеров -k gevent, но я наблюдаю следующую картину: при 1 воркере если отправить один запрос, который выполняется довольно долнго и следом отправить второй (лёгкий), то второй ждёт пока первый не отработает. Куда смотреть или я неправильно понимаю назначение gevent воркеров?

Tishka17
06.04.2019
09:12:25
Все равно не понял почему кастомный объект хэшируемый(( ведь здесь прямая аналогия с листом если среди атрибутов этого объекта есть лист, который нехэшируемый, то и объект должен быть нехэшируемый?
Потому что решили по дефолту не запрещать для произвольных объектов хэш ибо хз что там. Например, если если список в одном из полей, не факт что он должен участвовать в хэше. А вот просто со списком все однозначно

Питирима
06.04.2019
09:13:39
В нейронках шарит кто?

Google
Aram
06.04.2019
09:18:09
Потому что решили по дефолту не запрещать для произвольных объектов хэш ибо хз что там. Например, если если список в одном из полей, не факт что он должен участвовать в хэше. А вот просто со списком все однозначно
То есть получается, что если бы допустили что листы были бы хэшируемы постоянно возникали бы коллизии? А с объектами не все однозначно, потому что даже если в двух объектах одного класса один и тот же лист в качестве одного и того же атрибута, остальные атрибуты этих экземпляров могут быть разными и соответсвенно это будут разные(уникальные) объекты, значит коллизий возникать не будет, так?

Tishka17
06.04.2019
09:18:29
Да не в коллизиях дело

А в том, что обьект ты положил с одним хэшем в словарь, а потом у него другой оказался и хз как будет словарь работать

В списке все элементы равноправны и по логике все должны участвовать в хэше. А в объекте бабушка надвое сказала

punkgendos
06.04.2019
09:42:53
сорян за оффтоп, YouTube API знает кто? как узнать место ролика в тренде?

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