4.6.4. Комплексные числа
Комплексные числа создаются автоматически каждый раз, когда в программе создается выражение вида nj , где n записывается в форме целого числа или числа с плавающей точкой Python. Конечно, j здесь соответствует стандартному обозна-чению мнимого числа, равного квадратному корню из –1, например: >>> (3+2j)
(3+2j)
Обратите внимание: Python выводит полученное комплексное число в круглых скобках, чтобы показать, что выводимые данные представляют значение одного объекта:
>>> 3 + 2j - (4+4j)
(-1-2j)
>>> (1+2j) * (3+4j)
(-5+10j)
>>> 1j * 1j
(-1+0j)
Выражение j * j дает ожидаемый ответ –1, но результат остается объектом ком-плексного числа Python. Комплексные числа никогда не преобразуются автома-тически в эквивалентный объект вещественного или целого числа. Тем не менее вы можете легко получить их вещественную и чисто мнимую часть при помощи функций real и imag :
>>> z = (3+5j)
>>> z.real
3.0
>>> z.imag
5.0
Обратите внимание: вещественная и мнимая части комплексного числа всегда воз-вращаются в формате чисел с плавающей точкой.
4.6.5. Расширенные функции комплексных чиселФункции из модуля math не работают с целыми числами; в конце концов, большин-ство пользователей предпочитает, чтобы при извлечении квадратного корня из –1 программа выдавала ошибку, а не ответ!
Вместо этого модуль cmath предоставляет аналогичные функции для работы с ком-плексными числами:
acos, acosh, asin, asinh, atan, atanh, cos, cosh, e, exp, log, log10, pi, sin, sinh, sqrt, tan, tanh
Чтобы наглядно показать в программе, что функции являются специализированны-ми версиями для комплексных чисел, и чтобы избежать конфликтов имен с более привычными эквивалентами, лучше импортировать модуль cmath командой import cmath
а затем явно указывать пакет cmath при использовании функции: >>> import cmath
>>> cmath.sqrt(-1)
1j
О НЕЖЕЛАТЕЛЬНОСТИ IMPORT *
Перед вами хороший пример того, почему лучше свести к минимуму использование формы from import * команды import . Скажем, если использовать команду для импортирования сначала модуля math , а затем модуля cmath , функции cmath заменят одноименные функции math . Кроме того, читателю вашего кода будет сложнее определить источник конкретных используемых функций. Некоторые модули специально проектировались для использования этой формы импортирования.
За подробной информацией об использовании модулей и имен модулей обращайтесь к главе 10. Важно помнить, что при импортировании модуля cmath можно сделать практически все, что делается с другими числами.
ПОПРОБУЙТЕ.САМИ:.РАБОТА.СО.СТРОКАМИ.И.ЧИСЛАМИ В оболочке Python создайте несколько строковых и числовых переменных (целые числа, числа с плавающей точкой и комплексные числа). Поэкспери-ментируйте с различными операциями, в том числе и между типами. Можно ли, например, умножить строку на число? А умножить ее на число с плавающей точкой или комплексное число? Загрузите модуль math и опробуйте некоторые из его функций; затем загрузите модуль cmath и сделайте то же самое. Что про-изойдет, если вы попытаетесь вызвать одну из этих функций для целого числа или числа с плавающей точкой после загрузки модуля cmath ? Как снова полу-чить доступ к функциям модуля math ?
4.7. Значение None
Кроме стандартных типов (таких, как строки и числа), в Python существует спе-циальный базовый тип данных, определяющий один специальный объект данных с именем None . Как подсказывает имя, None используется для представления неопределенных значений. В Python оно неоднократно встречается в разных об-
личиях. Например, процедура в Python представляет собой функцию, которая не возвращает явное значение, а это означает, что по умолчанию она возвращает None . Значение None часто используется в повседневном программировании Python в качестве заместителя; оно показывает, что значение некоторого поля структуры данных будет получено со временем, хотя в настоящее время оно еще не вычислено. Проверка присутствия None выполняется легко, потому что во всей системе Python существует только один экземпляр None (все упоминания None относятся к одному объекту), и значение None эквивалентно только самому себе.
4.8. Получение данных от пользователяФункция input() предназначена для получения данных от пользователя. В ее параметре передается строка запроса, которая должна быть выведена для поль-зователя:
>>> name = input("Name? ")
Name? Jane
>>> print(name)
Jane
>>> age = int(input("Age? "))
Преобразует введенное значение из строки в целое число Age? 28
Читать дальше