Про кортежи и про файлы

Всем доброго времени суток, друзья. Данная статья соответствует 9 главе книги Марка Лутца «Изучаем Python». Глава завершает вторую часть книги «Типы и операции» и раскрывает основные понятия о том что такое кортеж, что такое файл, как их использовать и как применять. Знание принципов работы с файлами может помочь ответить на вопрос: «А собственно д…

1

Строки (подробнее) по Марку Лутцу

Всем доброго вечера, кто читает мои небольшие публикации. Сегодня я наконец-то перехожу освещать седьмую по счёту главу книги Марка Лутца «Изучаем Python». Данная статья посвящена глубокому анализу строк и методов работы с ними.

Строки (подробнее) по Марку Лутцу
1
+ str(DictData) + '\\n')","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4. Читаем файл\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"file = open('newfile.txt').read()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E5. Получаем результат\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EMisha\u003C/p\u003E\u003Cp\u003E21,22,34 \u003C/p\u003E\u003Cp\u003E['Python', 'Analysys', 'Talking']${'Weight': 60, 'Length': 170}\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь можно описывать функцию\u003Ci\u003E eval()\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003Eeval \u003C/i\u003E- это функция, которая используется как порция исполняемого кода. Предлагаю поработать над последней строкой файла\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Получаем последнюю строку"],"type":"OL"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"file = open('newfile.txt')\nrow = file.readline()\nrow = file.readline()\nrow = file.readline()\nprint(row) # ['Python', 'Analysys', 'Talking']${'Weight': 60, 'Length': 170}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2. Преобразуем последнюю строку в список\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"splittedRow = row.split(' ) # [\"['Python', 'Analysys', 'Talking']\", \"{'Weight': 60, 'Length': 170}\\n\"]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3. Преобразуем объекты в типы данных в Python. Тут следует обратить внимание на наличие квадратных или фигурных скобок. Иначе данные не правильно поймёт интерпретатор\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"part1 = eval(splittedRow[0])\ntype(part1) # \u003Cclass 'list'\u003E \npart2 = eval(splittedRow[1])\ntype(part2) # \u003Cclass 'dict'\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак видим у нас получился класс\u003Ci\u003E list()\u003C/i\u003E и \u003Ci\u003Edict()\u003C/i\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИспользование \u003Ci\u003Eeval()\u003C/i\u003E конечно хорошо знать в программировании, однако использовать данный метод нужно весьма ограниченно.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А на что нужно обратить внимание?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ первую очередь на безопасность. Если внутри этой функции вставится вредоносный код, то в случае его выполнения он может заразить компьютер, удалить много нужных файлов и так далее. И поэтому для разрешения этой задачи был разработан другой модуль.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"И какой же ?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E- pickle\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКак говорил Лутц\u003C/p\u003E"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EPickle является более развитым инструментом, который позволяет сохранить почти любой объект Python в файл напрямую, не требуя со стороны программиста каких-либо преобразований в и из строки. \u003C/p\u003E","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДавайте попробуем повторить сохранить уже рассмотренные данные через использование этого модуля.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EС прошлого примера у нас сохранилась такая строка.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"splittedRow = row.split(' ) # [\"['Python', 'Analysys', 'Talking']\", \"{'Weight': 60, 'Length': 170}\\n\"]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПопробуем применить этот метод к ней.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import pickle\nF = open('dataone.pkl', 'wb')\npickle.dump(splittedRow[0], F)\nF.close()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь получим эту строку.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"F = open('dataone.pkl', 'rb')\nE = pickle.load(F)\nprint(E) # ['Python', 'Analysys', 'Talking']","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВесьма предпочтительней использовать такой метод при сохранении данных типов в файл.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Кстати, в самом начале нашей темы вы упоминали ещё про модуль json. Можете рассказать о нём пару слов?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДа могу. Вообще JSON не настолько мощно поддерживает сохранение данных как модуль pickle. Вместе с тем он позволяет сохранить тип данных «словаря» в свой специфический формат. Здесь я уже не буду пошагово расписывать как в предыдущем примере, просто приведу код работы с этим модулем.\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Получаем данные"],"type":"OL"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"name = {'first': 'Misha', 'last': 'Ivashkin'}\nmyData = {'name': name, 'job' : ['barista', 'developer'], 'age': 26} \n# {'name': {'first': 'Misha', 'last': 'Ivashkin'}, 'job': ['barista', 'developer'], 'age': 26}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2. Сохраняем данные в JSON\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import json\njson.dumps(myData)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3. Загрузка из JSON:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"fromJSON = json.loads(toJSON) # {'name': {'first': 'Misha', 'last': 'Ivashkin'}, 'job': ['barista', 'developer'], 'age': 26}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4. Создание JSON файла:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"json.dump(myData, fp=open('mydata.json', 'w'), indent=3)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E5. А теперь выводим результат выполнения программы\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(open('mydata.json').read())","lang":""}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"cbd5d8f2-d676-5cf0-a0ec-f858e3a65a6f","width":807,"height":240,"size":30729,"type":"png","color":"414242","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А ещё существуют какие-либо файловые операции?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003Eеликое множество. Всё зависит от возможностей модуля, который вы используете для работы с файлами. Помимо рассмотренных Лутц выделяет как минимум 5 дополнительных средств\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Перенаправление в файлы стандартного потока данных ( модуль \u003Ci\u003Esys.stdout\u003C/i\u003E)","Дескрипторные файлы модуля\u003Ci\u003E os\u003C/i\u003E","Сокеты, контейнеры и очереди FIFO","Файлы с доступом по ключу с помощью модуля shelve","Потоки данных командной оболочки \u003Ci\u003Eos.popen\u003C/i\u003E , \u003Ci\u003Esubprocess.popen\u003C/i\u003E"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКто заинтересовался, рекомендую их подробно изучить самостоятельно. На этом мы заканчиваем обзор 2 части. Спасибо большое, что дочитали эту статью до конца.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДо новых встреч уже в третьей части :)\u003C/p\u003E"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":154,"hits":348,"reads":null,"online":0},"dateFavorite":0,"hitsCount":348,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/565565-pro-kortezhi-i-pro-faily","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1768344077,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1768344077,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":1}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":564618,"customUri":null,"subsiteId":1377277,"title":"Строки (подробнее) по Марку Лутцу","date":1671281209,"dateModified":1671281209,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВсем доброго вечера, кто читает мои небольшие публикации. Сегодня я наконец-то перехожу освещать седьмую по счёту главу книги Марка Лутца «Изучаем Python». Данная статья посвящена глубокому анализу строк и методов работы с ними.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"3a0ad995-3014-53df-a0f9-34f7e93c45fb","width":807,"height":318,"size":37698,"type":"png","color":"6e6e6e","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Итак, что же по сути является строкой с точки зрения Python?"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСтрока - это тип данных, представляющий упорядоченную коллекцию символов для хранения и текстовой и байтовой информации.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ Python строки обычно представлены с помощью одинарных кавычек (\u003Ci\u003E''\u003C/i\u003E), двойных кавычек ( \u003Ci\u003E'' ''\u003C/i\u003E), тройных кавычек (\u003Ci\u003E''' ''\u003C/i\u003E'). Строковый тип дынных представлен классом \u003Ci\u003Estr()\u003C/i\u003E\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nmyNewString = \"Misha\"\nmyNewNewString = \"\"\"Misha\"\"\"\nprint(myString, myNewString, myNewNewString) #Misha Misha Misha\nprint(type(myString), type(myNewString), type(myNewNewString)) # \u003Cclass 'str'\u003E \u003Cclass 'str'\u003E \u003Cclass 'str'\u003E","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМарк Лутц начинает введение в строковый тип данных с получение представления у читателя о кодировки информации. Вообще кодировок существует большое множество, однако наибольшей популярностью используются \u003Ci\u003EUnicode\u003C/i\u003E и \u003Ci\u003EASCII\u003C/i\u003E\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что вообще такое кодировки и как с ними работать?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПожалуй, не для кого не секрет, что элемент строки является символ. Например, буквы английского алфавита - это один набор символов, буквы русского алфавита - другой набор символов. То же самое можно сказать и про китайский, арабский и другие языки и компьютеру надо с ними работать. И поэтому для их обработки придумали специальную систему кодировки.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ своей книге Лутц останавливается на Unicode и ASCII.\u003C/p\u003E"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E«ASCII - это простая форма текста Unicode, но лишь одна из немногих кодировок алфавита»\u003C/p\u003E","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ Python содержится аж три строковых типа. Один из них я уже называл (\u003Ci\u003Estr\u003C/i\u003E, для текста), вместе с ним имеется \u003Ci\u003Ebytes\u003C/i\u003E(для двоичных данных), \u003Ci\u003Ebytearray\u003C/i\u003E (изменяемый вариант типа bytes).\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОтличие двух кодировок определяется шагом трансляции. Он необходим для получения данных из файлов. Практический пример использования кодировки можно встретить например в библиотеке \u003Cb\u003Epandas\u003C/b\u003E. Например, если при импорте данных из того же excel-файла не правильно указать кодировку, то вывод данных будет не читаемым для человека (пожалуй всем известен случай с «крокозябрами»).\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что предлагает автор знать на начальном этапе о строках?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Строки допускается использовать для представления всего что может восприниматься как текст или байты\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Строки - это инструмент высокого уровня. Они сопровождаются большим количеством методов их обработки.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Строки - неизменяемая последовательность и их значение не поддаётся каким-либо модификациям. Поэтому, чтобы модифицировать строку, необходимо создать новую строку на основе предыдущей.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Для сложной обработки строк можно пользоваться библиотекой re. Этой библиотеке посвящу публикацию отдельно. \u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EО том, что можно творить со строками можно узнать как из книги, так и из официальной документации. Для ознакомления со всеми методами можно пройти по следующей \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fdocs.python.org%2F3%2Flibrary%2Fstdtypes.html%3Fhighlight%3Dstr%23str&postId=564618\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Eссылке\u003C/a\u003E.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как ещё можно представить строки ( примеры)?"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(\"s\\tp\\na\\0\\m\") # Вывод - управляющие последовательности\n\ns\tp\na\nprint(r\"C:\\new\\test.spm\") # Вывод - неформатированные строки\nC:\\new\\test.spm\nprint(b'sp\\x01am') # Вывод - байтовые литералы\nb'sp\\x01am'\nprint(u'eggs\\u0020spam') # Вывод - литералы Unicode\neggs spam","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОднако самые распространённые случаи считаются представление строкового типа с помощью одинарных и двойных кавычек.\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EС точки зрения Python они почти ничем не отличаются друг от друга, поэтому прежде чем начать писать проект, вы договоритесь сами с собой какие кавычки вы будете использовать.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИ ещё примеры:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"'myString', 'myString2' #('myString', 'myString2')\n'Mikhail\"s', \"Allex's\" #('Mikhail\"s', \"Allex's\")\nmessage = \"I \" 'am' \" filling good\" # I am filling good\n'Mikhail\\'s', \"Allex\\\"s\" # (\"Mikhail's\", 'Allex\"s') Тут кавычка внедряется во внутрь строки","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ последней строки используются символы с обратной косой чертой (\\). Данный символ используется для изменения представления выводимой строки в интерпретаторе. Я достаточно часто использовал символ \\n на сайте CodeWars, однако вместе с ним есть и ряд других. Ниже представлю перечень.\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\\новая строка - Игнорируется (строка продолжения) \u003C/p\u003E\u003Cp\u003E*\\\\ - Обратная косая черта (сохраняет символ \\) \u003C/p\u003E\u003Cp\u003E*\\' - Одинарная кавычка (сохраняет ')\\'' - Двойная кавычка (сохраняет '')\u003C/p\u003E\u003Cp\u003E\\a - Звонок\u003C/p\u003E\u003Cp\u003E\\b - Забой\u003C/p\u003E\u003Cp\u003E\\f - Перевод страницы\u003C/p\u003E\u003Cp\u003E\\n - Новая строка \u003C/p\u003E\u003Cp\u003E*\\r - возврат коретки\u003C/p\u003E\u003Cp\u003E\\t - горизонтальная табуляция\u003C/p\u003E\u003Cp\u003E\\v - вертикальная табуляция\u003C/p\u003E\u003Cp\u003E\\xhh - шестнадцатиричный символ\u003C/p\u003E\u003Cp\u003E\\ooo - символ с восьмиричным значением\u003C/p\u003E\u003Cp\u003E\\O - пустой двоичный символ (не конец строки)\u003C/p\u003E\u003Cp\u003E\\N{идентификатор} - Идентификатор Unicode\u003C/p\u003E\u003Cp\u003E\\uhhhh - Символ Unicode c 16-битным шестнадцатиричным значением\u003C/p\u003E\u003Cp\u003E\\Uhhhhhhh - Символ Unicode с 32-битным шестнадцатеричным значением\u003C/p\u003E\u003Cp\u003E\u003Cbr /\u003E\u003C/p\u003E\u003Cp\u003E* Используются в программировании достаточно часто\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСтоить также указать, что функция \u003Ci\u003Elen()\u003C/i\u003E , отвечающая за вывод количество символов НЕ учитывает вышеописанные специфические значения.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"newString = 'T\\nis\\t is \\n\\aspam'\nstrng = 'This is is spam'\nprint(len(newString), len(strng)) # 15 15","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EТакое поведения программы обязательно следует учитывать при проектировании приложения.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗамечание\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСуществуют примеры, когда ввод специальных символов вызывает затруднение. Например, они могут возникнуть, когда путь файла содержит символы, которые не следует считать как символы. Тогда для решения подобной задачи может помочь флаг r. Вот пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myFilePath = '\\new\\text.dat'\nprint(myFilePath) # ew\text.dat\nprint(len(myFilePath)) #11","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСовсем не то, что я хотел вывести. Я ожидал, что вызов print() выведет мне полный путь файла. Поэтому, чтобы это исправить, немного модифицируем код вот так:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myFilePath = r'\\new\\text.dat'\nprint(myFilePath) #\\new\\text.dat\nprint(len(myFilePath)) #13","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМы всего лишь добавили флаг \u003Ci\u003Er\u003C/i\u003E к \u003Ci\u003E'\\new\\text.dat' \u003C/i\u003Eи у нас получилась требуемая строка.\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОбратите внимание на это правило!\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Тройные кавычки"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EГоворя простым языком, если двойные кавычки от одинарных практически ничем не отличаются, то с помощью тройных может описываться документирование кода. В тройных кавычках уже могут автоматически содержаться специфические символы, даже если формально они не встречаются в тексе. Вот пример:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"life = \"\"\"\nThe\nbest\nday\nof\nmy life\n\"\"\"\nlife # '\\nThe\\nbest\\nday\\nof\\nmy life\\n\\n' \nprint(life) \n# Однако:\n#The\n#best\n#day\n#of\n#my life","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EС помощью тройных кавычек можно:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Выделять код\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Документировать программу\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Описывать состояние ошибок\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОднако на практике, чем меньше мы используем документирование в программе тем лучше. Сейчас будет отсылка на мою статью на хабре: \u003Ca href=\"https://vk.com/away.php?to=https%3A%2F%2Fhabr.com%2Fru%2Fpost%2F683956%2F&cc_key=\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://habr.com/ru/post/683956/\u003C/a\u003E\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что умеют строки в Python? Базовые операции"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Считать длину\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nprint(myString) # Misha\nprint(len(myString)) #5","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Конкатенация:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nsecondString = ' Ivashkin'\nprint(myString+secondString) # Misha Ivashkin","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Повторение\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nsecondString = ' Ivashkin '\nprint((myString+secondString) * 4) # Misha Ivashkin Misha Ivashkin Misha Ivashkin Misha Ivashkin","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Индексация:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myString = 'Misha'\nsecondString = ' Ivashkin '\ninitials = myString+secondString\nprint(initials[0:5]) # Misha","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИндексация - это способ извлечения информации согласно номеру символа. Номер символа начинается с 0. Я не буду подробно останавливаться на этом, просто имейте ввиду, что она существует.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EА теперь внимание!\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Очень частая ошибка:"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = '34'\nprint(a+2) # TypeError: can only concatenate str (not \"int\") to str","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПочему так? На самом деле всё просто: у нас переменная a хоть и принимает значение 34, но она обёрнута в кавычки, поэтому интерпретатор распознаёт её как строку. А Python не позволяет складывать строку с числом.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧтобы исправить, надо представить переменную в целочисленный тип данных\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = '34'\nprint(int(a)+2) # 36","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Преобразования кодов символов"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНе смотря на то, что Лутц описывает это неявно, но существует представление о том, что каждый символ представляется определённым кодом. Он соответствует кодировке ASCII. По таблице видно, что каждое значение соответствует своему шестнадцатиричному и десятичному значению.\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"441ea730-3948-5dae-8a44-1583cca6aaee","width":807,"height":534,"size":368726,"type":"png","color":"dcdde3","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EДля их преобразования существуют методы \u003Ci\u003Eord()\u003C/i\u003E и \u003Ci\u003Echr()\u003C/i\u003E . Для понимания кодировки Лутц предлагает написать следующий код:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"S = '5'\nchrS = ord(S) \nprint(chrS) # 53","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕсли мы проверим решение на предмет соответствия с таблицей, то мы обнаружим, что действительно символ 5 соответствует числу 53. Python допускает операции с преобразованными значениями. Но, обратите внимание, только с числами закодированных символов.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как можно изменять строку?"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПоскольку нам известно о том, что строка является неизменяемым типом данных, а менять строку всё равно нужно, то чтобы это исправить существует три основных способа: конкатенация, замена символа и форматирование. Ниже привожу примеры\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Конкатенация\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"s = 'spam'\nprint(s+'SPAM!') # spamSPAM!\ns = 'spam'\nprint(s[:4]+'SPAM!'+ s[4:]) # spamSPAM!","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Замена символов\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"s = 'splot'\ns = s.replace('pl', 'pamal')\nprint(s) # spamalot","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Форматирование\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EA.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a='This is %d %s bird!' % (1, 'dead')\nprint(a) # This is 1 dead bird!","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EБ.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a='This is {0} {1} bird!'.format(1 , 'dead')\nprint(a) # This is 1 dead bird!","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМетоды, представленные в статье являются базовыми, однако их недостаточно для того, чтобы понять всё многообразие работы со строками. Для того, чтобы полностью увидеть картину можно заглянуть в документацию. Ссылку по строкам я уже сюда приводил, поэтому чтобы вы не забыли, продублирую её заново ( \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fvk.com%2Faway.php%3Fto%3Dhttps%253A%252F%252Fdocs.python.org%252F3%252Flibrary%252Fstdtypes.html%253Fhighlight%253Dstr%2523str%26cc_key%3D&postId=564618\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Ehttps://docs.python.org/3/library/stdtypes.html?highlight=str#str\u003C/a\u003E ). Настоятельно рекомендую потренироваться над изменением и способам проверки строк. Помните, что программирование - это больше про практику.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А теперь подробней про форматирование"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EФорматирование строк - способ, позволяющий выполнять множество подстановок, специфических для типов за единственный шаг. \u003C/p\u003E","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EНа сегодняшний день существует три способа форматирования текста, однако Лутц выделяет только два (очень сказывается время, когда впервые была выпущена эта книга). Пример использования f-строки я раскрывать не стану. Скажу лишь, что он сейчас наиболее популярный и часто используется в программировании.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EШаблон форматирования определяется с помощью базового шаблона\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E'….%s….' % (значение) - старый приём\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003E'….{}…..'.format(значение) - новый приём\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЭти два приёма необходимо знать вместе, поскольку в первый случай наиболее предпочтительней использовать, когда заходит речь о вставке данных в реляционную базу данных.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПара примеров:\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"exclamation = 'Ni!'\nprint('The knights who say %s!' % exclamation) # The knights who say Ni!!\nmessage = '%d %s %g you' % (1, 'spam', 4.0)\nprint(message) # 1 spam 4 you\nmessageNew = '%s -- %s -- %s' % (42, 3.14159, [1,2,3])\nprint(messageNew) # 42 -- 3.14159 -- [1, 2, 3]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EИнтерпретация и результаты:\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧто такое % ? - ожидает в правой стороне либо одиночный элемент, либо кортеж из одного и более элементов.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧто такое\u003Ci\u003E %d,\u003C/i\u003E \u003Ci\u003E%s \u003C/i\u003E? - это специальный код, описывающий вставляемые данные. Ниже представлен список из этих элементов\u003C/p\u003E"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003Es - строка (или строка str(x) любого объекта)\u003C/p\u003E\u003Cp\u003E*r - То же, что и s, но применяется как repr, а не strc - символ (int или str)\u003C/p\u003E\u003Cp\u003Ed - десятичное число (целое число с основанием 10)\u003C/p\u003E\u003Cp\u003E*i - целое числоo - восьмиричное целое число\u003C/p\u003E\u003Cp\u003Ex - Шестнадцатиричное целое число\u003C/p\u003E\u003Cp\u003EX - то же самое, что и в верхнем регистреe - число с плавающей точкой со степенью в нижнем регистре\u003C/p\u003E\u003Cp\u003EE - то же, что и e, но в верхнем регистре\u003C/p\u003E\u003Cp\u003Ef - десятичное число с плавающей точкой\u003C/p\u003E\u003Cp\u003E*F -то же, что и f, но в верхнем регистре\u003C/p\u003E\u003Cp\u003E*g - число с плавающей точкой e или f\u003C/p\u003E\u003Cp\u003EG - Число с плавающей точкой E или F\u003C/p\u003E\u003Cp\u003E* - на мой взгляд часто используемые символы вставки\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕсли знать, когда применять кодировку, можно легко подобрать нужный текст, главное запомнить какой код за что отвечает\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"number = 1234\nmessage = 'integers: ...%d...%-6d...%06d' % (number, number, number)\nprint(message) # integers: ...1234...1234 ...001234","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EОбратите внимание на \u003Ci\u003E%06d\u003C/i\u003E в строке. По сути данный формат строки означает, что выводимое число должно содержать 6 целых чисел. Если мы посчитаем количество цифр в 001234, то как раз получим тот же самый ответ.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003E%-6d\u003C/i\u003E отвечает за выделенное пространство под число. Если количество чисел меньше, чем область, то он добавляет к ней знаки пробелов\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = 1.23456789\nprint(x)\nx = 1.23456789\nmessage = '%e | %f | %g' % (x,x,x)\nprint(message) # 1.234568e+00 | 1.234568 | 1.23457\nmessage2 = '%-6.2f | %05.2f | %+06.1f' % (x,x,x)","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Форматирование на словаре"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСтоит иметь ввиду, что форматирование строк сильно отличается от форматирования словаря. Для того, чтобы отформатировать данные через словарь Лутц приводит следующий пример.\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"reply = \"\"\"\nGreetings...\nHello %(name)s!\nYour age is %(age)s\n\"\"\"\nvalues = {'name': 'Misha', 'age':23}\nprint(reply %values)","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВажно: форматирование через словарь очень часто пригождается в работе с базами данных, поэтому настоятельно рекомендую потренироваться в использовании словарей при форматировании текста.\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Форматирование через метод format()"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EМетод format() базируется на обычном синтаксисе вызова функции, а не выражении. \u003C/p\u003E","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЯ не буду вдаваться здесь в теорию. Сразу перейду к практике\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"template = '{0}, {1} and {2}'\ntemplate.format('spam', 'ham', 'eggs') #'spam, ham and eggs'\nnewTemplate = '{motto}, {pork} and {food}'\nnewTemplate.format(motto = 'spam', pork = 'ham', food='eggs') #'spam, ham and eggs'","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Для словарей:"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"template = '%(motto)s, %(pork)s and %(food)s'\ntemplate % dict(motto='spam', pork='ham', food = 'eggs') #'spam, ham and eggs'","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Более сложные методы форматирования:"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import sys\n'My {1[kind]} runs {0.platform}'.format(sys, {'kind': 'laptop'}) #'My laptop runs win32'","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ последнем примере используется индексация (позиция метода форматирования. Применяя ключи словаря и метод библиотеки sys получаем заветное слово:)\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"'My {map[kind]} runs {sys.platform}'.format(sys=sys, map = {'kind': 'laptop'}) #'My laptop runs win32'","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЗдесь показывается пример, аналогичный предыдущему, единственное, что бы я сделал - это поменял название словаря, уж очень он идентичен зарезервированному слову map ( смотрите \u003Ca href=\"https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fdocs.python.org%2F3%2Flibrary%2Ffunctions.html&postId=564618\" rel=\"nofollow noreferrer noopener\" target=\"_blank\"\u003Eдоку\u003C/a\u003E )\u003C/p\u003E"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myList = 'MyNewValue'\n'first = {0[0]}, third = {0[2]}'.format(myList) #'forst = M, third = N","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЕсть ещё более специфические методы форматирования, но для собеседования, думаю, достаточно знать базовые\u003C/p\u003E"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"В заключении статьи опишу какие преимущества видит автор, применяя метод format"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E1) Располагает некоторыми дополнительными возможностями, отсутствующими в самом выражении\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E2) Обладает гибким синтаксисом ссылки на чтение\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E3) Может делать ссылки на значения более явными\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E4) Обменивает операцию на более значащее имя метода\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E5) Не допускает разного синтаксиса для одиночных и множественных значений\u003C/p\u003E"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"5420ae1c-e63f-5309-a18f-a39866ad3333","width":807,"height":538,"size":182739,"type":"png","color":"751817","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВ заключении могу сказать, что это не всё, что отразил в своей книге Лутц. В статье представлена только базовая и основная выжимка. Статья не раскрывает специфичные случаи использования строк, но может дать базовое представление о том, что это такое и как оно работает. Благодарю за внимание и до новой статьи!\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВсе статьи по книге собраны в отдельном сообществе на vc: \u003C/p\u003E"}},{"type":"link","cover":false,"hidden":false,"anchor":"","data":{"link":{"type":"link","data":{"url":"https://vc.ru/s/1378283-python-chitaem-marka-lutca","title":"Python Читаем Марка Лутца — Cообщество на vc.ru","description":"Всем привет! Представляю Вашему вниманию переработанное содержание учебника \"Изучаем Python\" Марка Лутца.","image":{"type":"image","data":{"uuid":"https://leonardo.osnova.io/ico/vc.ru","width":0,"height":0,"size":0,"type":"jpg","color":"","hash":"","external_service":[]}},"v":1,"hostname":"vc.ru"}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EКому интересно развитие проекта, могут поддержать донатами.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EСпасибо за прочтение!\u003C/p\u003E"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":67,"hits":702,"reads":null,"online":0},"dateFavorite":0,"hitsCount":702,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":false,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/id1377277/564618-stroki-podrobnee-po-marku-lutcu","author":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1768344077,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":1377277,"name":"Михаил Ивашкин","nickname":null,"description":"Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель","uri":"","avatar":{"type":"image","data":{"uuid":"94ed1f5f-db4c-5ad8-a853-a80ed724e39b","width":746,"height":750,"size":214036,"type":"png","color":"baad9c","hash":"","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"6e7f689d-c8ed-5dbd-a5ef-c4f05a497647","width":1599,"height":899,"size":74300,"type":"jpg","color":"847669","hash":"","external_service":[]}},"cover_y":0},"achievements":[{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 13 декабря 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":6250656,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/6250656"},{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4075457,"userId":1377277,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4075457"}],"lastModificationDate":1768344077,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"reactions":{"counters":[{"id":1,"count":1}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}}],"ogTitle":null,"ogDescription":null,"isAnonymized":true}};