В операциях с данными могут применяться значения различных типов. Например, складываются число типа 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, inc = a + b TypeError: can only concatenate str (not "int") to str
Для преобразования типов Python предоставляет ряд встроенных функций:
int(): преобразует значение в целое число
float(): преобразует значение в число с плавающей точкой
str(): преобразует значение в строку
Так, в предыдущем примере преобазуем строку в число с помощью функции 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(), которая преобразует в число с плавающей точкой.
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() преобразует значение в строку:
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)