Pull to refresh
39
0

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

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

Reading time 4 min
Views 4.7K

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

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

Read more
Total votes 8: ↑6 and ↓2 +4
Comments 15

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

Reading time 4 min
Views 21K

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

- ложь

- наглая ложь

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

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

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

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

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

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

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

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

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

Read more
Total votes 78: ↑78 and ↓0 +78
Comments 26

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

Reading time 3 min
Views 4.5K

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

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

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

Читать далее
Total votes 5: ↑5 and ↓0 +5
Comments 3

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

Reading time 7 min
Views 13K

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

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

Read more
Total votes 11: ↑10 and ↓1 +9
Comments 2

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

Reading time 7 min
Views 11K

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

Read more
Total votes 14: ↑14 and ↓0 +14
Comments 7

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

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


Читать дальше →
Total votes 37: ↑37 and ↓0 +37
Comments 16

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

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

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

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

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

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

То вам стоит ознакомиться с данной статьёй.
Читать дальше →
Total votes 33: ↑32 and ↓1 +31
Comments 6

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

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

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


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

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

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

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

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)
Читать дальше →
Total votes 15: ↑14 and ↓1 +13
Comments 44

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

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

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

SEX = 'Female', 'Male'
sex = SEX[True]  # -> Male
sex = SEX[False] # -> Female
Читать дальше →
Total votes 27: ↑26 and ↓1 +25
Comments 23

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

Reading time 6 min
Views 40K
Я уже несколько лет программирую на python, однако, недавно осознал, что множество полезных приёмов и интересных моментов прошли мимо меня, возможно, я не один такой, поэтому решил перечислить их здесь, надеюсь, данные приёмы пригодятся кому-то в работе или побудят познакомиться с этим языком поближе.
Читать дальше →
Total votes 53: ↑49 and ↓4 +45
Comments 44

Information

Rating
Does not participate
Registered
Activity