Преобразование типов данных
При работе с данными используется самые различные типы. Но чтобы провести операцию над двумя разными типами, надо преобразовать одно из них в другое.
Неявные преобразования
Неявные преобразования происходят тогда, когда Python может автоматически привести один тип к другому. Например, рассмотрим выражение, где у нас один операнд принадлежит типу int , а второй float :
Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for +: 'int' and 'str'
В данном примере мы пытаемся сложить два операнда тип int и str , но получаем ошибку в итоге. Для правильного результата надо преобразовать «6» с помощью встроенной int() в целое число.
Явные преобразования
Явные преобразования необходимы, когда Python автоматически не приводит один тип к другому. Например:
- str() : преобразует значение в строку;
- int() : преобразует значение в целое число;
- float() : преобразует значение в число с плавающей запятой;
- complex() : преобразует значение в комплексное число;
- bool() : преобразует значение в булево значение;
- list() : преобразует итерируемый объект в список;
- tuple() : преобразует итерируемый объект в кортеж;
- set() , frozenset() : преобразует итерируемый объект в изменяемое/неизменяемое множество;
- bytes() , bytearray() : преобразует значение к бинарному типу/массиву.
Примеры
bool
Для приведения других типов данных к булеву используется функция bool() , работающая по следующим соглашениям:
# пустая строка - False bool("") == False # непустая строка - True bool("qwerty") == True
# нулевое число - False bool(0.0) == False # ненулевое число (включая отрицательные) - True bool(15) == bool(-15) == True
# пустой список/кортеж - False bool([]) == False # непустой список/кортеж (даже если элемент является пустым списком/кортежем) - True bool(["hi"]) == bool([[]]) == True
# всегда True bool(print) == True
Булев тип приводится к следующим типам данных:
str(True) == "True" str(False) == "False"
# True int(True) == 1 float(True) == 1.0 complex(True) == 1 + 0j # False int(False) == 0 float(False) == 0.0 complex(False) == 0j
Преобразование и приведение типов в Python
Процесс преобразования значения одного типа данных (целые числа, строки, числа с плавающей точкой и т. д.) в другой называется преобразованием типа. В Python есть два вида преобразования:
Неявное преобразование типов
При неявном преобразовании типов Python автоматически преобразует один тип данных в другой. Этот процесс не требует участия пользователя.
Давайте рассмотрим пример, в котором Python, чтобы избежать потери данных, производит преобразование типа данных с низким диапазоном (целое число) в тип с более высоким диапазоном (число с плавающей запятой).
# Преобразуем целое число в число с плавающей точкой num_int = 123 num_float = 1.23 num_new = num_int + num_float print("Тип данных в num_int:", type(num_int)) print("Тип данных в num_float:", type(num_float)) print("Значение num_new:", num_new) print("Тип данных в num_new:", type(num_new))
Тип данных в num_int:
Тип данных в num_float:
Значение num_new: 124.23
Тип данных в num_new:
- мы сложили две переменные num_int и num_float , сохранили значение в num_new .
- мы вывели на экран типы данных всех трех объектов соответственно;
- в выводе мы видим, что тип данных num_int — целое число, а тип данных num_float — вещественное число.
- кроме того, мы видим, что num_new имеет тип данных с плавающей запятой, потому что Python всегда преобразует меньший по диапазону тип в больший, чтобы избежать потери данных.
Теперь давайте попробуем сложить строку и целое число и посмотрим, как Python с этим справится.
# Складываем строку и целое число num_int = 123 num_str = "456" print("Тип данных в num_int:", type(num_int)) print("Тип данных в num_str:", type(num_str)) print(num_int + num_str)
Тип данных в num_int:
Тип данных в num_str:
Traceback (most recent call last):
File "python", line 7, in
TypeError: unsupported operand type(s) for +: 'int' and 'str'
- мы сложили две переменные num_int и num_str.
- как видно из вывода, мы получили TypeError — Python не может использовать неявное преобразование в таких случаях.
Однако в Python есть решение для таких ситуаций — это явное приведение.
Явное приведение типов
В явном преобразовании программист сам заменяет текущий тип данных объекта на требуемый. Для этого используются встроенные функции, такие как int () , float () , str () и т. д., чтобы выполнить явное преобразование типов.
Этот тип преобразования также называется приведением типов, поскольку пользователь приводит (изменяет) тип данных объекта.
Синтаксис
Приведение типов можно выполнить, если присвоить выражению значение функции, соответствующее нужному типу данных.
# Складываем строку и целое число с помощью явного преобразования num_int = 123 num_str = "456" print("Тип данных в num_int:", type(num_int)) print("Тип данных в num_str до явного приведения:", type(num_str)) num_str = int(num_str) print("Тип данных в num_str после явного приведения:", type(num_str)) num_sum = num_int + num_str print("Сумма num_int и num_str:", num_sum) print("Тип данных полученной суммы:", type(num_sum))
Тип данных в num_int:
Тип данных в num_str до явного приведения:
Тип данных в num_str после явного приведения:
Сумма num_int и num_str: 579
Тип данных полученной суммы:
- мы сложили переменные num_str и num_int ;
- для выполнения сложения мы преобразовали num_str из строкового типа в целочисленный, используя функцию int () ;
- после преобразования num_str в целочисленное значение Python уже может сложить эти две переменные;
- мы получили значение num_sum , его тип данных — целое число.
Что надо запомнить:
- Преобразование типов — это преобразование объекта из одного типа данных в другой.
- Неявное преобразование типов автоматически выполняется интерпретатором Python.
- Python не допускает потери данных при неявном преобразовании типов.
- Явное преобразование типов также называется приведением типов. Типы данных преобразуются пользователем с помощью встроенных функций.
- В явном приведении типов может произойти потеря данных, поскольку мы принудительно приводим объект к определенному типу.
СodeСhick.io — простой и эффективный способ изучения программирования.
2023 © ООО «Алгоритмы и практика»