Посты с тэгом python3


Приватные методы без нижнего подчеркивания и интерфейсы в Python



Привет, Habr. Недавно угорел по дизайну — модификаторам доступа и интерфейсам, потом перенес это на язык программирования Python. Прошу под кат — делюсь результатами и как это работает. Для заинтересовавшихся в конце статьи есть ссылка на проект на Github.
Читать дальше →


[recovery mode] Что мне не нравится в Python

Привет, Хабр!

Я подумал о том чего мне не хватает в Python, и что мне не нравится.

Дисклеймер: это мое субъективное мнение, оно может не совпадать с Вашим.

Я с удовольствием программирую на Python, но у любой технологии (языка программирования в частности) есть свои недостатки, хотя возможно Вы не согласитесь со мной.
Читать дальше →



[Из песочницы] Доступ к linux серверу с помощью Telegram-бота на Python

Довольно часто происходят ситуации, когда доступ к серверу нужен здесь и сейчас. Однако, не всегда подключение по SSH является наиболее удобным способом, потому что под рукой может не оказаться SSH клиента, адреса сервера или связки «пользователь/пароль». Конечно, есть Webmin, который упрощает администрирование, но он также не даёт моментальный доступ.
Читать дальше →



История типизации на примере одного большого проекта

Всем привет! Сегодня я расскажу вам историю развития типизации на примере одного из проектов в Ostrovok.ru.



Эта история началась задолго до хайпа о typing в python3.5, более того, она началась внутри проекта, написанного еще на python2.7.

2013 год: совсем недавно был релиз python3.3, мигрировать на новую версию смысла не было, так как каких-то конкретных фичей она не добавляла, а боли и страдания при переходе принесла бы очень много.

Я занимался проектом Partners в Ostrovok.ru – этот сервис отвечал за все, что связано с партнерскими интеграциями, бронированиями, статистикой, личным кабинетом. У нас использовались как внутренние API для других микросервисов компании, так и внешнее API для наших партнеров.



Введение в аннотации типов Python. Продолжение


Автор иллюстрации — Magdalena Tomczyk


В первой части статьи я описал основы использования аннотаций типов. Однако несколько важных моментов остались не рассмотрены. Во-первых, дженерики — важный механизм, во-вторых иногда может оказаться полезным узнать информацию об ожидаемых типах в рантайме. Но начать хотелось с более простых вещей

Читать дальше →


[Из песочницы] Ускорить сложные вычисления с минимальной загрузкой RAM

В процессе освоения ML, СNN, NN на Python новичок почти всегда сталкивается с проблемой скорости вычислений, а иногда и нехватки оперативной памяти.

Особенно это заметно с большими базами, которые по размеру больше 50% свободной RAM. Мысли о покупке более достойного железа всего лишь одно из возможных решений.

Иной вариант использовать одну из возможностей в Python — итерации по самой функции.

Простой и наглядный пример. Допустим Вам необходимо возвести в 200 000 степень ряд чисел от 1 до 10 и сложить их сумму. В итоге вы должны получить число длинной 200 тыс знаков. это в 2 раза больше чем google)

Вот простой код такой функции:

from time import time # импорт модуля времени
# простая функция возведения в степень
def power_1(x):
    power_1 = 0 
    start = time()
    power_1 = x**200000
    end = time()
    total_1 = end - start
    return round(total_1,6)
# простые


Как я марс спасал или небольшой квест на питоне

Привет, Мир!

Август 2018



На улице стоит жаркое лето, плавно подходящее к концу, а я сижу в прохладной комнате с ноутбуком и серфлю интернет в поиске интересных вещей. Потеряв надежду найти что-либо стоящее внимания, вдруг, натыкаюсь в одной из довольно популярных околоайтишных групп вконтакте пост со ссылкой на еще один айти ресурс. Квест показался мне интересным, ведь это почти классический текстовый квест в космическом сеттинге, да еще и программировать тут нужно!



Поэтому в этой статье речь пойдет о том, как я играл решал этот квест.

Продолжение под катом!


[Из песочницы] Стиллер на Python с отправкой по почте

Что будем делать?


Здравствуй, читатель сегодня поговорим о том почему не надо открывать непроверенные файлы скачанные с неизвестных источников и создадим такой файл чтобы понять что он может наделать на вашем ПК. Создавать мы будем стиллер который соберет все наши пароли и отправит их нам по почте.

Читать дальше →


История одного эксперимента с Cython и C++ vector

Одним тёплым холодным зимним вечером, хотелось согреться в офисе и проверить теорию одного коллеги, что C++ vector мог бы быстрее справиться с задачей, чем CPython list.
В компании мы разрабатываем продукты на базе Django и случилось так, что нужно было обработать один большой массив словарей. Коллега предположил, что реализация на C++ была бы гораздо быстрее, а меня не покидало чувство, что Гвидо и сообщество наверное немного круче нас в Си и возможно уже решили и обошли все подводные камни, реализовав всё гораздо быстрее.
Для проверки теории, я решил написать небольшой тестовый файл, в котором решил прогнать в цикле вставку 1М словарей одинакового содержания в массив и в vector 100 раз подряд.
Результаты хоть и были ожидаемые, но так же и внезапные.

Что же из этого вышло?


Немного внутренностей словарей в CPython (и PyPy)

Внутреннее устройство словарей в Python не ограничивается одними лишь бакетами и закрытым хешированием. Это удивительный мир разделяемых ключей, кеширования хешей, DKIX_DUMMY и быстрого сравнения, которое можно сделать ещё быстрее (ценой бага с примерной вероятностью в 2^-64).

Если вы не знаете количество элементов в только что созданном словаре, сколько памяти расходуется на каждый элемент, почему теперь (CPython 3.6 и далее) словарь реализован двумя массивами и как это связано с сохранением порядка вставки, или просто не смотрели презентацию Raymond Hettinger «Modern Python Dictionaries A confluence of a dozen great ideas». Тогда добро пожаловать.



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