Язык программирования Python
Язык программирования Python читать книгу онлайн
Курс посвящен одному из бурно развивающихся и популярных в настоящее время сценарных языков программирования — Python. Язык Python позволяет быстро создавать как прототипы программных систем, так и сами программные системы, помогает в интеграции программного обеспечения для решения производственных задач. Python имеет богатую стандартную библиотеку и большое количество модулей расширения практически для всех нужд отрасли информационных технологий. Благодаря ясному синтаксису изучение языка не составляет большой проблемы. Написанные на нем программы получаются структурированными по форме, и в них легко проследить логику работы. На примере языка Python рассматриваются такие важные понятия как: объектно–ориентированное программирование, функциональное программирование, событийно–управляемые программы (GUI–приложения), форматы представления данных (Unicode, XML и т.п.). Возможность диалогового режима работы интерпретатора Python позволяет существенно сократить время изучения самого языка и перейти к решению задач в соответствующих предметных областях. Python свободно доступен для многих платформ, а написанные на нем программы обычно переносимы между платформами без изменений. Это обстоятельство позволяет применять для изучения языка любую имеющуюся аппаратную платформу.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
atan2(y,x) atan(y/x)
ceil(x) наименьшее целое, большее или равное x
cos(z) косинус z
cosh(x) гиперболический косинус x
e константа e
exp(z) экспонента (то есть, e**z)
fabs(x) абсолютное значение x
floor(x) наибольшее целое, меньшее или равное x
fmod(x,y) остаток от деления x на y
frexp(x) возвращает мантиссу и порядок x как пару (m, i), где m — число с плавающей точкой, а i — целое, такое, что x = m * 2.**i. Если 0, возвращает (0,0), иначе 0.5 <= abs(m) < 1.0
hypot(x,y) sqrt(x*x + y*y)
ldexp(m,i) m * (2**i)
log(z) натуральный логарифм z
log10(z) десятичный логарифм z
modf(x) возвращает пару (y,q) - целую и дробную часть x. Обе части имеют знак исходного числа
pi константа пи
pow(x,y) x**y
sin(z) синус z
sinh(z) гиперболический синус z
sqrt(z) корень квадратный от z
tan(z) тангенс z
tanh(z) гиперболический тангенс z
Модуль random
Этот модуль генерирует псевдослучайные числа для нескольких различных распределений. Наиболее используемые функции:
random() Генерирует псевдослучайное число из полуоткрытого диапазона [0.0, 1.0).
choice(s) Выбирает случайный элемент из последовательности s.
shuffle(s) Размешивает элементы изменчивой последовательности s на месте.
randrange([start,] stop[, step]) Выдает случайное целое число из диапазона range(start, stop, step). Аналогично choice(range(start, stop, step)).
normalvariate(mu, sigma) Выдает число из последовательности нормально распределенных псевдослучайных чисел. Здесь mu — среднее, sigma — среднеквадратическое отклонение (sigma > 0)
Остальные функции и их параметры можно уточнить по документации. Следует отметить, что в модуле есть функция seed(n), которая позволяет установить генератор случайных чисел в некоторое состояние. Например, если возникнет необходимость многократного использования одной и той же последовательности псевдослучайных чисел.
Модуль time
Этот модуль дает функции для получения текущего времени и преобразования форматов времени.
Модуль sets
Модуль реализует тип данных для множеств. Следующий пример показывает, как использовать этот модуль. Следует заметить, что в Python 2.4 и старше тип set стал встроенным, и вместо sets.Set можно использовать set:
Листинг
import sets
A = sets.Set([1, 2, 3])
B = sets.Set([2, 3, 4])
print A | B, A & B, A — B, A ^ B
for i in A:
if i in B:
print i,
В результате будет выведено:
Листинг
Set([1, 2, 3, 4]) Set([2, 3]) Set([1]) Set([1, 4])
2 3
Модули array и struct
Эти модули реализуют низкоуровневый массив и структуру данных. Основное их назначение — разбор двоичных форматов данных.
Модуль itertools
Этот модуль содержит набор функций для работы с итераторами. Итераторы позволяют работать с данными последовательно, как если бы они получались в цикле. Альтернативный подход — использование списков для хранения промежуточных результатов — требует подчас большого количества памяти, тогда как использование итераторов позволяет получать значения на момент, когда они действительно требуются для дальнейших вычислений. Итераторы будут рассмотрены более подробно в лекции по функциональному программированию.
Модуль locale
Модуль locale применяется для работы с культурной средой. В конкретной культурной среде могут использоваться свои правила для написания чисел, валют, времени и даты и т.п. Следующий пример выводит дату сначала в культурной среде «C», а затем на русском языке:
Листинг
import time, locale
locale.setlocale(locale.LC_ALL, None)
print time.strftime("%d %B %Y», time.localtime (time.time()))
locale.setlocale(locale.LC_ALL, «ru_RU.KOI8–R»)
print time.strftime("%d %B %Y», time.localtime (time.time()))
В результате:
Листинг
18 November 2004
18 Ноября 2004
Модуль gettext
При интернационализации программы важно не только предусмотреть возможность использования нескольких культурных сред, но и перевод сообщений и меню программы на соответствующий язык. Модуль gettext позволяет упростить этот процесс достаточно стандартным способом. Основные сообщения программы пишутся на английском языке. А переводы строк, отмеченных в программе специальным образом, даются в виде отдельных файлов, по одному на каждый язык (или культурную среду). Уточнить нюансы использования gettext можно по документации к Python.
Поддержка цикла разработки
Модули этого раздела помогают поддерживать документацию, производить регрессионное тестирование, отлаживать и профилировать программы на Python, а также обслуживают распространение готовых программ, создавая среду для конфигурирования и установки пакетов.
В качестве иллюстрации можно предположить, что создается модуль для вычисления простых чисел по алгоритму «решето Эратосфена». Модуль будет находиться в файле Sieve.py и состоять из одной функции primes(N), которая в результате своей работы дает все простые (не имеющие натуральных делителей кроме себя и единицы) числа от 2 до N:
Листинг
import sets
import math
""«Модуль для вычисления простых чисел от 2 до N """
def primes(N):
«"«Возвращает все простые от 2 до N»""
sieve = sets.Set(range(2, N))
for i in range(2, math.sqrt(N)):
if i in sieve:
sieve -= sets.Set(range(2*i, N, i))
return sieve
Модуль pdb
Модуль pdb предоставляет функции отладчика с интерфейсом — командной строкой. Сессия отладки вышеприведенного модуля могла бы быть такой:
Листинг
>>> import pdb
>>> pdb.runcall(Sieve.primes, 100)
> /home/rnd/workup/intuit–python/examples/Sieve.py(15)primes()
— > sieve = sets.Set(range(2, N))
(Pdb) l
10 import sets
11 import math
12 ""«Модуль для вычисления простых чисел от 2 до N """
13 def primes(N):
14 ""«Возвращает все простые от 2 до N»""
15 -> sieve = sets.Set(range(2, N))
16 for i in range(2, int(math.sqrt(N))):
17 if i in sieve:
18 sieve -= sets.Set(range(2*i, N, i))
19 return sieve
20
(Pdb) n
> /home/rnd/workup/intuit–python/examples/Sieve.py(16)primes()
— > for i in range(2, int(math.sqrt(N))):
(Pdb) n
> /home/rnd/workup/intuit–python/examples/Sieve.py(17)primes()
— > if i in sieve:
(Pdb) n
> /home/rnd/workup/intuit–python/examples/Sieve.py(18)primes()
— > sieve -= sets.Set(range(2*i, N, i))
(Pdb) n
> /home/rnd/workup/intuit–python/examples/Sieve.py(16)primes()
— > for i in range(2, int(math.sqrt(N))):
(Pdb) p sieve
Set([2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39,
41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
81, 83, 85, 87, 89, 91, 93, 95, 97, 99])
(Pdb) n
> /home/rnd/workup/intuit–python/examples/Sieve.py(17)primes()
— > if i in sieve:
(Pdb) n
> /home/rnd/workup/intuit–python/examples/Sieve.py(18)primes()
— > sieve -= sets.Set(range(2*i, N, i))
(Pdb) n
> /home/rnd/workup/intuit–python/examples/Sieve.py(16)primes()
— > for i in range(2, int(math.sqrt(N))):
(Pdb) p sieve
Set([2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47, 49,
53, 55, 59, 61, 65, 67, 71, 73, 77, 79, 83, 85, 89, 91, 95, 97])
Модуль profile
С помощью профайлера разработчики программного обеспечения могут узнать, сколько времени занимает исполнение различных функций и методов.
Продолжая пример с решетом Эратосфена, стоит посмотреть, как тратится процессорное время при вызове функции primes():
Листинг
>>> profile.run(«Sieve.primes(100000)»)