Строки и функции для работы с ними (faq)
Содержание:
- Типы данных и преобразование типов
- Преобразование в кортежи и списки
- Замена в строке
- Типизация в Python
- Переменные в Python
- Дополнение 1: Как вызывать магические методы
- Postmypost
- Десятичные дроби в Python
- Использование модуля pickle на своих объектах
- Целые числа (int)
- Поиск подстроки в строке
- Таблица форматов
- Нарезка строк
- Как изменить или удалить строку?
- Форматирование строк
- Преобразование типа
Типы данных и преобразование типов
Перечислим основные типы данных в Python, которые понадобятся на ближайших уроках:
- int – целочисленные значения;float – вещественные (дробные) значения;bool – логические значения — истина (True) или ложь (False);str – символьная строка или единичный символ.
Рассмотрим примеры использования основных типов в Python:Целые числа (int):
num = 13 print(num) # 13 num = print(num) # 0 num = -10 print(num) # -10 num = 500_000_000 # для удобства чтения print(num) # 500000000 |
Вещественные числа (float):
num = 13.4 print(num) # 13.4 num = 0.0 print(num) # 0.0 num = -15.2 print(num) # -15.2 num = 100_000.000_002 # для удобства чтения print(num) # 100000.000002 num = 1.7e2 # 1.7 умножить на 10 в степени 2 print(num) # 170 |
Логический тип (bool):
print(15 == 15) # True print(1 != 3) # True print(3 > 4) # False print(3 <= 3) # True print(6 >= 6) # True print(6 < 5) # False x = 2 print(1 < x < 3) # True |
Строки (str):
example_string = "Очень интересно" print(example_string) # Очень интересно example_string = 'Пьеса "На дне"' print(example_string) # Пьеса "На дне" example_string = "Пьеса \"На дне\" print(example_string) # Пьеса "На дне" example_string = "Как " \ "разбить " \ "объявление длинной строки" print(example_string) # Как разбить объявление длинной строки example_string = """ Как оставить сроку в несколько строк """ print(example_string) # Как # оставить сроку # в несколько строк |
# Как объединить две строки в одну print("Можно их" + " сложить") # Можно их сложить print("Можно и так!" * 3) # Можно и так!Можно и так!Можно и так! |
Рассмотрим примеры того, как используется преобразование типов в Питон:
- преобразование в символьную строку:
1 2 3 |
a = 1.7 a=str(a) print(a) # '1.7' |
преобразование в целое:
1 2 3 |
x = 1.7 x=int(x) print(x) # 1 |
преобразование в вещественное:
1 2 3 |
y=1 y=float(y) print(y) # 1.0 |
Преобразование в кортежи и списки
Чтобы преобразовать данные в кортеж или список, используйте методы tuple() и list() соответственно. В Python:
- Список – это изменяемая упорядоченная последовательность элементов, взятая в квадратные скобки ().
- Кортеж – неизменяемая упорядоченная последовательность элементов, взятая в круглые скобки.
Преобразование списка в кортеж
Преобразовывая список в кортеж, вы можете оптимизировать программу. Для преобразования в кортеж используется метод tuple().
Выведенные на экран данные являются кортежем, а не списком, поскольку они взяты в круглые скобки.
Попробуйте использовать tuple() с переменной:
В кортеж можно преобразовать любой итерируемый тип, включая строки:
Конвертируя в кортеж числовой тип данных, вы получите ошибку:
Преобразование в списки
Вы можете преобразовать кортеж в список, чтобы сделать его изменяемым.
Обратите внимание: при этом в методах list() и print() используется две пары круглых скобок. Одни принадлежать собственно методу, а другие – кортежу
Если данные, которые вывел метод print, заключены в квадратные скобки, значит, кортеж преобразовался в список.
Чтобы избежать путаницы с круглыми скобками, можно создать переменную:
Строки тоже можно преобразовывать в списки:
Замена в строке
Чтобы в Python заменить в строке одну подстроку на другую, применяют метод replace():
• replace(old, new): подстрока old заменяется на new;
• replace(old, new, num): параметр num показывает, сколько вхождений подстроки old требуется заменить на new.
Пример замены в строке в Python:
phone = "+1-234-567-89-10" # дефисы меняются на пробелы edited_phone = phone.replace("-", " ") print(edited_phone) # +1 234 567 89 10 # дефисы удаляются edited_phone = phone.replace("-", "") print(edited_phone) # +12345678910 # меняется только первый дефис edited_phone = phone.replace("-", "", 1) print(edited_phone) # +1234-567-89-10
Типизация в Python
Для обозначения базовых типов переменных используются сами типы:
- etc.
Пример использования базовых типов в python-функции:
Помимо этого, можно параметризировать более сложные типы, например, . Такие типы могут принимать значения параметров, которые помогают более точно описать тип функции. Так, например, указывает на то, что список состоит только из целочисленных значений.
Пример кода:
Кроме , существуют и другие типы из модуля typing, которые можно параметризировать. Такие типы называются Generic-типами. Такого рода типа определены для многих встроенных в Python структур данных:
- и т.д.
Как можно заметить, некоторые типы имеют несколько параметров, которые можно описать. Например, означает, что это будет словарь, где ключи будут иметь тип , а значения – тип .
Курс «Управление ИТ-проектами»
Старт 17 сентября, 7 месяцев, Онлайн, От 8000 до 88 000 ₽
tproger.ru
События и курсы на tproger.ru
Также есть более абстрактные типы, например:
- – объект имеет реализации метода ;
- – объект имеет реализацию метода .
При этом функции тоже имеют свои типы. Например, для описания функции можно использовать тип , где указываются типы входных параметров и возвращаемых значений. Пример использования:
Тип :
- говорит о том, что у объекта реализован метод ;
- описывает типы параметров к этому методу.
На первом месте стоит массив типов входных параметров, на втором — тип возвращаемого значения.
Про остальные абстрактные типы контейнеров можно в документации Python.
Также есть более конкретные типы, например , где указывает не тип, а конкретное значение. Например означает цифру 3. Используют такой тип крайне редко.
Также Python позволяет определять свои Generic-типы.
В данном примере означает переменную любого типа, которую можно подставить при указании. Например:
Для определения собственных типов наследование возможно не только от , но и от других абстрактных типов, например, таких, как , .
На месте или могут быть конкретные типы.
Также есть специальные конструкции, которые позволяют комбинировать типы. Например, — один из типов. Если переменной может быть как , так и , то как тип следует указать . Если переменной может быть как , так и , то в качестве типа можно указать или, что предпочтительно, .
Переменные в Python
В большинстве языков программирования переменная является именованным местоположением, используемым для хранения данных в памяти. Каждая переменная должна иметь уникальное имя, называемое идентификатором. Принято думать о переменных как о контейнерах, которые содержат данные и эти данные могут быть извлечены или изменены позже, во время программирования.
Вы можете считать переменную сумкой для хранения в ней чего либо, и это что то можно извлечь или заменить в любое время.
Объявление переменных в Python
В отличии от других языков программирования, в Python переменные не нуждаются в объявлении для резервирования места в памяти. «Объявление переменной» или «инициализация переменной» происходит автоматически, когда мы присваиваем значение переменной.
Присвоение значения переменной в Python
Вы можете использовать оператор присваивания =, чтобы присвоить значение переменной.
Пример 1: Объявление и присвоение значения переменной
message = 'hello'
В данном примере мы присвоили переменной message значение hello. Чтобы вывести значение переменной на экран нужно вызвать функцию print()
print(message)
Вы увидите следующее:
hello
Вам не нужно указывать тип переменной во время присвоения значения. Python язык с динамической типизацией, поэтому на этапе присвоения интерпретатор «понял» что переменная message имеет тип str (string, строка). При этом, далее вы можете присвоить этой переменной значение 123 и ее тип автоматически сменится на int (integer, число).
Пример 2: изменение значения переменной, изменение типа переменной
message = 'bye' print(message) print(type(message)) message = 123 print(message) print(type(message))
В этом примере мы сначала изменили значение на другую строку, затем присвоили переменной значение типа int. Как видите никаких ошибок это не спровоцировало.
Пример 3: Присвоение нескольких значений нескольким переменным на одной строке
Иногда можно присваивать значения сразу нескольким переменным на одной строке:
a, b, c = 1, 'hello', 12
Эта запись то же самое что и:
a = 1 b = 'hello' c = 12
Не стоит злоупотреблять этим способом, он несколько снижает читабельность кода.
Если мы хотим присвоить одно и то же значение нескольким переменным одновременно, мы можем сделать следующим способом:
a = b = c = 15
В результате, все три переменные будут типа int и содержать в себе значение 15.
Дополнение 1: Как вызывать магические методы
Магический метод | Когда он вызывается (пример) | Объяснение |
---|---|---|
вызывается при создании экземпляра | ||
вызывается при создании экземпляра | ||
, , etc. | Вызывается для любого сравнения | |
Унарный знак плюса | ||
Унарный знак минуса | ||
Побитовая инверсия | ||
Преобразование, когда объект используется как индекс | ||
, | Булевое значение объекта | |
Пытаются получить несуществующий атрибут | ||
Присвоение любому атрибуту | ||
Удаление атрибута | ||
Получить любой атрибут | ||
Получение элемента через индекс | ||
Присвоение элементу через индекс | ||
Удаление элемента через индекс | ||
Итерация | ||
, | Проверка принадлежности с помощью | |
«Вызов» экземпляра | ||
оператор менеджеров контекста | ||
оператор менеджеров контекста | ||
Сериализация | ||
Сериализация |
Postmypost
Десятичные дроби в Python
Встроенный в Python класс float выполняет некоторые вычисления, которые могут нас удивить. Мы все знаем, что сумма 1.1 и 2.2 равна 3.3, но Python, похоже, не согласен.
>>> (1.1 + 2.2) == 3.3 False
Оказывается, что числа с плавающей запятой реализованы в Python как двоичные дроби, поскольку компьютер понимает только двоичную систему счисления (0 и 1). По этой причине большинство известных нам десятичных дробей не может быть точно сохранено на нашем компьютере.
Давайте рассмотрим пример. Мы не можем представить дробь 1/3 как десятичное число. Это даст 0.33333333.
Получается, что десятичная дробь 0,1 приведет к бесконечно длинной двоичной дроби 0,000110011001100110011 … и наш компьютер хранит только ее конечное число.
Это будет только приблизительно 0,1, но никогда не будет равным 0,1. Следовательно, это ограничение нашего компьютерного оборудования, а не ошибка в Python.
>>> 1.1 + 2.2 3.3000000000000003
Чтобы преодолеть эту проблему, мы можем использовать десятичный модуль decimal, который поставляется с Python. В то время как числа с плавающей запятой имеют точность до 15 десятичных знаков, десятичный модуль имеет заданную пользователем точность.
import decimal # Результат: 0.1 print(0.1) # Результат: Decimal('0.1000000000000000055511151231257827021181583404541015625') print(decimal.Decimal(0.1))
Этот модуль используется, когда мы хотим выполнить десятичные вычисления с высокой точностью.
Использование модуля pickle на своих объектах
протокол
Сериализация собственных объектов.
-
Если вы хотите, чтобы после десериализации вашего класса был вызыван , вы можете определить , который должен вернуть кортеж аргументов, который будет отправлен в . Заметьте, что этот метод работает только с классами старого стиля.
-
Для классов нового стиля вы можете определить, какие параметры будут переданы в во время десериализации. Этот метод так же должен вернуть кортеж аргументов, которые будут отправлены в .
-
Вместо стандартного атрибута , где хранятся атрибуты класса, вы можете вернуть произвольные данные для сериализации. Эти данные будут переданы в во время десериализации.
-
Если во время десериализации определён , то данные объекта будут переданы сюда, вместо того чтобы просто записать всё в . Это парный метод для : когда оба определены, вы можете представлять состояние вашего объекта так, как вы только захотите.
-
Если вы определили свой тип (с помощью Python’s C API), вы должны сообщить Питону как его сериализовать, если вы хотите, чтобы он его сериализовал. вызывается когда сериализуется объект, в котором этот метод был определён. Он должен вернуть или строку, содержащую имя глобальной переменной, содержимое которой сериализуется как обычно, или кортеж. Кортеж может содержать от 2 до 5 элементов: вызываемый объект, который будет вызван, чтобы создать десериализованный объект, кортеж аргументов для этого вызываемого объекта, данные, которые будут переданы в (опционально), итератор списка элементов для сериализации (опционально) и итератор словаря элементов для сериализации (опционально).
-
Иногда полезно знать версию протокола, реализуя . И этого можно добиться, реализовав вместо него . Если реализован, то предпочтение при вызове отдаётся ему (вы всё-равно должны реализовать для обратной совместимости).
Целые числа (int)
В Python любое число, состоящее из десятичных цифр без префикса, интерпретируется как десятичное число типа
Целые числа в Python представлены только одним типом – PyLongObject, реализация которого лежит в longobject.c, а сама структура выглядит так:
Любое целое число состоит из массива цифр переменной длины, поэтому в Python 3 в переменную типа может быть записано число неограниченной длины. Единственное ограничение длины – это размер оперативной памяти.
Целые числа могут записываться не только как десятичные, но и как двоичные, восьмеричные или шестнадцатеричные. Для этого перед числом нужно написать символы:
- 0b (0B) – для двоичного представления;
- 0o (0O) – для восьмеричного представления;
- 0x (0X) – для шестнадцатеричного представления.
Поиск подстроки в строке
Чтобы в Python выполнить поиск в строке, используют метод find(). Он имеет три формы и возвращает индекс 1-го вхождения подстроки в строку:
• find(str): поиск подстроки str производится с начала строки и до её конца;
• find(str, start): с помощью параметра start задаётся начальный индекс, и именно с него и выполняется поиск;
• find(str, start, end): посредством параметра end задаётся конечный индекс, поиск выполняется до него.
Когда подстрока не найдена, метод возвращает -1:
welcome = "Hello world! Goodbye world!" index = welcome.find("wor") print(index) # 6 # ищем с десятого индекса index = welcome.find("wor",10) print(index) # 21 # ищем с 10-го по 15-й индекс index = welcome.find("wor",10,15) print(index) # -1
Таблица форматов
Вы должны следовать приведенной ниже таблице форматов, чтобы использовать соответствующие директивы при указании параметра формата.
Директива | Значение | Пример вывода |
---|---|---|
%A | День недели как полное название локали. | Среда |
%a | День недели как сокращенное название локали. | Пн, вт, ср |
%w | День недели в виде десятичного числа, где 0 — воскресенье, а 6 — суббота. | 0,1,2,3,4… 6 |
%d | День месяца в виде десятичного числа с нулями. | 01,02,03… 31 |
% -d | День месяца в виде десятичного числа. (Зависит от платформы) | 1,2,3… |
% b | Месяц как сокращенное название языкового стандарта. | Море |
% B | Месяц как полное название локали. | марш |
% m | Месяц как десятичное число с нулями. | 01,02… 12 |
% -m | Месяц как десятичное число. (Зависит от платформы) | 1,2,… 12 |
%y | Год без века как десятичное число с нулями. | 20 (на 2020 год) |
% Y | Год со столетием в виде десятичного числа. | 2020, 2021 и др. |
%H | Час (в 24-часовом формате) как десятичное число с нулями. | 01, 02,… |
%-H | Час (24-часовой формат) в виде десятичного числа. (Зависит от платформы) | 1,2,3,… |
%I | Час (12-часовой формат) как десятичное число с нулями. | 01, 02, 03,… |
%-I | Час (12-часовой формат) в виде десятичного числа. (Зависит от платформы) | 1, 2, 3… |
%p | Локальный эквивалент AM или PM. | ДО ПОЛУДНЯ ПОСЛЕ ПОЛУДНЯ |
%M | Минута в виде десятичного числа с нулями. | 01, 02,… 59 |
% -M | Минута как десятичное число. (Зависит от платформы) | 1,2,3,… 59 |
% S | Второй — десятичное число с нулями. | 01, 02,… 59 |
% -S | Секунда как десятичное число. (Зависит от платформы) | 1, 2,… 59 |
% f | Микросекунда в виде десятичного числа с нулями слева. | 000000 |
%z | Смещение UTC в форме + ЧЧММ или -ЧЧММ (пустая строка, если объект наивен). | (пусто), +0000, -0400, +1030 |
%Z | Название часового пояса (пустая строка, если объект наивный). | (пусто), UTC, IST, CST |
% j | День года в виде десятичного числа с нулями. | 1, 2, 3,… 366 |
% -j | День года в виде десятичного числа. (Зависит от платформы) | 1, 2, 3,… 366 |
% U | Номер недели в году (воскресенье как первый день недели) в виде десятичного числа, дополненного нулями. Все дни нового года, предшествующие первому воскресенью, считаются нулевой неделей. | 1, 2, 3,… 53 |
%W | Номер недели в году (понедельник как первый день недели) в виде десятичного числа. Все дни нового года, предшествующие первому понедельнику, считаются нулевой неделей. | 1, 2, 3,… 53 |
% c | Соответствующее представление даты и времени для локали. | Ср 06 мая 12:23:56 2020 |
%x | Соответствующее представление даты языкового стандарта. | 06.05.20 |
%X | Соответствующее временное представление локали. | 12:23:56 |
%% | Буквальный символ «%». | % |
Нарезка строк
Одной из тем, которую вы часто будете делать на практике, является нарезка строк. Помню, меня удивило то, как часто мне нужно было узнать, как это делается в повседневной работе. Давайте посмотрим, как нарезка сработает в следующей строке:
Python
my_string = «I like Python!»
1 | my_string=»I like Python!» |
Каждый символ в строке может стать доступным при помощи слайсинга (нарезки). Например, если вам нужно взять только первый символ, вы можете сделать это следующим образом:
Python
print( my_string ) # I
1 | print(my_string1)# I |
Таким образом, мы берем первый символ в строке до второго символа, но, не включая его. Да, в Python отсчет ведется с нуля. Это проще понять, если мы определим позицию каждого символа в таблице:
Python
0 1 2 3 4 5 6 7 8 9 10 11 12 13 — I l i k e P y t h o n !
1 | 12345678910111213-IlikePython! |
Таким образом, у нас есть строка длиной в 14 символов, начиная с нуля и до тринадцати. Давайте приведем несколько примеров, чтобы понять это лучше.
Python
my_string # ‘I’
my_string # ‘I like Pytho’
my_string # ‘I like Python’
my_string # ‘I like Python!’
my_string # ‘I like Py’
my_string # ‘I like Python!’
my_string # ‘like Python!’
1 |
my_string1# ‘I’ my_string12# ‘I like Pytho’ my_string13# ‘I like Python’ my_string14# ‘I like Python!’ my_string-5# ‘I like Py’ my_string# ‘I like Python!’ my_string2# ‘like Python!’ |
Как видно в данных примерах, мы можем назначить срез, лишь указав его начало (другими словами, my_string), конец среза (my_string), или оба (my_string). Мы можем даже использовать отрицательные значения, которые начинаются с конца строки. Так что в примере, где мы указали my_string, начало ведется с нуля и заканчивается 5 символами, перед концом строки. Вы можете задаться вопросом «Зачем мне это и где это можно применить?». Лично я использовал это для разбора записей с фиксированной шириной в файлах, или ситуативно для парсинга сложных названий файлов, с очень специфическими наименованиями. Также я использовал это для парсинга значений в бинарных файлах. Любая работа, которая включает в себя обработку текстовых файлов, может быть намного проще, если вы понимаете, как работает нарезка и как эффективно использовать данный инструмент. Вы также можете получить доступ к отдельным символам в строке с помощью индексации. Например:
Python
print(my_string) # I
1 | print(my_string)# I |
Данный код выдаст первый символ в строке.
Как изменить или удалить строку?
Строки относятся к неизменяемым типам данных (immutable type). Это означает, что элементы строки не могут быть изменены после того, как она была создана. Мы можем просто переназначить разные строки одному и тому же имени.
>>> my_string = 'programfiles' >>> my_string = 'a' ... TypeError: 'str' object does not support item assignment >>> my_string = 'Python' >>> my_string ‘Python'
Мы не можем удалять символы из строки. Но полностью удалить строку можно с помощью ключевого слова del.
>>> del my_string ... TypeError: 'str' object doesn't support item deletion >>> del my_string >>> my_string ... NameError: name 'my_string' is not defined
Форматирование строк
Форматирование строк (также известно как замещение) – это замещение значений в базовой строке. Большую часть времени вы будете вставлять строки внутри строк, однако, вам также понадобиться вставлять целые числа и числа с запятыми в строки весьма часто. Существует два способа достичь этой цели. Начнем с старого способа, после чего перейдем к новому:
Python
# -*- coding: utf-8 -*-
my_string = «Я люблю %s» % «Python»
print(my_string) # Я люблю Python
var = «яблоки»
newString = «Я ем %s» % var
print(newString) # Я ем яблоки
another_string = «Я люблю %s и %s» % («Python», var)
print(another_string) # Я люблю Python и яблоки
1 |
# -*- coding: utf-8 -*- my_string=»Я люблю %s»%»Python» print(my_string)# Я люблю Python var=»яблоки» newString=»Я ем %s»%var print(newString)# Я ем яблоки another_string=»Я люблю %s и %s»%(«Python»,var) print(another_string)# Я люблю Python и яблоки |
Как вы могли догадаться, % — это очень важная часть вышеописанного кода. Этот символ указывает Python, что вы скоро вставите текст на его место. Если вы будете следовать за строкой со знаком процента и другой строкой или переменной, тогда Python попытается вставить ее в строку. Вы можете вставить несколько строк, добавив несколько знаков процента в свою строку. Это видно в последнем примере
Обратите внимание на то, что когда вы добавляете больше одной строки, вам нужно закрыть эти строки в круглые скобки. Теперь взглянем на то, что случится, если мы вставим недостаточное количество строк:
Python
another_string = «Я люблю %s и %s» % «Python»
Traceback (most recent call last):
File «<string>», line 1, in <fragment>
TypeError: not enough arguments for format string
1 |
another_string=»Я люблю %s и %s»%»Python» Traceback(most recent call last) File»<string>»,line1,in<fragment> TypeErrornotenough arguments forformatstring |
О-па. Мы не передали необходимое количество аргументов для форматирования строки. Если вы внимательно взгляните на пример, вы увидите, что у нас есть два экземпляра %, но для того, чтобы вставить строки, вам нужно передать столько же %, сколько у нас строк. Теперь вы готовы к тому, чтобы узнать больше о вставке целых чисел, и чисел с запятыми. Давайте взглянем.
Python
my_string = «%i + %i = %i» % (1,2,3)
print(my_string) # ‘1 + 2 = 3’
float_string = «%f» % (1.23)
print(float_string) # ‘1.230000’
float_string2 = «%.2f» % (1.23)
print(float_string2) # ‘1.23’
float_string3 = «%.2f» % (1.237)
print(float_string3) # ‘1.24’
1 |
my_string=»%i + %i = %i»%(1,2,3) print(my_string)# ‘1 + 2 = 3’ float_string=»%f»%(1.23) print(float_string)# ‘1.230000’ float_string2=»%.2f»%(1.23) print(float_string2)# ‘1.23’ float_string3=»%.2f»%(1.237) print(float_string3)# ‘1.24’ |
Первый пример достаточно простой. Мы создали строку, которая принимает три аргумента, и мы передаем их. В случае, если вы еще не поняли, Python не делает никаких дополнений в первом примере. Во втором примере, мы передаем число с запятой
Обратите внимание на то, что результат включает множество дополнительных нулей (1.230000). Нам это не нужно, так что мы указываем Python ограничить выдачу до двух десятичных значений в третьем примере (“%.2f”)
Последний пример показывает, что Python округлит числа для вас, если вы передадите ему дробь, что лучше, чем два десятичных значения. Давайте взглянем на то, что произойдет, если мы передадим неправильные данные:
Python
int_float_err = «%i + %f» % («1», «2.00»)
Traceback (most recent call last):
File «<string>», line 1, in <fragment>
TypeError: %d format: a number is required, not str
1 |
int_float_err=»%i + %f»%(«1″,»2.00») Traceback(most recent call last) File»<string>»,line1,in<fragment> TypeError%dformatanumber isrequired,notstr |
В данном примере мы передали две строки вместо целого числа и дроби. Это привело к ошибке TypeError, что говорит нам о том, что Python ждал от нас чисел. Это указывает на отсутствие передачи целого числа, так что мы исправим это, по крайней мере, попытаемся:
Python
int_float_err = «%i + %f» % (1, «2.00»)
Traceback (most recent call last):
File «<string>», line 1, in <fragment>
TypeError: float argument required, not str
1 |
int_float_err=»%i + %f»%(1,»2.00″) Traceback(most recent call last) File»<string>»,line1,in<fragment> TypeErrorfloatargument required,notstr |
Мы получили ту же ошибку, но под другим предлогом, в котором написано, что мы должны передать дробь. Как мы видим, Python предоставляет нам полезную информацию о том, что же пошло не так и как это исправить. Если вы исправите вложения надлежащим образом, тогда вы сможете запустить этот пример. Давайте перейдем к новому методу форматирования строк.
Преобразование типа
Процесс преобразования значения одного типа данных (целое число, строка, число с плавающей запятой и т.д.) в другой тип данных называется преобразованием типа. Python имеет два способа преобразования типов:
- Неявное преобразование типов
- Явное приведение типов
Неявное преобразование типов
При неявном преобразовании типов Python автоматически преобразует один тип данных в другой тип данных. Этот процесс не требует участия пользователя.
Давайте рассмотрим пример, в котором Python способствует преобразованию младшего типа данных (целое число) в более высокий тип данных (число с плавающей запятой), чтобы избежать потери данных.
Пример 1: преобразование целого числа в число с плавающей точкой
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
- мы выводим тип данных всех трех объектов соответственно
- в выводе мы можем видеть, что тип данных num_int является целым числом, тип данных num_float — это число с плавающей точкой
- кроме того, мы можем видеть, что num_new имеет тип данных float, потому что Python всегда преобразует меньший тип данных в больший тип данных, чтобы избежать потери данных
Подробнее преобразование типа int в float и обратно, рассмотрено в статье Числа в Python.
Теперь давайте попробуем добавить строку и целое число и посмотрим, как Python отнесется к этому.
Пример 2: сложение строкового (более высокого) типа данных и целочисленного (более низкого) типа данных
num_int = 123 num_str = "456" print("тип данных num_int:",type(num_int)) print("тип данных num_str:",type(num_str)) print(num_int+num_str)
Если запустить приведенный выше пример, вы сначала увидите вывод типа данных двух наших переменных, а затем сообщение об ошибке. В данном случае, интерпретатор «не понял» что ему делать со значениями двух переменных, так как сложить число и строку не представляется возможным. Однако у Python есть решение для такого типа ситуаций, которое известно как явное преобразование.
Явное приведение типов
В явном преобразовании типов пользователи сами преобразуют тип данных объекта в требуемый тип данных. Мы используем предопределенные функции, такие как int(), float(), str() и т.д., чтобы выполнить явное преобразование типов.
Это преобразование типов также называется явным приведением типов, поскольку пользователь явно преобразует (изменяет) тип данных объектов.
Typecasting может быть выполнен путем назначения требуемой функции типа данных для выражения.
Пример 3: добавление строки и целого числа с использованием явного преобразования
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("тип данных num_sum:",type(num_sum))