Найти в Дзене
Удалёнка

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

В операциях с данными могут применяться значения различных типов. Например, складываются число типа int и число типа float: a = 2 # число int b = 2.5 # число float c = a + b print(c)    # 4.5 В данном случае никакой ошибки не будет. Однако Python не всегда может автоматически производить операции, в которых участвуют данные разных типов. Рассмотрим, какие в данном случае действуют правила. Неявные преобразования Оба числа в арифметических операциях должны представлять один и тот же тип. Если же два операнда операции представляют разные типы данных, то Python пытается автоматически выполнить преобразования к одному из типов в соответствии со следующми правилами: Явные преобразования Но в некоторых случаях возникает необходимость вручную выполнить преобразование типов. Например, пусть у нас будет следующий код: a = "2" b = 3 c = a + b Мы ожидаем, что "2" + 3 будет равно 5. Однако этот код сгенерирует исключение, так как первое число на самом деле представляет строку. И мы увидим при выпо
Оглавление

В операциях с данными могут применяться значения различных типов. Например, складываются число типа 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)