Как стать автором
Обновить
39
0

Инженер-программист

Отправить сообщение

Приключения чисел в python и mypy или the numeric tower

Время на прочтение4 мин
Количество просмотров5K

Если вы когда-нибудь чувствовали, что вы погрязли в совещаниях и обсуждениях, которые всё длятся и длятся, а решения проблемы всё нет, знайте: в mypy есть 5-летний issue, о том что целое число не является числом.

В статье рассмотрим этот и несколько других забавных примеров того, что допустимо и нет использовать в python с точки зрения mypy и самого интерпретатора.

Read more
Всего голосов 7: ↑5 и ↓2+4
Комментарии15

Как врать с помощью статистики

Время на прочтение4 мин
Количество просмотров22K

"Существуют три вида лжи:

- ложь

- наглая ложь

- пропаганда статистика

- источник цитаты в интернете"

Марк Твен (ну или не он)

В данной статье мы рассмотрим, как можно быстро доказать следующие утверждения, смотря на один и тот же источник данных:

- Лошади бегают по часовой стрелке быстрее чем против

- Лошади бегают против часовой стрелки быстрее чем по часовой

- Лошади бегают на более дальние дистанции быстрее (с большей скоростью), чем на короткие

- Лошади бегают на более дальние дистанции медленнее (с меньшей скоростью), чем на короткие

На картинке изображена лошадь на плато (что очень важно для текста статьи)

Read more
Всего голосов 78: ↑78 и ↓0+78
Комментарии26

Zython (python-wrapper для minizinc) после года разработки

Время на прочтение3 мин
Количество просмотров4.7K

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

В выпуске в январе 2021 года zython поддерживал объявление переменных и параметров, массивы, все типы решения (удовлетворение, максимизация, минимизация), множество предопределенных операций и ограничений (и, конечно, CI). Он мог решить ряд моделей, некоторые из которых были указаны в документации.

Но также в zython отсутствовали некоторые функции minizinc: поддержка вещественного типа (float), а так же множеств и типов перечеслений (enum). Я начал с поддержки float.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии3

Ещё одна статья о декораторах в python, или немного о том, как они работают и как они могут поменять синтаксис языка

Время на прочтение7 мин
Количество просмотров14K

Декораторы в python являются одной из самых часто используемых возможностей языка. Множество библиотек и, особенно, веб-фреймворков предоставляют свой функционал в виде декораторов. У неопытного python разработчика уйдёт не так уж много времени, чтобы разобраться, как написать свой декоратор, благо существует огромное количество учебников и примеров, а опытный разработчик уже не раз писал свои декораторы, казалось бы, что ещё можно добавить и написать о них?

Я постараюсь раскрыть информацию о том, как работают стандартные декораторы staticmethod, classmethod, а так же сам интерпретатор python, как писать декораторы, принимающие аргументы без дважды вложенных функций, ну, и наконец, как немного поменять синтаксис python.

Read more
Всего голосов 11: ↑10 и ↓1+9
Комментарии2

Constraint Programming или как решить задачу коммивояжёра, просто описав её

Время на прочтение7 мин
Количество просмотров12K

Пожалуй, наиболее популярной парадигмой программирования является императивное программирование, но это не единственный вид программирования, широки известны функциональное и логическое программирование. Constraint Programming (Программирование в ограничениях/Ограниченное программирование) не так популярно. Но это очень мощный инструмент для решения комбинаторных задач. Вместо реализации алгоритма, который решает задачу, с последующей тратой кучи времени на его отладку, рефакторинг и оптимизацию, программирование с ограничениями позволяет вам просто описать модель в специальном синтаксисе, а особая программа (решатель) найдет решение для вас (или скажет, если их нет). Впечатляет не правда ли? Мне кажется, каждый программист должен знать о такой возможности.

Read more
Всего голосов 14: ↑14 и ↓0+14
Комментарии7

Реализация строкового типа в CPython

Время на прочтение9 мин
Количество просмотров9.4K
Продолжу неспешный разбор реализации базовых типов в CPython, ранее были рассмотрены словари и целые числа. Тем, кто думает, что в их реализации не может быть ничего интересного и хитрого, рекомендуется приобщиться к данным статьям. Те, же, кто уже их прочёл, знают, что CPython хранит в себе множество интересностей и особенностей реализации. Их может быть полезно знать при написании своих скриптов, так и в качестве пособия по архитектурным и алгоритмическим решениям. Не являются исключением здесь и строки.


Читать дальше →
Всего голосов 37: ↑37 и ↓0+37
Комментарии16

Реализация целого типа в CPython

Время на прочтение7 мин
Количество просмотров15K
На Хабре уже были статьи о подробностях реализации менеджера памяти CPython, Pandas, я написал статью про реализацию словаря.

Казалось бы, что можно написать про обычный целочисленный тип? Однако тут не всё так просто и целочисленный тип не такой уж и очевидный.

Если вам интересно, почему x * 2 быстрее x << 1.

И как провернуть следующий трюк:

>>> 42 == 4
True
>>> 42
4
>>> 1 + 41
4

То вам стоит ознакомиться с данной статьёй.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии6

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

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

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


Впрочем, люди знакомые с лекцией, тоже могут найти немного подробностей и свежей информации, и для совсем новичков, не знакомых с бакетами и закрытым хешированием, статья тоже будет интересна.
Всего голосов 24: ↑24 и ↓0+24
Комментарии7

Интересности и полезности python. Часть 3

Время на прочтение4 мин
Количество просмотров35K
В предыдущих частях мы рассмотрели срезы, распаковку\упаковку коллекций и некоторые особенности булевых операций и типов.

В комментариях упоминалась возможность умножения коллекций на скаляр:

a = [0] * 3
s = 'a' * 2
print(a, s)  # -> [0, 0, 0], 'aa'

Более-менее опытный разработчик на языке python знает, что в нём отсутствует механизм копирования при записи

a = [0]
b = a
b[0] = 1
print(a, b)  # -> [1], [1]

Что же тогда выведет следующий код?

b = a * 2
b[0] = 2
print(a, b)
Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии44

Интересности и полезности python. Часть 2

Время на прочтение4 мин
Количество просмотров19K
В предыдущей статье мы рассмотрели несколько интересных моментов языка python, разумеется, одной статьёй они не исчерпываются, поэтому продолжим.

В одном из комментариев рассматривался следующий код:

SEX = 'Female', 'Male'
sex = SEX[True]  # -> Male
sex = SEX[False] # -> Female
Читать дальше →
Всего голосов 27: ↑26 и ↓1+25
Комментарии23

Интересности и полезности python

Время на прочтение6 мин
Количество просмотров41K
Я уже несколько лет программирую на python, однако, недавно осознал, что множество полезных приёмов и интересных моментов прошли мимо меня, возможно, я не один такой, поэтому решил перечислить их здесь, надеюсь, данные приёмы пригодятся кому-то в работе или побудят познакомиться с этим языком поближе.
Читать дальше →
Всего голосов 53: ↑49 и ↓4+45
Комментарии44

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность