Python. Смешивание типов. Преобразование типов в операторах. Правила

Смешивание типов. Преобразование типов в операторах. Правила


Содержание


1. Что означает термин «смешивание типов» в операторах?

При использовании бинарных операторов (таких как +, , *, / и т.д.) возможна ситуация, когда оба операнда (числа) имеют различные типы. Если при выполнении некоторого оператора оба операнда имеют различные типы, то этот случай называется смешиванием типов.

Например

# преобразование и смешивание типов
a = 3

# смешивание целого и вещественного типа, результат - вещественный тип
# в операции умножения * операнды имеют разные типы
b = a * 5.7 # b = 17.1

В примере в операции умножения (*) операнд слева a имеет целый тип, а операнд справа 5.7 имеет вещественный тип.

В Python возможны другие случаи смешивания типов, как показано в следующем примере

# смешивание вещественного и комплексного типа, результат - комплексный тип
b = 17.1
c = b / (2+3j) # c= (2.630769230769231-3.946153846153847j)

# смешивание целого и комплексного типа
d = 5 * (1.2+3.8j) # d= (6+19j)

 

2. Правила преобразования типов в Python

Если в некоторой операции, операнды имеют различные типы (случай смешивания типов), то интерпретатор Python автоматически выполняет следующие действия:

  • сначала типы операндов преобразуются к типу самого сложного операнда;
  • затем над этими операндами выполняется операция в соответствии с правилами этого сложного типа.

Ниже приведены числовые типы в порядке убывания сложности:

  • комплексные числа (наивысшая сложность);
  • вещественные числа;
  • целые числа.

Исходя из этого можно сделать следующие выводы:

  • если в операции принимают участие целое и вещественное число, то целое число будет преобразовано в вещественное и результат будет числом вещественного типа;
  • если в операции принимают участие вещественное и комплексное число, то вещественное число будет преобразовано в комплексное и результат будет комплексного типа. Это же касается и объединения целого и комплексного чисел.

Например, если рассмотреть фрагмент кода

a = 5
b = 3.2 + a

в строке

b = 3.2 + a

возникает ситуация смешивания типов. В этом случае сначала объект a целого типа преобразуется в объект вещественного типа со значением 5.0, затем применяется суммирование (+) для двух объектов вещественного типа, которыми есть число 3.2 и число 5.0. Результат вещественного типа 8.2 записывается в объект b.

 

3. Встроенные функции int(), float() принудительного преобразования типов. Примеры

Интерпретатор Python осуществляет автоматическое приведение типов в выражениях. Такое преобразование есть довольно удобным. Однако, возможна ситуация, когда нужно принудительно конвертировать из одного типа в другой.
Для этого в языке Python реализованы функции, которые выполняют преобразование целого и вещественного типов:

  • int() – отсекает дробную часть вещественного числа;
  • float() – преобразует целое число в вещественное.

Примеры.

# функция int()
a = 8.423
b = int(a) # b = 8 - целое число
b = int(7.2-1.3302) # b = 5 - целое число

# функция float() - преобразует целое число в вещественное
a = 35
b = float(a) # b = 35.0 - вещественное число


 

4. Какие категории операторов (операций) допускается использовать при смешивании и преобразовании типов?

При использовании бинарных операторов (операций) возможна ситуация, когда операнды имеют разные типы. Язык Python допускает такое применение операндов. Допускается смешивание типов в следующих категориях операторов:

  • арифметические (математические) операторы +, , *, /, %, //, **;
  • операторы сравнения (отношения) ==, !=, <, >, >=, <=.

Например.

# арифметические операции
a = 2.8 # вещественный тип
b = 15 # целый тип
c = a - b # c = -12.2, вещественный тип
c = a % b # c = 2.8 - вещественный тип

# операции сравнения
d = a>b # d = False, смешиваются целый и вещественный типы

a = 7+3j # a - комплексный тип
d = a==7+3j # d = True

# смешиваются комплексный и вещественный типы
d = a==15.8 # d = False

 

5. Можно ли в Python суммировать число с строкой?

Нет. Операции вычисления в выражениях касаются только числовых типов: целого, вещественного, комплексного.

Например, попытка суммировать (умножить, разделить, вычесть и т.д.) целое число с строкой вызовет ошибку с соответствующим сообщением

TypeError: can only concatenate str (not "int") to str

 


Связанные темы