10.11. Контроль качества

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

10.10. Измерение производительности

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

Например, может быть заманчивым использовать возможность упаковки и распаковки кортежа вместо традиционного подхода к обмену аргументов. Модуль timeit (docs.python.org/3/library/timeit.html#module-timeit) быстро демонстрирует скромное преимущество в производительности:

>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577

10.9. Сжатие данный

Обычные форматы архивирования и сжатия данных напрямую поддерживаются модулями включая:
zlib (docs.python.org/3/library/zlib.html#module-zlib), gzip (docs.python.org/3/library/gzip.html#module-gzip), bz2 (docs.python.org/3/library/bz2.html#module-bz2), lzma (docs.python.org/3/library/lzma.html#module-lzma), zipfile (docs.python.org/3/library/zipfile.html#module-zipfile) и tarfile (docs.python.org/3/library/tarfile.html#module-tarfile).

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37

10.8. Дата и время

Модуль datetime (docs.python.org/3/library/datetime.html#module-datetime) поставляет классы для управления датой и временем различной степени сложности. Пока вычисления даты и времени поддерживаются, в центре внимания реализации - на эффективное извлечение члена для форматирования вывода и манипуляции. Модуль также поддерживает объекты, "осведомленные" о часовом поясе.

>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)

10.7. Доступ в Интернет

Существует целый ряд модулей для доступа в Интернет и обработки интернет-протоколов. Два из простейших - это urllib.request (docs.python.org/3/library/urllib.request.html#module-urllib.request) для извлечения данных из URL-адресов и smtplib (docs.python.org/3/library/smtplib.html#module-smtplib) для отправки почты:

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Decoding the binary data to text.

10.6. Математика

Модуль math (docs.python.org/3/library/math.html#module-math) предоставляет доступ к базовым функциям библиотеки C для математики с плавающей точкой:

>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

Модуль random (docs.python.org/3/library/random.html#module-random) предоставляет инструменты для создания случайного выбора:

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # sampling without replacement

10.5. Строковый шаблон

Модуль re (docs.python.org/3/library/re.html#module-re) предоставляет инструменты регулярных выражений для более глубокой обработки строк. Для комплексного сопоставления и управления регулярные выражения предлагают краткие, оптимизированные решения:

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

10.4. Вывод перенаправленных ошибок и завершение программы

Модуль sys также имеет атрибуты для stdin (стандартный ввод), stdout (стандартный вывод) и stderr (стандартный вывод ошибок). Последний полезен для генерации предупреждений и сообщений об ошибках, чтобы сделать их видимыми, даже когда stdout (стандартный вывод) был перенаправлен:

>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one

Самый очевидный способ завершить сценарий заключается в использовании sys.exit().

10.3. Аргументы командной строки

В обычных скриптах-утилитах часто нужно обрабатывать аргументы командной строки. Эти аргументы хранятся в атрибуте argv модуля sys (docs.python.org/3/library/sys.html#module-sys) в виде списка. Например следующие результаты будут получены от выполнения комнды python demo.py one two three в командной строке:

>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

10.1. Интерфейс операционной системы

Модуль os (docs.python.org/3/library/os.html#module-os) предоставляет множество функций для взаимодействия с операционной системой:

>>> import os
>>> os.getcwd()      # Return the current working directory
'C:\\Python33'
>>> os.chdir('/server/accesslogs')   # Change current working directory
>>> os.system('mkdir today')   # Run the command mkdir in the system shell
0

Syndicate content