Архив метки: Python

Python: Быстрое удаление из deque по индексу

Объект deque в python — это коллекция, представляющая собой нечто общее между стеком и очередью. deque (double-ended queue — двусторонняя очередь) позволяют потокобезопасно добавлять и «отщипывать» элементы только с начала и конца коллекции, зато за константное время O(1). Начиная с python … Читать далее

Рубрика: Алгоритмы, На заметку | Метки: , , | 1 комментарий

Python: Получение класса/функции по строке имени

В Django есть замечательная, по моему мнению, функциональность, позволяющая указывать view для url dispatcher‘а не импортируя ее явно, а в виде строки вроде ‘mysite.views.archive’, где mysite — это модуль application, views — это его подмодуль с view-объектами (функции или CBV … Читать далее

Рубрика: На заметку | Метки: , | Добавить комментарий

Расстояние Левенштейна — определяем «похожесть» строк

Интересный и очень полезный алгоритм «дистанция Левенштейна» (Levenshtein distance), так же известная как редакционное расстояние или дистанция редактирования. Эта «дистанция» — это минимальное количество правок одной строки (под правками подразумеваются три возможные операции: стирание символа, замена символа и вставка символа), чтобы … Читать далее

Рубрика: Алгоритмы | Метки: , , | 18 комментариев

Постим картинки в Twitter (допиливаем Tweepy)

Tweepy — лучшая обертка Twitter API для Python, на мой взгляд (остальные) Базовые операции делаются очень легко и удобно: import tweepy # Чтобы получить консьюмер-ключи: # идем https://dev.twitter.com/apps # и жмем Create a new application auth = tweepy.OAuthHandler(CONSUMER_KEY,CONSUMER_SECRET) # Чтобы … Читать далее

Рубрика: Туториалы | Метки: , , , | 10 комментариев

Python: Пул процессов — параллельные вычисления

Посчитаем сумму простых чисел в диапазоне от 5000000 до 6000000 загрузив все процессорные ядра. Так как GIL в обычном CPython делает паттерн пул потоков совершенно неэффективным, реализуем для наших параллельных вычислений пул из процессов, воспользовавшись стандартным модулем multiprocessing. 

Рубрика: На заметку | Метки: , , , | Добавить комментарий

Python: Memoization или кеш результатов вычислений

Memoize (или мемоизация)- это паттерн оптимизации вычислений. Он очень маленький и простой, но может оказаться очень полезным в некоторых случаях: def memoized(f): memory = {} def wrapper(*args, **kwargs): key = (tuple(args), hash(tuple(sorted(kwargs.items())))) if not key in memory: memory[key] = f(*args, … Читать далее

Рубрика: На заметку | Метки: , , | Добавить комментарий