Преобразование типов

Последнее обновление: 17.01.2022

В операциях с данными могут применяться значения различных типов. Например, складываются число типа int и число типа float:

a = 2       # число int
b = 2.5     # число float
c = a + b
print(c)    # 4.5

В данном случае никакой ошибки не будет. Однако Python не всегда может автоматически производить операции, в которых участвуют данные разных типов. Рассмотрим, какие в данном случае действуют правила.

Неявные преобразования

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

  • Если один из операндов операции представляет комплексное число (тип complex), то другой операнд также преобразуется к типу complex.

  • Иначе, если один из операндов представляет тип float, то второй операнд также преобразуется к типу float. Собственно так и произошло в примере выше, где значение переменной a было преобразовано в тип float

  • Иначе, оба операнда должны представлять тип int, и в этом случае преобазование не требуется

Явные преобразования

Но в некоторых случаях возникает необходимость вручную выполнить преобразование типов. Например, пусть у нас будет следующий код:

a = "2"
b = 3
c = a + b

Мы ожидаем, что "2" + 3 будет равно 5. Однако этот код сгенерирует исключение, так как первое число на самом деле представляет строку. И мы увидим при выполнении кода что-то наподобие:

Traceback (most recent call last):
  File "/Users/eugene/PycharmProjects/HelloApp/main.py", line 3, in 
    c = a + b
TypeError: can only concatenate str (not "int") to str

Для преобразования типов Python предоставляет ряд встроенных функций:

  • int(): преобразует значение в целое число

  • float(): преобразует значение в число с плавающей точкой

  • str(): преобразует значение в строку

int

Так, в предыдущем примере преобазуем строку в число с помощью функции int():

a = "2"
b = 3
c = int(a) + b
print(c)    # 5

Примеры преобразований с помощью int():

a = int(15)     # a = 15
b = int(3.7)    # b = 3
c = int("4")    # c = 4
e = int(False)    # e = 0
f = int(True)     # f = 1

Однако если значение не может быть преобразовано, то функция int выдаст ошибку ValueError: invalid literal for int() with base 10:

b = int("a1c")    # Ошибка
c = int("4.7")    # Ошибка

float

Аналогичным образом действует функция float(), которая преобразует в число с плавающей точкой.

a = "2.7"
b = 3
c = float(a) + b
print(c) # 5.7

Примеры преобразований с помощью float():

a = float(15)       # a = 15.0
b = float(3.7)      # b = 3.7
c = float("4.7")    # c = 4.7
d = float("5")      # d = 5.0
e = float(False)    # e = 0.0
f = float(True)     # f = 1.0

Но опять же не все значения могут автоматически преобразованы в float. Так, в следующем случае Python сгенерирует ошибку:

d = float("abc")  # Ошибка 

str

Функция str() преобразует значение в строку:

a = str(False)      # a = "False"
b = str(True)       # b = "True"
c = str(5)         # c = "5"
d = str(5.7)       # d = "5.7"

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

age = 22
message = "Age: " + age     # Ошибка
print(message)

Если число складывается с число, то это стандартная операция сложения чисел. Если строка складывается со строкой, то это операция объединения строк. Но каким образом выполнить операцию сложения по отношение к строке и числу, Python не знает. И если мы в данном случае мы хотим выполнить операцию объединения строк, то число можно привести к строке с помощью функции str():

age = 22
message = "Age: " + str(age)   # Age: 22
print(message)
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850