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

Раздел: Основы Python -> Преобразование типов

Основные способы изменения типа данных в Python

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

Как выполнить базовое преобразование типов?

Наиболее распространённый и эффективный способ – использовать встроенные функции: int(), float(), str(), list(), tuple(), set(), dict() и bool(). Каждая из них принимает один аргумент (или несколько для int() с указанием основания системы счисления) и возвращает значение нового типа.


# Преобразование строки в целое число
num = int("42")
print(num)          # 42
print(type(num))    # 

# Преобразование целого числа в дробное
f = float(10)
print(f)            # 10.0

# Преобразование числа в строку
s = str(123)
print(s)            # "123"
print(type(s))      # 
  

изменить тип в python (изменить тип в python)

Эти функции работают надёжно для большинства стандартных типов. Однако при попытке преобразовать неподходящую строку возникает ValueError. Например, int("abc") вызовет ошибку.

Как преобразовать список строк в список чисел?

Если требуется применить преобразование ко всем элементам коллекции, удобно использовать map() или генератор списка (list comprehension).


# Использование map()
str_numbers = ["1", "2", "3"]
int_numbers = list(map(int, str_numbers))
print(int_numbers)  # [1, 2, 3]

# Использование list comprehension
int_numbers = [int(x) for x in str_numbers]
print(int_numbers)  # [1, 2, 3]
  

Python int to str (преобразование int в строку в python)

Проблема: Если один из элементов не может быть преобразован, возникнет ValueError. Решение – обернуть преобразование в try/except или предварительно проверять str.isdigit().

Как преобразовать список в строку?

Для объединения элементов списка (обычно строк) в одну строку применяется str.join(). Если список содержит не строки, их нужно предварительно преобразовать.


# Список строк
words = ["Python", "преобразование", "типов"]
sentence = " ".join(words)
print(sentence)  # "Python преобразование типов"

# Список чисел – сначала преобразование в строки
numbers = [1, 2, 3]
result = ", ".join(str(n) for n in numbers)
print(result)    # "1, 2, 3"
  

Python bytes to string (преобразование байтов в строку в python)

Также можно использовать ''.join(map(str, numbers)).

Как безопасно преобразовать строку в словарь?

При работе с данными, полученными из внешних источников, не рекомендуется использовать eval() из-за угроз безопасности. Вместо этого применяют ast.literal_eval() или json.loads().


import ast
import json

# Строка, представляющая словарь
data_str = '{"name": "Alice", "age": 30}'

# Через ast.literal_eval
data = ast.literal_eval(data_str)
print(data)       # {'name': 'Alice', 'age': 30}

# Через json.loads (если строки в двойных кавычках)
data_json = json.loads(data_str)
print(data_json)  # {'name': 'Alice', 'age': 30}
  

как выводить в строку python (преобразование вывода в строку в python)

Проблема: ast.literal_eval() принимает только литералы Python (строки, числа, кортежи, списки, словари, множества, None, True, False). json.loads() требует строки в двойных кавычках и не поддерживает кортежи. Выбор зависит от формата данных.

Как преобразовать пользовательский объект в число или строку?

В пользовательских классах можно определить методы __int__(), __float__(), __str__(), чтобы объект можно было преобразовывать встроенными функциями.


class Money:
    def __init__(self, amount):
        self.amount = amount

    def __int__(self):
        return int(self.amount)

    def __float__(self):
        return float(self.amount)

    def __str__(self):
        return f"${self.amount:.2f}"

m = Money(49.99)
print(int(m))    # 49
print(float(m))  # 49.99
print(str(m))    # $49.99
  

Python list to string (преобразование списка в строку python)

Также можно определить __bool__() для логического преобразования.

Как преобразовать строку в число с указанием системы счисления?

Функция int() принимает второй аргумент – основание системы счисления (от 2 до 36).


# Шестнадцатеричная строка
hex_val = int("FF", 16)
print(hex_val)  # 255

# Двоичная строка
bin_val = int("1010", 2)
print(bin_val)  # 10

# Восьмеричная строка
oct_val = int("77", 8)
print(oct_val)  # 63
  

Python string integer (преобразование строки в целое число python)

Какие типичные ошибки возникают при преобразовании типов?

  • ValueError – при попытке преобразовать строку, не соответствующую числовому формату (например, int("3.14")). Решение: сначала преобразовать в float().
  • TypeError – при попытке преобразовать неподходящий тип (например, int("строка") – это ValueError, а int([1,2]) – TypeError).
  • Потеря данных – при преобразовании float в int дробная часть отбрасывается, а не округляется.
  • Логическое преобразование – любая пустая коллекция (пустой список, кортеж, строка, словарь) или число 0, None дают False. Это часто является неожиданностью для новичков.

# Примеры ошибок
# int("3.14")  # ValueError: invalid literal for int() with base 10: '3.14'
# int([1, 2])  # TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

# Правильный способ для строки с десятичной точкой
f = float("3.14")  # 3.14
print(int(f))       # 3 (дробная часть отброшена)

# Логическое преобразование
print(bool([]))     # False
print(bool(""))     # False
print(bool([0]))    # True
  

Для избежания ошибок рекомендуется использовать блоки try/except или проверять входные данные с помощью методов вроде str.isdigit() (но он не распознаёт отрицательные числа и числа с плавающей точкой).

- Python string number (строковое представление числа в python)
- функция str в python (функция str() в python)
- Python список str в int (преобразование списка строк в список целых чисел в python)

Расширенные примеры преобразования типов

Преобразование между системами счисления

Пример

# Преобразование строки в число с указанием основания
hex_num = int("1A", 16)
print(f"Шестнадцатеричное 1A -> {hex_num}")

# Обратное преобразование числа в строку в другой системе
print(bin(hex_num))   # 0b11010
print(oct(hex_num))   # 0o32
print(hex(hex_num))   # 0x1a
Шестнадцатеричное 1A -> 26
0b11010
0o32
0x1a

Преобразование с обработкой ошибок (try/except)

Пример

def safe_int(value, default=0):
    try:
        return int(value)
    except (ValueError, TypeError):
        return default

print(safe_int("123"))      # 123
print(safe_int("abc"))      # 0
print(safe_int([1,2]))      # 0
print(safe_int("12.34"))    # 0 (так как int() не принимает float-строку)
123
0
0
0

Безопасное преобразование строки в число с плавающей точкой

Пример

def safe_float(value, default=0.0):
    try:
        return float(value)
    except (ValueError, TypeError):
        return default

print(safe_float("3.14"))   # 3.14
print(safe_float("inf"))    # inf
print(safe_float("abc"))    # 0.0
3.14
inf
0.0

Преобразование через eval() (с предупреждением)

Пример

# eval() может выполнить произвольный код – используйте только для доверенных данных
expression = "[x*2 for x in range(5)]"
result = eval(expression)
print(result)  # [0, 2, 4, 6, 8]

# Альтернатива – ast.literal_eval()
import ast
try:
    safe = ast.literal_eval("[1, 2, 3]")
    print(safe)
except (ValueError, SyntaxError) as e:
    print(f"Ошибка: {e}")
[0, 2, 4, 6, 8]
[1, 2, 3]

Преобразование объектов datetime в строку и обратно

Пример

from datetime import datetime, date

# Текущая дата и время
now = datetime.now()
date_str = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"Строка: {date_str}")

# Обратное преобразование
parsed = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print(f"Объект: {parsed}")
Строка: 2025-03-27 14:30:00
Объект: 2025-03-27 14:30:00

Преобразование в enum (перечисление)

Пример

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

# Преобразование числа в элемент перечисления
num = 2
color = Color(num)
print(color)           # Color.GREEN
print(color.name)      # GREEN
print(color.value)     # 2

# Преобразование строки в элемент
color2 = Color["RED"]
print(color2)          # Color.RED
Color.GREEN
GREEN
2
Color.RED

Изменить тип в Python - comments

En
изменить тип в python (python)