Преобразование и приведение типов в 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 © ООО «Алгоритмы и практика»
Python: Явное преобразование типов
В программировании регулярно встречаются задачи, когда один тип данных нужно преобразовать в другой — например, при работе с формами на сайтах. Данные формы всегда приходят в текстовом виде, даже если значение — число. Вот как его можно преобразовать:
# str станет int number = int('345') print(number) # => 345
int() — это функция, в которую передается значение, чтобы его преобразовать. Функция ведет себя подобно арифметическим операциям, но делает особые действия. Вот еще несколько примеров:
value = '0' # Внутри скобок можно указывать переменную converted_value = int(value) print(converted_value) # => 0 # Или конкретное значение converted_value2 = int('10') print(converted_value2) # => 10 converted_value3 = int(False) print(converted_value3) # => 0 converted_value4 = int(True) print(converted_value4) # => 1 # Если преобразуется число с плавающей точкой # то отбрасывается вся дробная часть converted_value5 = int(3.5) print(converted_value5) # => 3
Точно так же можно преобразовать данные в строки str() и число с плавающей точкой float() :
value = str(10) print(value) # '10' value2 = str(True) print(value2) # 'True' value3 = float(5) print(value3) # 5.0
Некоторые преобразования Python выполняет автоматически. Например, в операциях, где встречается одновременно целое число и число с плавающей точкой. Python автоматически все приводит к float — числу с плавающей точкой:
# Неявно выполняется код float(3) + 1.2 value = 3 + 1.2 print(value) # => 4.2
Задание
Выведите на экран строку 2 times , полученную из числа 2.9 (хранится в переменной value ) и строки times , используя преобразования типов и конкатенацию. Для этого нужно выполнить два преобразования: сначала в целое число, а затем в строку
2 times
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Что используется для преобразования к типу int
Преобразование типов данных, это приведение одного типа к другому. Например, приведение целочисленной переменной к числу с плавающей точной, или преобразование числа в строку. В C# выделяют два варианта преобразования типов:
- Неявное преобразование типов. Это, так называемое безопасное преобразование типов в C#. Например, преобразование из типа float (более «маленький» тип) в тип double (более «большой» тип). При таком преобразовании никакая информация не «потеряется», что при обратном преобразовании вполне возможно.
- Явное преобразование типов. Такое преобразование выполняется программистом с прямым указанием типа, к которому нужно привести переменную. Для такого преобразования требуется наличие оператора преобразования.
А теперь, я покажу как можно использовать явное преобразование типов в C#:
using System; namespace TypesConvertion < class Program < static void Main(string[] args) < //Число с плавающей точкой double doubleData = 245.45; //Вывод этого числа Console.WriteLine(doubleData); //А теперь, мы сделаем на основе этого числа, цело число int intData = (int)doubleData; //Вывод целого числа Console.WriteLine(intData); //Чтобы окно не закрылось раньше времени Console.ReadKey(); >> >
Преобразование типа double в тип int выполнялось в выделенной строке (строке с номером 16). Если вы соберете данный пример и запустите его, то увидите, что преобразование типов прошло, т.е. из числа с плавающей точкой мы получили целое число.
Так же, для преобразования данных из одного типа в другой, есть целый класс с именем Convert, у которого имеются специальные методы. Ниже, в таблице, представлены основные методы этого класса.
Название метода | Целевой тип |
---|---|
ToBoolean | bool |
ToByte | byte |
ToChar | char |
ToDouble | double |
ToSingle | float |
ToInt32 | int |
ToInt64 | long |
ToString | string |
А теперь, пример использования класса Convert и его методов:
using System; namespace TypesConvertion < class Program < static void Main(string[] args) < //Число с плавающей точкой double doubleData = 245.45; //Вывод этого числа Console.WriteLine(doubleData); //А теперь, мы сделаем на основе этого числа, цело число int intData = Convert.ToInt32(doubleData); //Вывод целого числа Console.WriteLine(intData); //Чтобы окно не закрылось раньше времени Console.ReadKey(); >> >
Как видите, это практически тот же код, что был в первом примере, но с использованием другого подхода в преобразовании типов.
И обратите внимание на еще одни момент, если один тип нельзя преобразовать в другой, а вы это попытаетесь сделать, то получите ошибку в программе!
Пользоваться возможность преобразования типов вам придется довольно часто!
ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ В PYTHON
С помощью функции complex() удобно формировать комплексные числа, указывая через запятую два аргумента: действительную часть и мнимую часть.
a = complex(3.2, 1.5) print(a)
(3.2+1.5j)
Смешанная арифметика
Python поддерживает смешанную арифметику в выражениях, состоящих из чисел разных типов. При этом целочисленный тип (int) при необходимости расширяется до дробного (float), а дробный — до комплексного (complex). То же самое происходит при сравнении чисел разного типа.
Системы счисления
Для преобразования чисел в двоичную, восьмиричную и шестнадцатиричную систему служат функции bin(), oct() и hex(). Эти функции возвращают строковые представления чисел, что необходимо учитывать при работе с ними.
a = hex(38) print(a)
0x26
Преобразовать строковое представление недесятичного числа в десятичную систему можно с помощью функции int(), указав вторым аргументом основание системы счисления (от 2 до 36 включительно).
a = '0x26' b = int(a, base=16) print(b)
Округление
Для округления чисел с плавающей точкой используется функция round(). Функция использует банковское округление (по Гауссу) до ближайшего чётного целого, чтобы избежать серийного накопления погрешности. Например, round(1.5) + round(2.5) будет равен 4. При обычном математическом округлении сумма округленных чисел будет равна 5.
С помощью второго аргумента функции round() можно округлить число до заданного количества знаков после запятой. Если воторой аргумент не задан, то число округляется до целого.
a = round(1.5) print(a) b = round(2.5) print(b) c = round(6.4567, 2) print(c) d = round(4.35, 1) print(d) e = round(4.45, 1) print(e)
2 2 6.46 4.7 4.5
Преобразование в строку
Для преобразования в строку используется функция str(). Аргументом функции str() может выступать число, строка, кортеж, список, множество, словарь, логическое значение, None.
Любой объект, преобразованный в строку, становится просто набором символов.
a = 5.3 x = str(a) print(x, type(a), type(x))
Преобразование в список
Для преобразования в список используется функция list(). Аргументом функции list() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).
При преобразовании строки в список, мы получаем список, состоящий из символов строки.
Стоит обратить внимание на то, что при преобразовании словаря в список, в списке оказываются только ключи.
b = 'Python' x = list(b) print(x) c = (3, 4) x = list(c) print(x) d = [5, 6] x = list(d) print(x) e = x = list(e) print(x) f = x = list(f) print(x)
['P', 'y', 't', 'h', 'o', 'n'] [3, 4] [5, 6] [8, 7] [1, 2]
Преобразование в кортеж
Для преобразования в кортеж используется функция tuple(). Аргументом функции tuple() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).
Преобразование в кортеж происходит по тому же принципу, по которому происходит преобразование в список.
Преобразование в множество
Для преобразования в множество используется функция set(). Аргументом функции set() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).
Преобразование в множество происходит по тому же принципу, по которому происходит преобразование в список, но следует учитывать, что повторяющиеся элементы в множестве будут представлены только один раз.
a = [5, 6, 5, 6, 7] x = set(a) print(x)
С помощью последовательного преобразования числа в строку, а затем в множество, можно найти набор символов, которые встречаются в числе.
a = 227 x = set(str(a)) print(x)
Преобразование в словарь
Для преобразования в словарь используется функция dict().
Для преобразования в словарь каждый элемент преобразуемой последовательности должен быть парой. Первым элементом в паре может быть любой неизменяемый тип данных (число, строка, кортеж), а вторым — любой тип данных.
f = [[1, 'яблоко'], [2, 'тыква']] x = dict(f) print(x)
Преобразование в логический тип
Для преобразования в логический тип используется функция bool().
Функция bool() вернет False, если в качестве аргумента выступает пустая строка, нулевое число, None, пустой список, пустой кортеж или пустое множество. Непустая строка, ненулевое число, даже если оно отрицательное, вернут True. Непустое множество, непустой список или непустой кортеж, даже если они содержат один пустой элемент, вернут True.
a = -7 x = bool(a) print(x) b = '' x = bool(b) print(x) c = x = bool(c) print(x)
True False True