Новости

Viewing posts for the category python

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

https://habr.com/ru/post/455114/
  • Python
  • Программирование


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

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

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

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

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

То вам стоит ознакомиться с данной статьёй.

В python нет примитивных типов — все переменные представляют собой объекты и размещаются в динамической памяти. При этом целые числа представлены только одним типом (decimal мы не рассматриваем) — PyLongObject. Реализация и объявления которого лежат в файлах longobject.h, longintrepr.h и longobject.c.

struct _longobject {
    PyObject_VAR_HEAD   //  стандартный заголовок для объектов переменной длины
    digit ob_digit[1];  //  массив чисел
};

В любой объект в CPython входят два поля: ob_refcnt — счётчик ссылок на объект и ob_type — указатель на тип объекта, к объектам, которые могут менять свою длину, добавляется поле ob_size — текущий аллоцированный размер (используемый может быть меньше).

Таким образом целочисленный тип представлен массивом переменной длины из отдельных разрядов (digit), поэтому python из коробки поддерживает длинную арифметику, во второй версии языка был отдельный тип «обычных» целых.«Длинные» целые создавались с помощью литера L или, если результат операций с ними вызывал переполнение, в третьей версии от него было решено отказаться.

    # python2
    num1 = 42
    print num1, type(num1)  # 42 <type 'int'>
    num2 = 42L
    print num2, type(num2)  # 42 <type 'long'>
    num3 = 2 ** 100
    print num3, type(num3)  # 1267650600228229401496703205376 <type 'long'>

Целое значение, хранимое структурой _longobject оказывается равно:

$\sum_{i=0}^{abs(ob\_size)-1}{ob\_digit_i * 2 ^{SHIFT * i}}$

QVD-файлы — что внутри, часть 3

https://habr.com/ru/company/alfastrah/blog/457102/
  • Блог компании АльфаСтрахование (Сервис будущего в настоящем)
  • Python
  • Data Mining
  • Big Data


В первой статье о структуре QVD-файла я описал общую структуру и достаточно подробно остановился на метаданных, во второй — на хранении колонок (символов). В этой статье я опишу формат хранения информации о строках, подытожу, расскажу о планах и достижениях.

Скачиваем аудио вконтакте через клиентский js или расширение файлов .m3u8

https://habr.com/ru/post/457438/
  • Python
  • JavaScript
  • HTML
  • Вконтакте API

Мелкая питонячая радость #4: Radon — качество кода, измеренное в числах

https://habr.com/ru/post/456150/
  • Python


Инженеры очень любят измерения и числа. Поэтому нет ничего удивительного в том, что они пытаются измерять в численном виде такую нетривиальную штуку, как качество кода.

Книга «Вероятностное программирование на Python: байесовский вывод и алгоритмы»

https://habr.com/ru/company/piter/blog/456562/
  • Блог компании Издательский дом «Питер»
  • Python
  • Профессиональная литература

Recent Posts

Archive

2019
2018
2017
2016
2015
2014

Categories

Authors

Feeds

RSS / Atom