IT-новости про Python, которые стоит знать

Собрали в одном месте самые важные ссылки
консультируем про IT, Python


Новый материал в ленте
  coverage - 7.6.10

Утилита позволяющая измерить процент покрытия тестами. Скачать можно по ссылке: https://pypi.python.org/pypi/coverage/


Python Дайджест. Выпуск 112

(08.02.2016 - 14.02.2016)

поделиться выпуском 
pythondigest.ru: Выпуск 112

Новости

  PEP 0515 -- символ подчеркивания для чисел

Этот PEP расширяет синтаксис Python - добавляет символ подчеркивания для ввода целочисленных, дробных и комплексных литералов. Это может позволить повысить читаемость длинных чисел.

# grouping decimal numbers by thousands
amount = 10_000_000.0

# grouping hexadecimal addresses by words
addr = 0xDEAD_BEEF

# grouping bits into nibbles in a binary literal
flags = 0b_0011_1111_0100_1110

# making the literal suffix stand out more
imag = 1.247812376e-15_j

Статьи

  Сравниваем цены в книжных интернет магазинах c помощью python, pandas и matplotlib

Сегодня мы попробуем найти самый дешевый и самый дорогой интернет магазин книг.
Сравнивать будем бумажные книги, которые есть в наличии. В разных магазинах очень разное количество книг. Где-то менее 1000, а где-то более 200 000 книг. 

  asyncio — Asynchronous I/O, event loop, and concurrency tools — PyMOTW 3

Модуль предоставляет средства для создания параллельных приложений с использованием сопрограмм. 

  Решения “реальных” задач с помощью SymPy

SymPy - это удивительная библиотека для символьных вычислений в Python. Это как система Mathematica, и ее онлайн версия оболочки вместе. SymPy Gamma похожа на Wolfram Alpha (WA). 

  Polyglot PyCharm for Rich Web Front-ends Part 2

Это вторая часть вебинара об использовании PyCharm для web-frontend разработки

  Полноценный REST API для перфекционистов за 5 минут

Речь пойдёт об инструменте, который позволит вам построить полноценный и простой в использовании REST API за минимальное количество времени. Называется он – Python Eve.

К сожалению в Интернете очень много инструкций на эту тему, но все они вводят в заблуждение. Начинающие разработчики, начитавшись подобных статей, думают, что REST API это GET/POST/PUT/DELETE. Заказчики думают, что это дело пары часов. А когда они встречаются вместе, происходят магия в виде Express.js/Mongoose/Passport и ещё кучи хлама, который течёт и временами блокирует event-loop. Всё это запускается с помощью какого-нибудь supervisor, потому что иногда падает и надо как-то перезапускать. 

  Определяем фигуры с помощью OpenCV

Это вторая часть о поиске объектов. Сегодня мы будем использовать контуры чтобы идентифицировать фигуры в изображение.

shape_detection_results

  Celery: начинаем правильно

Заметка с советами по работе с Celery в production.

Видео

  Туториал: введение в data science на Python

Пробовали попасть в науку о данных или в машинное обучение? Но сталкиваетесь со сложным технологическим стеком или математикой? 

В видео вы найдете пошаговое руководство по настройке ОС, будет расмотрен стек технологий, рассмотрим стандартные наборы данных для обучения.

  Raspberry Pi + MCP3008

В видео вы найдете пример работы с Python библиотекой для MCP3008 АЦП на Raspberry Pi. Рассмотрим структуру библиотеки, научимся работать с SPI

Колонка автора

  Синтаксис Python: enum, перечисления

Программист время от времени сталкивается с необходимостью ограничить множество допустимых значений для некоторого типа данных. Например, день недели это 7 различных значений, а месяцев у нас 12. Для удобного хранения подобных данных придуманы перечисления - enum.

Стандартная реализация enum появилась в Python начиная с версии 3.4 ( PEP 435. До этого ее легко заменяли словарями. Реализация представлена модулем enum. Модуль содержит несколько классы Enum, IntEnum (константы могут иметь только тип int) и декоратор unique, который проверяет ваш набор констант на дубликаты.

  Полезные инструменты: GeoIP - определяем город пользователя по IP

Уже давно фраза "я тебя вычислю по IP" реальна.

Хочется представить очень простой инструмент для определения местоположения по IP - GeoIP. Рассматривать GeoIP стоит как базу данных соответствия интернет и физических адресов. Базы могут отличатся точностью - одна точно определяет страну, а друга может дать точность до улицы.

  Python уроки: Введение в тестирование на Python

Этот урок имеет вводный характер и знакомит с общей информацией о тестировании и простой конструкцией, которая позволяет значительно улучшить Python-код.

Тестирование программного обеспечения (Software Testing) - проверка соответствия между реальным и ожидаемым поведением программы, осуществляемая при конечном наборе тестов, выбранном определенным образом. [IEEE Guide to Software Engineering Body of Knowledge, SWEBOK, 2004]

  Python уроки: тестирование с помощью unittest

unittest - инструмент для тестирования в Python. Это стандартный модуль для написания юнит-тестов на Python. Unittest это порт JUnit с Java. Иными словами, и в коде модуля, и при написании тестов легко прослеживается ООП стиль, что весьма удобно для тестирования процедур и классов.

Документация доступна по следующим ссылкам: python3python2

В данном инструменте много возможностей: проверки (assert*), декораторы, позволяющие пропустить отдельный тест (@skip, @skipIf) или обозначить сломанные тесты (@expectedFailure) и этим не заканчивается список. Использование assert'ов с лихвой покрывает нужды при написании тестов.

Полезная черта unittest - автоматизированное тестирование. Есть и другие:

  • можно собирать тесты в группы
  • собирать результаты выполнения тестов (например, для отчета)
  • ООП стиль позволяет уменьшить дублирование кода при схожих объектах тестирования

  Интересные концепции: REPL (Read-eval-print loop)

REPL (Read-eval-print loop) — простая интерактивная среда программирования.

В такой среде пользователь может вводить выражения, которые среда тут же будет вычислять, а результат вычисления отображать пользователю. Название read-eval-print loop происходит от имён примитивов языка Lisp, которые реализуют подобную функциональность

Зачем нужен REPL? Очевидно что REPL нужен для обучения, проверки каких-то идей/кода, чтобы вспомнить как работает какой-то метод, для замены калькулятора, иными словаи когда цикл "Написал код -> запустил -> посмотрел результат" должен быть минимальным по времени.

Интересные проекты, инструменты, библиотеки

  tryagain - модуль для повторения выполнения кода

Модуль подходит для повторного выполнения кода с каким-то условием. Например, что функция зависнет не более чем на 5 секунд

import tryagain

def unstable():
    ...

# retry calling 'unstable' until it returns without raising an exception
tryagain.call(unstable)

# limit to maximum 5 attempts
tryagain.call(unstable, max_attempts=5)

# only retry after specific exceptions
tryagain.call(unstable, exceptions=[ValueError, TypeError])

  requests-cache-latest - персистентный(постоянный) кэш для библиотеки requests

import requests
import requests_cache

requests_cache.install_cache('demo_cache')

Код:

for i in range(10):
    requests.get('http://httpbin.org/delay/1')

Отработает в разы быстрее

  gmusicapi - неофициальный API для Google Play Music

from gmusicapi import Mobileclient

api = Mobileclient()
api.login('user@gmail.com', 'my-password', Mobileclient.FROM_MAC_ADDRESS)
# => True

library = api.get_all_songs()
sweet_track_ids = [track['id'] for track in library
                   if track['artist'] == 'The Cat Empire']

playlist_id = api.create_playlist('Rad muzak')
api.add_songs_to_playlist(playlist_id, sweet_track_ids)

  pysenteishon - управляем презентацией со смартфона

Проект позволяет просматривать презентацию в браузере, а также управлять им с телефона

  pyriodic - планировщик задач на Python для запуска периодических задач

from pyriodic import DurationJob
from pyriodic import DatetimeJob
from pyriodic import Scheduler

now = datetime.now
s = Scheduler()

start = now()

def func1(arg1=None, arg2=None, arg3=None, arg4=None):
    print('Func1', arg1, arg2, arg3, arg4, now() - start, now())

def func2():
    print('Func2', now() - start, now())

def func3():
    print('Func3', now() - start, now())

s.add_job(DurationJob(func1,
                    when='30m',
                    args=('This', 'is'),
                    kwargs={'arg3': 'the', 'arg4': 'first function'},
                    name='MyJob'))
s.add_job(DurationJob(func2, when='2h'))
s.add_job(DatetimeJob(func3, when='12:00 pm'))

print(s.next_run_times())

  ipytest - Unit тесты в IPython notebooks.

Модуль позволяет упростить написание unit-тестов в IPython 

  pyfastcopy - модуль для ускорения операции shutil.copyfile

Модуль ускоряет работу shutil.copyfile с помощью системного вызова sendfile

  arduinoserial - интерфейс для работы с serial портами на Arduino

import arduinoserial

arduino = arduinoserial.SerialPort('/dev/ttyUSB0', 19200)
print arduino.read_until('\n')
arduino.write('a5050')

  pyqtool - утилита поиска Python кода с помощью jQuery-подобных селекторов

❯ pyq3 'class:extends(IntegerField)' django/forms
django/forms/fields.py:278 class FloatField(IntegerField):
django/forms/fields.py:315 class DecimalField(IntegerField):

Релизы

  virtualenv - 14.0.6

Инструмент создания виртуального рабочего окружения. Изменения описаны по ссылке https://allmychanges.com/p/python/virtualenv/#14.0.6. Скачать можно по ссылке: http://pypi.python.org/pypi/virtualenv/

  cffi - 1.5.2

Интерфейс для вызова C-кода. Изменения описаны по ссылке https://allmychanges.com/p/python/cffi/#1.5.2. Скачать можно по ссылке: http://pypi.python.org/pypi/cffi/