Pull to refresh
40
0

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

Send message

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

Reading time4 min
Views5.1K

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

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

Read more

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

Reading time4 min
Views22K

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

- ложь

- наглая ложь

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

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

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

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

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

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

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

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

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

Read more

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

Reading time3 min
Views4.7K

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

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

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

Читать далее

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

Reading time7 min
Views15K

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

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

Read more

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

Reading time7 min
Views12K

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

Read more

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

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


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

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

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

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

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

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

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

То вам стоит ознакомиться с данной статьёй.
Читать дальше →

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

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

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


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

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

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

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

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)
Читать дальше →

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

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

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

SEX = 'Female', 'Male'
sex = SEX[True]  # -> Male
sex = SEX[False] # -> Female
Читать дальше →

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

Reading time6 min
Views41K
Я уже несколько лет программирую на python, однако, недавно осознал, что множество полезных приёмов и интересных моментов прошли мимо меня, возможно, я не один такой, поэтому решил перечислить их здесь, надеюсь, данные приёмы пригодятся кому-то в работе или побудят познакомиться с этим языком поближе.
Читать дальше →

Information

Rating
Does not participate
Registered
Activity