Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2021 January 23

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
я не знаю наверняка - почему быстрее, но если порассуждать немного - словарь - хеш таблица
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
когда мы запрашиваем элемент по ключу - рассчитывается хеш, делится по модулю на размер хеш таблицы, остаток - смещение в массиве
берем элемент по этому смещению - если нет его - исключение кидаем
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
в случае с if x in d.keys() - мы сперва должны пробежаться по всей таблице, выписать ключи из нее в кортеж
d.keys()
а потом по получившемуся массиву из ключей еще раз пробежаться - проверяя на соответствие с x
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
то есть есть лишний проход по таблице и выписывание ключей, что вообще говоря не требуется для того чтобы проверить есть ли ключ в таблице такой
достаточно рассчитать хеш, вычислить смещение и посмотреть - есть там че или нет
источник

А

Айван in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Можно же просто x in d. Без .keys()
источник

🚲U

🚲 Oleh Kopyl UI/UX d... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Айван
Можно же просто x in d. Без .keys()
Кстати да
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Айван
Можно же просто x in d. Без .keys()
ну да - это скорей всего будет примерно то же самое что и с исключением
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
даже быстрее немного вангую, но это уже сами проверяйте
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
исключения - штука удобная, но не бесплатная
в данном случае они не требуются
источник

А

Айван in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
std::slavik
ну да - это скорей всего будет примерно то же самое что и с исключением
Вроде try-except будет стоить времени только в случае исключения, за этот счёт может выиграть. Но в любом случае, не стоит искать универсальный ответ
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Айван
Вроде try-except будет стоить времени только в случае исключения, за этот счёт может выиграть. Но в любом случае, не стоит искать универсальный ответ
да - т.к. при этом разматывается стек
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
если исключение не происходит - то защищенный блок просто выполняется, а то что в catch/except - нет
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
если исключение происходит - создается объект исключения
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
и начинается поиск обработчика этого исключения в более высоком контексте выполнения
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну и когда у нас много вложенных защищенных блоков и где-то в глубине происходит исключение обработчик для которого есть только во внешнем блоке - будут проверяться все обработчики - не являются ли они обработчиками этого исключения
вот это вот дорого очень может быть
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Айван
Вроде try-except будет стоить времени только в случае исключения, за этот счёт может выиграть. Но в любом случае, не стоит искать универсальный ответ
исключение - способ сообщения об ошибке вообще
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
в данном случае - у нас ошибки нет
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
мы проверяем - есть такой ключ или нет - и возвращаем либо True либо False
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
если же завернуть это в защищенный блок - тогда мы в случае с True - возвращаем True
источник

s

std::slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
а в случае с False - вместо того чтобы просто вернуть False - создаем объект исключения и начинаем поиск обработчика его
странная немного затея
источник