Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs
Мы с вами
начинаем знакомиться с, так называемой, стандартной библиотекой языка Python (The Python
Standard Library). Ее можно рассматривать, как набор пакетов и модулей,
поставляемых совместно с интерпретатором, для расширения базовой
функциональности языка Python. В частности, она содержит такие
полезные и широко используемые модули, как:
- re – обработка
текста регулярными выражениями;
- random
– генерация
псевдослучайных чисел;
- datetime –
работа с датой и временем;
- collections –
набор коллекций для реализации различных структур данных;
- itertools –
формирование различных итераторов для перебора данных коллекций;
и многие другие.
Конечно, в рамках этого курса мы затронем лишь наиболее значимые модули
стандартной библиотеки, которые чаще всего применяются на практике. Изучать ее
сразу всю целиком большого смысла нет, так как в ней содержится немало
специализированных инструментов, которые интересны лишь узким специалистам в
своих областях. Если в будущем вам потребуется, например, криптографическое
шифрование данных, или взаимодействие с сетью, или многопоточное
программирование, то можно будет обратиться к дополнительной литературе по этим
отдельным, глубоким темам. А чтобы в целом представлять возможности стандартной
библиотеки, то с ее содержимым можно ознакомиться на странице официальной
документации:
https://docs.python.org/3/library/index.html
Тип данных complex
Но начать я
решил со встроенных типов данных, о которых мы не говорили в начальном курсе по
языку Python – это:
- complex – для работы с
комплексными числами;
- frozenset – неизменяемое
множество;
и дополнительные
типы, такие как:
- OrderedDict
– упорядоченный
словарь;
- enum
– перечисления;
- namedtuple
– именованные
кортежи;
- defaultdict
– модифицированный
словарь.
Начнем с типа complex. Конечно, он
больше интересен инженерам и математикам, так как появляется при попытке
извлечения квадратного корня из отрицательного числа. Но, тем не менее, это
довольно распространенный тип данных, о котором следует знать.
Я напомню, что
квадратный корень из минус единицы равен, так называемой, мнимой единице:
Ее в математике
обозначают через j или i. В языке Python используется
символ j. В результате
любое комплексное число можно представить в виде суммы действительной и мнимой
частей. Например, так:
Здесь 10 – это
действительная (real) часть, а 5j – мнимая (image) часть.
Соответственно, в Python можно получить эти части через атрибуты real и imag:
print(a.real) # 10.0
print(a.imag) # 5.0
Как вариант,
комплексные числа можно определять с помощью специального встроенного класса complex:
Главное отличие
второго подхода в том, что мы в качестве аргументов типа complex можем
передавать не только числа, но и переменные, например, так:
b_re = -7.4
b_im = 0.1
b = complex(b_re, b_im)
А вот такое
определение приведет к ошибке:
так как
переменная j не определена.
Чтобы все сработало, в качестве мнимой части следует указывать конкретное
числовое значение:
Операции с комплексными числами
Так как
комплексные числа состоят из двух компонент, их не редко изображают в виде
вектора в координатах (real, imag) следующим
образом:
Из этого рисунка
хорошо видно, что из себя представляет длина, то есть, модуль комплексного
числа. Для его определения используется уже знакомая нам функция abs:
Часто при
операциях с комплексными числами требуется получать комплексно-сопряженные
числа. Для этого достаточно вызвать метод conjugate комплексного
числа:
d = b.conjugate() # -7.4 - 0.1j
Особенность
комплексно-сопряженного числа в том, что оно при умножении на исходное
комплексное число дает обычное вещественное число:
u = b * d # мнимая часть равна 0
Соответственно,
с комплексными числами можно выполнять и другие арифметические операции:
a + 7 # 17 + 5j
a - b # 17.4 + 4.9j
a * 2 # 20+10j
a ** 2 # 75 + 100j
b / a # -0.588 + 0.304j
Модуль cmath
Для работы с
комплексными числами вместо модуля math следует
импортировать модуль cmath:
который содержит
множество стандартных математических функций. Например, такие:
|
Функция модуля cmath
|
Описание
|
|
exp()
|
экспонента
|
|
log()
|
натуральный
логарифм
|
|
log10()
|
десятичный
логарифм
|
|
sin()
|
синус
|
|
cos()
|
косинус
|
|
tan()
|
тангенс
|
|
sqrt()
|
корень
квадратный
|
|
phase()
|
фаза
комплексного числа
|
|
polar()
|
выражение
комплексного числа в полярных координатах (фаза, длина)
|
|
rect()
|
выражение
комплексного числа в исходном виде: действительная и мнимая части
|
Существуют и
другие функции в модуле cmath. Применяются они следующим образом:
cmath.sqrt(a) # корень квадратный от комплексного числа a
cmath.phase(a) # фаза (угол) комплексного числа a
d = cmath.polar(a) # представление числа a в полярных координатах
cmath.sin(a) # синус от комплексного числа a
И так для всех
функций модуля cmath.
Пример использования комплексных чисел
Давайте
посмотрим на конкретном примере вычисления корней квадратного уравнения с использованием
комплексных чисел:
from math import sqrt
def solve_quadratic(a, b, c):
D = b ** 2 - 4 * a * c
if D >= 0:
root1 = (-b + sqrt(D)) / (2 * a)
root2 = (-b - sqrt(D)) / (2 * a)
else:
root1 = complex(-b / (2 * a), sqrt(abs(D)) / (2 * a))
root2 = complex(-b / (2 * a), -sqrt(abs(D)) / (2 * a))
return root1, root2
roots = solve_quadratic(4, 7, 8)
print("Корни:", roots)
В общем случае
корни могут получаться комплексными, если дискриминант меньше нуля. В школьной
программе в этом случае писали, что действительных корней нет, но зато есть
комплексные числа. И эта программа позволяет вычислять их. После запуска
программы при решении квадратного уравнения вида:
Получим два
комплексных числа:
Корни:
((-0.875+1.1110243021644486j), (-0.875-1.1110243021644486j))
Как видите, использование
комплексных чисел в Python довольно удобно благодаря простоте синтаксиса и
полной поддержке стандартных математических операций. Это позволяет весьма эффективно
решать различные научные и технические задачи.
Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs