Добавлено в Python 3.14. Статический метод класса
complex.from_number()предназначен для преобразования числа в комплексное число.
Комплексное число тип complex состоит из двух чисел с плавающей точкой, представляющих соответственно его действительную и мнимую части. Доступ к обеим частям комплексного объекта x обеспечивают атрибуты x. real и x. imag, доступные только для чтения. Мнимый литерал можно задать с помощью числа с плавающей точкой или десятичного дробного числа с фиксированной точностью с добавлением в конец буквы j или J, в результате получим комплексное число с нулевой вещественной частью, которое можно добавить к целому числу или числу с плавающей точкой, чтобы получить комплексное число с действительными и мнимыми частями.
# Варианты записи комплексных чисел >>> 0j, 0.j, 0.3j, .8j, 1j, 2.j, 1.+3j, 1e1+2J, 1.e-3+1j, 1.5e+4+2j, 1.5e+4+78.1e-1J # (0j, 0j, 0.3j, 0.8j, 1j, 2j, (1+3j), (10+2J), (0.001+1j), (15000+2j), (15000+7.81J)) >>> x = 78.1e-1j # мнимая часть >>> x = x + 1.5e+4 # складываем в вещественным числом >>> x # (15000+7.81j) >>> x.real # 15000.0 >>> x.imag # 7.81
Буква j в конце литерала обозначает квадратный корень из -1. Например, комплексное число, равное единице, можно представить как 1+0j или 1.0+0.0j. Python выполнит операцию сложения или вычитания во время компиляции.
Комплексные числа поддерживают не все арифметические операции и операции сравнения.
// - деление без остатка , % - остаток от деления, int(), float(), divmod().x < y, x <= y, x > y и x >= y.Тип complex в языке Python представлен классом complex(), он позволяет:
complex:>>> complex() # 0j >>> complex(1) # (1+0j) >>> complex(1.5) # (1.5+0j) >>> complex(3, 5) # (3+5j) >>> complex(1, 2e-2) # (1+0.02j) # Преобразование в complex тип из строки # обратите внимание на пробелы в аргументах >>> complex(' 1+2j ') # (1+2j) >>> complex(' 0.1+2.0j') # (0.1+2j) >>> complex(' .1+2.j ') # (0.1+2j) >>> complex(' 1e3+2e-3j') # (1000+0.002j)
Тип complex реализует абстрактный базовый класс numbers.Complex. Тип complex также имеет следующие дополнительные методы.
complex.from_number(x):Добавлено в Python 3.14.
Статический метод класса complex.from_number() предназначен для преобразования числа в комплексное число.
Для произвольного объекта x метод complex.from_number(x) делегирует выполнение методу x.__complex__(). Если метод __complex__() не определён, используется метод x.__float__(). Если и __float__() не определён, то используется метод __index__().
Отличие от функции complex():
__complex__(), __float__() или __index__().Когда использовать что?
complex(x) : если нужна гибкость, например, парсинг из строки или из разных источников.complex.from_number(x) : если необходимо явно и безопасно привести объект к числу, игнорируя строки и случайные данные.complex.from_number(x):Простые числа
# Целое число print(complex.from_number(42)) # (42+0j) # Число с плавающей точкой print(complex.from_number(3.14)) # (3.14+0j) # Комплексное число (ничего не изменится) print(complex.from_number(1 + 2j)) # (1+2j)
Объекты с __complex__
class MyComplex: def __complex__(self): return 1 + 2j obj = MyComplex() print(complex.from_number(obj)) # (1+2j)
Объекты без __complex__, но с __float__
class MyFloat: def __float__(self): return 3.5 obj = MyFloat() print(complex.from_number(obj)) # (3.5+0j)
Объекты без __complex__ и __float__, но с __index__
class MyIntLike: def __index__(self): return 100 obj = MyIntLike() print(complex.from_number(obj)) # (100+0j)
Ошибка, если объект не поддерживает ни один из методов
class Unsupported: pass obj = Unsupported() try: complex.from_number(obj) except TypeError as e: print("Ошибка:", e)