Преобразование типов данных Python3

Иногда нам нужно преобразовывать встроенные типы данных. Для преобразования типов данных, как правило, достаточно использовать тип данных в качестве имени функции.

Преобразование типов данных в Python можно разделить на два типа:

  • Неявное преобразование типов — выполняется автоматически
  • Явное преобразование типов — требует использования функций типа для преобразования

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

При неявном преобразовании типов Python автоматически преобразует один тип данных в другой без нашего вмешательства.

В следующем примере мы выполняем операцию над двумя разными типами данных, и низший тип данных (целое число) преобразуется в высший тип данных (число с плавающей точкой), чтобы избежать потери данных.

Пример

num_int = 123
num_flo = 1.23

num_new = num_int + num_flo

print("тип данных num_int:",type(num_int))
print("тип данных num_flo:",type(num_flo))

print("значение num_new:",num_new)
print("тип данных num_new:",type(num_new))

Вывод приведенного выше примера:

num_int 数据类型为: <class 'int'>
num_flo 数据类型为: <class 'float'>
num_new: 值为: 124.23
num_new 数据类型为: <class 'float'>

Анализ кода:

  • В примере у нас есть две переменные разных типов данныхnum_intиnum_floвыполняем сложение и сохраняем в переменнойnum_new.
  • Затем мы проверяем типы данных трёх переменных.
  • В выводе мы видимnum_intДа整型(integer) , num_floДа 浮点型(float)。
  • Аналогично новая переменнаяnum_newДа 浮点型(float), это потому что 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 数据类型为: <class 'int'>
num_str 数据类型为: <class 'str'>
Traceback (most recent call last):
  File "/example-test/test.py", line 7, in <module>
    print(num_int+num_str)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Как видно из вывода, операция между целочисленным и строковым типами приведёт к ошибке с выводом TypeError. Python не может использовать неявное преобразование в этом случае.

Однако Python предоставляет решение для таких ситуаций, называемое явным преобразованием.

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

При явном преобразовании типов пользователь преобразует тип данных объекта в требуемый тип данных. Мы используем предопределённые функции, такие как int(), float(), str() и т. д., для выполнения явного преобразования типов.

int()Преобразование в целочисленный тип:

Пример

x = int(1)   # x выводит 1
y = int(2.8) # y выводит 2
z = int("3") # z выводит 3

float()Преобразование в тип с плавающей запятой:

Пример

x = float(1)     # x выводит 1.0
y = float(2.8)   # y выводит 2.8
z = float("3")   # z выводит 3.0
w = float("4.2") # w выводит 4.2

str()Преобразование в строковый тип:

Пример

x = str("s1") # x выводит 's1'
y = str(2)    # y выводит '2'
z = str(3.0)  # z выводит '3.0'

Чтобы выполнить операцию между целочисленным и строковым типами, можно использовать принудительное преобразование типов:

Пример

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 数据类型为: <class 'int'>
类型转换前,num_str 数据类型为: <class 'str'>
类型转换后,num_str 数据类型为: <class 'int'>
num_int 与 num_str 相加结果为: 579
sum 数据类型为: <class 'int'>

Следующие встроенные функции могут выполнять преобразования между типами данных. Эти функции возвращают новый объект, представляющий преобразованное значение.

ФункцияОписание

int(x [,base])

Преобразовать x в целое число

float(x)

Преобразовать x в число с плавающей запятой

complex(real [,imag])

Создать комплексное число

str(x)

Преобразовать объект x в строку

repr(x)

Преобразовать объект x в строку-выражение

eval(str)

Используется для вычисления допустимого выражения Python в строке и возврата объекта

tuple(s)

Преобразовать последовательность s в кортеж

list(s)

Преобразовать последовательность s в список

set(s)

Преобразовать в изменяемое множество

dict(d)

Создать словарь. d должен быть последовательностью кортежей (key, value).

frozenset(s)

Преобразовать в неизменяемое множество

chr(x)

Преобразовать целое число в символ

ord(x)

Преобразовать символ в его целочисленное значение

hex(x)

Преобразовать целое число в шестнадцатеричную строку

oct(x)

Преобразовать целое число в восьмеричную строку

bool(x)

Преобразовать объект x в логическое значение (True или False)

bytes([source[, encoding[, errors]]])

Преобразовать объект в неизменяемую последовательность байтов

bytearray([source[, encoding[, errors]]])

Преобразовать объект в изменяемый массив байтов

memoryview(obj)

Возвращает объект memory view для заданного аргумента (без копирования данных)

bin(x)

Преобразует целое число в двоичную строку

ascii(x)

Возвращает ASCII-представление объекта с экранированием не-ASCII символов

Другие расширения