Михаил Ивашкин

+118
с 2022

Немного программист (хобби) Немного предприниматель (есть небольшой бизнес) Немного учёный (аспирант, младший научный сотрудник) Немного преподаватель

2 подписчика
1 подписка

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

1

Данная статья имеет очень важное значение. Она особенно важна тем, что списки и словари являются важнейшими типами данных, которые используются в веб-программировании, анализе данных, парсинге сайтов и других решений на Python.

Друзья, кто меня читает, прошу обратить на эту тему особое внимание. Так что Attention!

1

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

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

Друзья, всем привет. Продолжаю медитировать над книгой «Изучаем Python». Сегодня речь зайдёт про сущность динамической типизации. Эта статья будет иметь более теоритическое, ежели практическое значение, однако этот вопрос может легко попасться на собеседовании. Поэтому читаем, вникаем и думаем

Итак какова сущность динамической типизации?

                                                                           Узнаёте циферки?)

Доброго, прекрасного, сказочного времени суток, семья моя :) Пришло время углубляться… И искать крупицы в стоге сена, которые углубят моё представление о языке Python.

Всем здравствуйте, друзья. Сегодня я продолжу рассказывать про обучение программированию на Python.

Должен сразу предупредить, что у меня был уже достаточно наработанные навыки по программированию на этом языке. Сейчас они ограничиваются знанием нескольких сторонних библиотек (на подобие Pandas, Numpy, Flask) и практикой решения задач на Code…

2

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

И прежде чем начать говорить о нас с вами, предлагаю обратить внимание на эти две картин…

1

Привет, vc! Это моя первая публикация на этом ресурсе и вот недавно созрел один существенный повод поразмышлять над проблемой предпринимательства в России.

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

1
+ str(DictData) + '\\n')","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4. Читаем файл

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"file = open('newfile.txt').read()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

5. Получаем результат

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Misha

21,22,34

['Python', 'Analysys', 'Talking']${'Weight': 60, 'Length': 170}

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь можно описывать функцию eval()

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

eval - это функция, которая используется как порция исполняемого кода. Предлагаю поработать над последней строкой файла

"}},{"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":"

2. Преобразуем последнюю строку в список

"}},{"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":"

3. Преобразуем объекты в типы данных в Python. Тут следует обратить внимание на наличие квадратных или фигурных скобок. Иначе данные не правильно поймёт интерпретатор

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"part1 = eval(splittedRow[0])\ntype(part1) # \npart2 = eval(splittedRow[1])\ntype(part2) # ","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как видим у нас получился класс list() и dict()

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Использование eval() конечно хорошо знать в программировании, однако использовать данный метод нужно весьма ограниченно.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А на что нужно обратить внимание?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"И какой же ?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

- pickle

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как говорил Лутц

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Pickle является более развитым инструментом, который позволяет сохранить почти любой объект Python в файл напрямую, не требуя со стороны программиста каких-либо преобразований в и из строки.

","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте попробуем повторить сохранить уже рассмотренные данные через использование этого модуля.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

С прошлого примера у нас сохранилась такая строка.

"}},{"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":"

Попробуем применить этот метод к ней.

"}},{"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":"

А теперь получим эту строку.

"}},{"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":"

Весьма предпочтительней использовать такой метод при сохранении данных типов в файл.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Кстати, в самом начале нашей темы вы упоминали ещё про модуль json. Можете рассказать о нём пару слов?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Да могу. Вообще JSON не настолько мощно поддерживает сохранение данных как модуль pickle. Вместе с тем он позволяет сохранить тип данных «словаря» в свой специфический формат. Здесь я уже не буду пошагово расписывать как в предыдущем примере, просто приведу код работы с этим модулем.

"}},{"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":"

2. Сохраняем данные в JSON

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import json\njson.dumps(myData)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3. Загрузка из JSON:

"}},{"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":"

4. Создание JSON файла:

"}},{"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":"

5. А теперь выводим результат выполнения программы

"}},{"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":"

еликое множество. Всё зависит от возможностей модуля, который вы используете для работы с файлами. Помимо рассмотренных Лутц выделяет как минимум 5 дополнительных средств

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Перенаправление в файлы стандартного потока данных ( модуль sys.stdout)","Дескрипторные файлы модуля os","Сокеты, контейнеры и очереди FIFO","Файлы с доступом по ключу с помощью модуля shelve","Потоки данных командной оболочки os.popen , subprocess.popen"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Кто заинтересовался, рекомендую их подробно изучить самостоятельно. На этом мы заканчиваем обзор 2 части. Спасибо большое, что дочитали эту статью до конца.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

До новых встреч уже в третьей части :)

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":154,"hits":347,"reads":null,"online":0},"dateFavorite":0,"hitsCount":347,"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":"Год на 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":1764925872,"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":"Год на 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":1764925872,"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":564927,"customUri":null,"subsiteId":1377277,"title":"Списки и словари по Марку Лутцу","date":1671352646,"dateModified":1671352646,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Данная статья имеет очень важное значение. Она особенно важна тем, что списки и словари являются важнейшими типами данных, которые используются в веб-программировании, анализе данных, парсинге сайтов и других решений на Python.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Друзья, кто меня читает, прошу обратить на эту тему особое внимание. Так что Attention!

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c7d69271-e342-52f0-8f0f-041de8f9cfed","width":590,"height":343,"size":97900,"type":"png","color":"dbdbdb","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что важно знать про списки?"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Списки - это коллекция значений

","subline1":"М. Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myBirthList = ['Vasya', 'Masha', 'Bob', 'Sam'] # cписок с именами\nages = [17, 20, 23, 24] # возраст ( обратите внимание, тут кавычек нет)\nagesBirthList = ['Vasya', 'Masha', 'Bob', 'Sam', [17, 20, 23, 24]] # возраст+ имена","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Последнее представление данных считается не совсем верным с точки зрения логики. В нём демонстрируется только возможности списков.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Какими характеристиками обладает список?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Упорядоченная коллекция произвольных объектов. ( Список - место накопления других объектов)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Поддерживают доступ по смещению (вспоминаем индексацию).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) Это изменяемая последовательность ( подтверждается, что списки - это изменяемые последовательности)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

5) Список - характеристика массива ссылок на объекты ( в случае присваивания объект сохраняет ссылку на тот же самый объект, а не его копию).

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Какие ещё существуют списковые операции?"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"fruit = list('apple') # ['a', 'p', 'p', 'l', 'e']\nnumbers = list(range(3,10)) # [3, 4, 5, 6, 7, 8, 9] \nOneNumberFromListNumbers = numbers[3] # 6\nSliceNumbers = numbers[1:5] # [4, 5, 6, 7]\nprint(len(numbers)) # количество элементов в списке\nnewListNumbers = numbers+SliceNumbers # [3, 4, 5, 6, 7, 8, 9, 4, 5, 6, 7] конкатинация\notherList = OneNumberFromListNumbers*SliceNumbers # ещё один пример конкатинации\nfor i in numbers: print(i) # списки поддерживают итерацию\nnumbers.append(1000) # единичная вставка\nprint(numbers) # [3, 4, 5, 6, 7, 8, 9, 1000]\nnumbers.extend([10000, 20000, 30000]) # [3, 4, 5, 6, 7, 8, 9, 1000, 10000, 20000, 30000] множественная вставка\nnumbers.insert(0, 20)\nprint(numbers) # [20, 3, 4, 5, 6, 7, 8, 9, 1000, 10000, 20000, 30000]\nprint(numbers.count(1000)) # подсчёт количество элементов в списке","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"fruit = list('apple') \nprint(fruit) # ['a', 'p', 'p', 'l', 'e']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Более подробно о том, какие операции выполняют списки можно найти в официальной документации Python. Для работы со списками можно пройти по следующей. Если не понятна официальная документация, то альтернативным источником может являться другая ссылка .Также не забываем про справку dir() или help()

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Какие могут быть сложные случаи?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) List Comprehention

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сложным случаем использования списком является list comprehention. Дословного перевода на русский язык я не нашёл, поэтому оставляю тут английский вариант.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"rangeList = [i for i in range(2,5)] # [2, 3, 4]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Суть данного примера состоит в том, что мы используем вложенный цикл for внутри списка. Такая форма записи эквивалентна следующему коду:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"rangeList = [] \nfor i in range(2,5):\n rangeList.append(i)\nprint(rangeList) # [2, 3, 4]","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

То есть первый случай является сжатой формой второго случая. Однако на начальных этапах я рекомендую пользоваться вторым, он более понятный или читабельный.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Использование map()

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Про служебное слово map() можно прочитать из официальной документации. Формально оно необходимо для изменения данных в списке без объявления специального цикла for. Ниже приведу пример.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Например, вот дан нам список со значениями:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myList = [-2, 3, 4, 5, 7, -20]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И нам дали такое задание: заменить отрицательные значения на положительные. Недолго думая, я решил применить модуль к каждому символу через функцию map()

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"answer = list(map(abs, myList))\nprint(answer) # [2, 3, 4, 5, 7, 20]","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Обязательно следует принять во внимание, что перед вызовом map необходимо объявлять ожидаемый тип данных, в противном случае интерпретатор не сможет вывести нужные значения.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"myList = [-2, 3, 4, 5, 7, -20]\nanswer = map(abs, myList)\nprint(answer) # ","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Индексация, нарезание и массивы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В Python не существует такого понятия как массивы, поэтому список может определяться как список, а может как массив. Для того, чтобы написать массив, необходимо вложить во вложенный список другой список. В качестве значений списка массива определяются числа. В общем виде массив определяется вот так.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"array = [\n [10, 11 ,12],\n [13, 14, 15],\n [16,17,18 ]\n]\nprint(array[0]) # Первая строка\nprint(array[0][2]) #Третье число первой строки\nprint(array[-1]) #Третья строка","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Изменение значений в списке на месте"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В начале главы было сказано, что значения в списках в Python можно изменять. Давайте продемонстрирую это на примере. Допустим у нас есть следующий список

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"FruitList = ['banana', 'apple', 'potatoes']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

При анализе списка мы заметили, что список долен содержать фрукты, однако в данных допущена ошибка 'potatoes' (картофель). Давайте заменим картофель на ананас.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"FruitList[2]= 'pineapple'\nprint(FruitList) # ['banana', 'apple', 'pineapple']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Таким образом мы заменили картофель на ананас. Также можно изменять и добавлять данные через срезы.

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Попробуйте применить замену значений в списках к числам. Рекомендую думать над тем, что вы ожидаете получить и что получаете. И потом сравнивайте получаемое значение с ожидаемым. Если ответы сходятся, значит индексация стала более-менее понятна.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Немного про сортировку"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

У списка есть один очень замечательный метод, который очень часто спрашивают на собеседованиях. Называется sort()

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вопрос из собеседования:

Чем отличается list.sort() от sorted?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ответ: метод sort() позволяет отсортировать значения списка на месте, а для Sorted(list) требуется выделять отдельную переменную.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте потренируемся.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Пример - сортировка без аргументов

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nlistnames.sort()\nprint(listnames) # ['Alexandr', 'Alexandra', 'Alexei', 'Masha', 'Misha']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Пример - сортировка с аргументами

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listWords = ['AbC', 'ABC', 'ABc', 'aBc', 'abc']\nlistWords.sort(key=str.lower) # Сортировка по нижнему регистру\nprint(listWords) # ['AbC', 'ABc', 'aBc', 'abc', 'ABC']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Пример сортировка с помощью sorted()

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nsortedNames = sorted(listnames)\nprint(sortedNames) # ['Alexandr', 'Alexandra', 'Alexei', 'Masha', 'Misha']","lang":""}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nSortedNames = listnames.sort()\nprint(SortedNames) #None","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Немного про удаление"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В списках можно как добавлять значения, так и удалять. За удаление отвечает методы: pop() , remove() и служебный оператор del

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Пример pop()

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Метод pop() удаляет значения исходя из его индекса и возвращает в консоль удалённое слово.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nlistnames.pop(0) # Удаление и возврат элемента (вернёт 'Misha')\nprint(listnames) # ['Alexandr', 'Alexandra', 'Masha', 'Alexei']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Пример remove()

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Метод remove() удаляет значение по заранее заданному значению в качестве аргумента, только здесь он НЕ возвращает полученное значение. Всё тот же пример с именами :)

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\nlistnames.remove('Alexandr')\nprint(listnames) # ['Misha', 'Alexandra', 'Masha', 'Alexei']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Пример del

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Del является уже служебным словом и допускает удаление значения по его индексу.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"listnames = ['Misha', 'Alexandr', 'Alexandra', 'Masha', 'Alexei']\ndel listnames[0]\nprint(listnames) # ['Alexandr', 'Alexandra', 'Masha', 'Alexei']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Теперь со списками я закончил и перехожу к словарям.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что важно знать про словари?"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Словарь - неупорядоченная коллекция, которая отличается от списка тем, что элементы сохраняются и извлекаются по ключу, а не по позиционному смещению.

","subline1":"М. Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"RussianEnglishDictionary = {'яблоко': 'apple', 'идти': 'to come', 'язык':'language'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Этих слов можно добавлять бесконечно много. А теперь как можно найти перевод слова по значению? Предлагаю это реализовать.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"RussianEnglishDictionary = {'яблоко': 'apple', 'идти': 'to come', 'язык':'language'}\nprint(RussianEnglishDictionary['яблоко']) # apple","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Думаю, ассоциация может помочь понять и разобраться лучше в понимании о словарях.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Какие характеристики выделил М.Лутц по отношению к словарям?"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Они поддерживают доступ по ключу, а не смещению. Я впервые увидел что словари могут также называть ассоциативными массивами или хешами","Они являются неупорядоченными коллекциями произвольных объектов. Элементы в словаре не поддерживают определённый порядок","Они имеют переменную длину, разнородны т допускают глубокое вхождение. (аналогию со списками не видите?)"],"type":"UL"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Они относятся к категории изменяемые отображения. Словари в Python называют единственным инструментом, которым свойственно отображение. Их разрешено менять на месте, выполняя присваивания по индексам, они не поддерживают операции над последовательностями, которые работают на строках и списках"],"type":"UL"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Они представляют таблицы ссылок на объекты. Словари - неупорядоченные таблицы ссылок на объекты."],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как иначе можно реализовывать словари?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Пример. Через словарь в словаре

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"PersonalDataDict = {'person' : {'firstname': 'Misha', 'lastname': 'Ivashkin'}} #{'person': {'firstname': 'Misha', 'lastname': 'Ivashkin'}}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Через вывод служебного слова dict()

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"PersonalDataDict = dict(firstname = 'Misha', lastname = 'Ivashkin') # {'firstname': 'Misha', 'lastname': 'Ivashkin'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Через служебное слово zip()

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"keysList = ['firsname', 'lastname']\nvaluesList = ['Misha', 'Ivashkin']\nPersonalData = dict(zip(keysList, valuesList)) # {'firsname': 'Misha', 'lastname': 'Ivashkin'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Все методы по работе со словарями можно получить по следующей ссылке.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как работать со словарями?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1 Пример. Изменение словарей на месте.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Допустим, у нас есть словарь, отображающий количество овощей и фруктов в корзине.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"ItemsDict = {'potatoes': 2, 'kiwi': 3, 'tomatoes': 4}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте поменяем, количество помидор на список из 3 значений (допустим у нас их несколько видов:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"ItemsDict['tomatoes'] = [1,1,2]\nprint(ItemsDict) # {'potatoes': 2, 'kiwi': 3, 'tomatoes': [1, 1, 2]}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Таким образом получается, что в словарь можно вставлять список.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2 Пример. авайте удалим картофель из словаря ( например, мы его написали ошибочно)

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"del ItemsDict['potatoes']\nprint(ItemsDict) # {'kiwi': 3, 'tomatoes': [1, 1, 2]}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3 Пример. А что, если я захочу добавить морковь? Да проще простого!

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"ItemsDict['carrots'] = 6\nprint(ItemsDict) # {'potatoes': 2, 'kiwi': 3, 'tomatoes': [1, 1, 2], 'carrots': 6}","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

А вот с методами предлагаю попробовать поиграться самостоятельно. Тем более большая их часть повторяет списки с некоторыми дополнениями вроде dict.get(), dict.values(), dict.keys()

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Немного про сложные случаи"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В ряде случаев словари работают точно также как и списки. Они также могут поддерживать встроенные map() и list comprehention

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Приведу сложные сложных случаев на примере из следующего отображения

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"DateOfBirth = {\n 'Misha': 1996,\n 'Masha' : 2000,\n 'Oleg' : 2002\n}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1 Пример. Отображение списка из значений

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(DateOfBirth.items()) # dict_items([('Misha', 1996), ('Masha', 2000), ('Oleg', 2002)])","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2 Пример. ListComprehention

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"K = 'Oleg'\nV = DateOfBirth[K]\nprint([key for key in DateOfBirth.keys() if DateOfBirth[key]==V]) #Oleg для ключа\nprint([key for (key, value) in DateOfBirth.items() if value==V]) # Oleg аналогичный вывод","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В последнем случае применение цикла выглядит немного интересней. В первом случае мы используем только ключ в цикле, а во втором и ключ и значение. Когда мы их используем совместно, необходимо объединить их скобками. Лично я не привык писать цикл для словарей в одну строчку, но считаю такой подход очень полезным навыком.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Есть какие-то замечания, когда мы используем словари?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Конечно есть! Лутц, например, выделяет три основных замечания.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Присваивание по индексам добавляет элементы. Помните пример с морковкой?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Ключи не обязаны быть строками. Это да, они могут являться и строками и числами (это как минимум), а как максимум не знаю даже что сказать.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Number = {}\nNumber[99] = 'ninety nine'\nprint(Number) # {99: 'ninety nine'}","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Любопытный пример использования словаря, который я вычитал у Лутца"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Оказывается в качестве ключа могут выступать как единичные значения, так и множественные. И тут в голову приходит нахождение точки по заданным координатам. Смотрите какая красота. Не уверен конечно, что данный шаблон часто применяется, но это выглядит довольно-любопытно по крайней мере.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Point = {}\nPoint[(1,2,3)]='A'\nprint(Point) # {(1, 2, 3): 'A'} Координаты 1,2,3 имеет точка А","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Вы что-то говорили про существование вложенных словарей. Можно подробней на них остановиться?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Даже нужно. Поскольку вложенные словари служат даже примером вывода данных в формате JSON (о нём поговорим в другой статье). Поэтому, чтобы понять как работает словарь Лутц предлагает его создать.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Предлагаю немного поменять его пример на наш.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"MyData = {}\nMyData['name'] = 'Misha'\nMyData['age'] = 26.3\nMyData['skills'] = ['entrepreneur', 'young scientist']\nMyData['home'] = {'country': 'Russia', 'city': 'Yekaterinburg'}\nprint(MyData) #{'name': 'Misha', 'age': 26.3, 'skills': ['entrepreneur', 'young scientist'], 'home': {'country': 'Russia', 'city': 'Yekaterinburg'}}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Словарь может сказать обо мне (да и о вас всё). Кстати такой формат словаря может вполне соответствовать боевым данным.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Вы что-то писали, что существует очень много способов создания словаря. А какой из них удобный?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Каждый способ удобен по-своему. Давайте через примеры пойдём.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример 1

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"{'name': 'Misha', 'lastname': 'Ivashkin'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Удобен, когда мы можем составить словарь заранее

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример 2.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"MyData = {}\nMyData['name'] ='Misha'\nMyData['lastname'] = 'Ivashkin'","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Применяется, когда словарь создаётся на лету. Как правило такой формат объявляется перед применением цикла for, ну или как в моём случае

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример 3.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"dict(name = 'Misha', lastname = 'Ivashkin')","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Основное требование третьего примера - необходимость, чтобы все ключи являлись строками

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример 4.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"dict([('firsname', 'lastname'), ('Misha', 'Ivashkin')])","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Используется когда необходимо накапливать ключи и значения

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Лично я часто использую шаблоны первого и второго примера

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Это всё интересно, конечно. Но где-то я уже подобный символ встречал у вас в статьях. Можете напомнить где?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Конечно могу, словарь очень похож на множества. Но это не совсем так. Например ключи (keys) подобны множествам и поддерживают операции над множествами (пересечения и объединение). А метод (values) не подобны множествам. Однако items() (совместная пара ключ-значение) являются подобными, если пары (ключ/значения) уникальны и хешируемые.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Трудно конечно в этом разобраться, читая текст. Давайте лучше на примерах.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пример.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте поиграемся вот с этими данными

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"MyDict = {'FirstValue': 1, 'SecondValue': 2, 'ThirdValue': 3}\nMyKey = MyDict.keys()\nMyValue = MyDict.values() #dict_keys(['FirstValue', 'SecondValue', 'ThirdValue']) dict_values([1, 2, 3])\nMyKey | {'FourthValue': 4} # множества поддерживают логический оператор \"или\"\nMyValue | {'FourthValue': 4} # А вот тут ошибка типа\nMyDict.keys() | MyDict.keys() # {'SecondValue', 'FirstValue', 'ThirdValue'}\nMyDict.keys() & {'FirstValue'} # {'FirstValue'}\nMyDict.items() | MyDict.keys() # Объединение items() и keys()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В общем я не знаю, как это использовать на практике, но тот факт, что словари поддерживают работу со множествами вызывал у меня сильный интерес

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Фуф. Я устал. Пойду кофе пить. Спасибо за внимание!

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"2f760220-6b26-56a1-9bcf-985052488ac3","width":807,"height":424,"size":32731,"type":"png","color":"1c1c1c","hash":"","external_service":[]}}}]}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":2,"favorites":3,"reposts":0,"views":96,"hits":325,"reads":null,"online":0},"dateFavorite":0,"hitsCount":325,"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/564927-spiski-i-slovari-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":"Год на 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":1764925872,"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":"Год на 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":1764925872,"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":"

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

"}},{"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":"

Строка - это тип данных, представляющий упорядоченную коллекцию символов для хранения и текстовой и байтовой информации.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В Python строки обычно представлены с помощью одинарных кавычек (''), двойных кавычек ( '' ''), тройных кавычек (''' '''). Строковый тип дынных представлен классом str()

"}},{"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)) # ","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что вообще такое кодировки и как с ними работать?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пожалуй, не для кого не секрет, что элемент строки является символ. Например, буквы английского алфавита - это один набор символов, буквы русского алфавита - другой набор символов. То же самое можно сказать и про китайский, арабский и другие языки и компьютеру надо с ними работать. И поэтому для их обработки придумали специальную систему кодировки.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В своей книге Лутц останавливается на Unicode и ASCII.

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

«ASCII - это простая форма текста Unicode, но лишь одна из немногих кодировок алфавита»

","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В Python содержится аж три строковых типа. Один из них я уже называл (str, для текста), вместе с ним имеется bytes(для двоичных данных), bytearray (изменяемый вариант типа bytes).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Отличие двух кодировок определяется шагом трансляции. Он необходим для получения данных из файлов. Практический пример использования кодировки можно встретить например в библиотеке pandas. Например, если при импорте данных из того же excel-файла не правильно указать кодировку, то вывод данных будет не читаемым для человека (пожалуй всем известен случай с «крокозябрами»).

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что предлагает автор знать на начальном этапе о строках?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Строки допускается использовать для представления всего что может восприниматься как текст или байты

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Строки - это инструмент высокого уровня. Они сопровождаются большим количеством методов их обработки.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Строки - неизменяемая последовательность и их значение не поддаётся каким-либо модификациям. Поэтому, чтобы модифицировать строку, необходимо создать новую строку на основе предыдущей.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) Для сложной обработки строк можно пользоваться библиотекой re. Этой библиотеке посвящу публикацию отдельно.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"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":"

Однако самые распространённые случаи считаются представление строкового типа с помощью одинарных и двойных кавычек.

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

С точки зрения Python они почти ничем не отличаются друг от друга, поэтому прежде чем начать писать проект, вы договоритесь сами с собой какие кавычки вы будете использовать.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И ещё примеры:

"}},{"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":"

В последней строки используются символы с обратной косой чертой (\\). Данный символ используется для изменения представления выводимой строки в интерпретаторе. Я достаточно часто использовал символ \\n на сайте CodeWars, однако вместе с ним есть и ряд других. Ниже представлю перечень.

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

\\новая строка - Игнорируется (строка продолжения)

*\\\\ - Обратная косая черта (сохраняет символ \\)

*\\' - Одинарная кавычка (сохраняет ')\\'' - Двойная кавычка (сохраняет '')

\\a - Звонок

\\b - Забой

\\f - Перевод страницы

\\n - Новая строка

*\\r - возврат коретки

\\t - горизонтальная табуляция

\\v - вертикальная табуляция

\\xhh - шестнадцатиричный символ

\\ooo - символ с восьмиричным значением

\\O - пустой двоичный символ (не конец строки)

\\N{идентификатор} - Идентификатор Unicode

\\uhhhh - Символ Unicode c 16-битным шестнадцатиричным значением

\\Uhhhhhhh - Символ Unicode с 32-битным шестнадцатеричным значением


* Используются в программировании достаточно часто

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Стоить также указать, что функция len() , отвечающая за вывод количество символов НЕ учитывает вышеописанные специфические значения.

"}},{"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":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Замечание

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"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":"

Совсем не то, что я хотел вывести. Я ожидал, что вызов print() выведет мне полный путь файла. Поэтому, чтобы это исправить, немного модифицируем код вот так:

"}},{"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":"

Мы всего лишь добавили флаг r к '\\new\\text.dat' и у нас получилась требуемая строка.

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Обратите внимание на это правило!

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Тройные кавычки"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"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":"

С помощью тройных кавычек можно:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Выделять код

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Документировать программу

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Описывать состояние ошибок

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Однако на практике, чем меньше мы используем документирование в программе тем лучше. Сейчас будет отсылка на мою статью на хабре: https://habr.com/ru/post/683956/

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что умеют строки в Python? Базовые операции"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Считать длину

"}},{"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":"

2) Конкатенация:

"}},{"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":"

3) Повторение

"}},{"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":"

4) Индексация:

"}},{"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":"

Индексация - это способ извлечения информации согласно номеру символа. Номер символа начинается с 0. Я не буду подробно останавливаться на этом, просто имейте ввиду, что она существует.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь внимание!

"}},{"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":"

Почему так? На самом деле всё просто: у нас переменная a хоть и принимает значение 34, но она обёрнута в кавычки, поэтому интерпретатор распознаёт её как строку. А Python не позволяет складывать строку с числом.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Чтобы исправить, надо представить переменную в целочисленный тип данных

"}},{"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":"

Не смотря на то, что Лутц описывает это неявно, но существует представление о том, что каждый символ представляется определённым кодом. Он соответствует кодировке ASCII. По таблице видно, что каждое значение соответствует своему шестнадцатиричному и десятичному значению.

"}},{"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":"

Для их преобразования существуют методы ord() и chr() . Для понимания кодировки Лутц предлагает написать следующий код:

"}},{"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":"

Если мы проверим решение на предмет соответствия с таблицей, то мы обнаружим, что действительно символ 5 соответствует числу 53. Python допускает операции с преобразованными значениями. Но, обратите внимание, только с числами закодированных символов.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как можно изменять строку?"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Поскольку нам известно о том, что строка является неизменяемым типом данных, а менять строку всё равно нужно, то чтобы это исправить существует три основных способа: конкатенация, замена символа и форматирование. Ниже привожу примеры

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Конкатенация

"}},{"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":"

2) Замена символов

"}},{"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":"

3) Форматирование

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

A.

"}},{"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":"

Б.

"}},{"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":"

Методы, представленные в статье являются базовыми, однако их недостаточно для того, чтобы понять всё многообразие работы со строками. Для того, чтобы полностью увидеть картину можно заглянуть в документацию. Ссылку по строкам я уже сюда приводил, поэтому чтобы вы не забыли, продублирую её заново ( https://docs.python.org/3/library/stdtypes.html?highlight=str#str ). Настоятельно рекомендую потренироваться над изменением и способам проверки строк. Помните, что программирование - это больше про практику.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А теперь подробней про форматирование"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На сегодняшний день существует три способа форматирования текста, однако Лутц выделяет только два (очень сказывается время, когда впервые была выпущена эта книга). Пример использования f-строки я раскрывать не стану. Скажу лишь, что он сейчас наиболее популярный и часто используется в программировании.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Шаблон форматирования определяется с помощью базового шаблона

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

'….%s….' % (значение) - старый приём

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

'….{}…..'.format(значение) - новый приём

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пара примеров:

"}},{"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":"

Интерпретация и результаты:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Что такое % ? - ожидает в правой стороне либо одиночный элемент, либо кортеж из одного и более элементов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Что такое %d, %s ? - это специальный код, описывающий вставляемые данные. Ниже представлен список из этих элементов

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

s - строка (или строка str(x) любого объекта)

*r - То же, что и s, но применяется как repr, а не strc - символ (int или str)

d - десятичное число (целое число с основанием 10)

*i - целое числоo - восьмиричное целое число

x - Шестнадцатиричное целое число

X - то же самое, что и в верхнем регистреe - число с плавающей точкой со степенью в нижнем регистре

E - то же, что и e, но в верхнем регистре

f - десятичное число с плавающей точкой

*F -то же, что и f, но в верхнем регистре

*g - число с плавающей точкой e или f

G - Число с плавающей точкой E или F

* - на мой взгляд часто используемые символы вставки

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если знать, когда применять кодировку, можно легко подобрать нужный текст, главное запомнить какой код за что отвечает

"}},{"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":"

Обратите внимание на %06d в строке. По сути данный формат строки означает, что выводимое число должно содержать 6 целых чисел. Если мы посчитаем количество цифр в 001234, то как раз получим тот же самый ответ.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

%-6d отвечает за выделенное пространство под число. Если количество чисел меньше, чем область, то он добавляет к ней знаки пробелов

"}},{"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":"

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

"}},{"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":"

Важно: форматирование через словарь очень часто пригождается в работе с базами данных, поэтому настоятельно рекомендую потренироваться в использовании словарей при форматировании текста.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Форматирование через метод format()"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Метод format() базируется на обычном синтаксисе вызова функции, а не выражении.

","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Я не буду вдаваться здесь в теорию. Сразу перейду к практике

"}},{"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":"

В последнем примере используется индексация (позиция метода форматирования. Применяя ключи словаря и метод библиотеки sys получаем заветное слово:)

"}},{"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":"

Здесь показывается пример, аналогичный предыдущему, единственное, что бы я сделал - это поменял название словаря, уж очень он идентичен зарезервированному слову map ( смотрите доку )

"}},{"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":"

Есть ещё более специфические методы форматирования, но для собеседования, думаю, достаточно знать базовые

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"В заключении статьи опишу какие преимущества видит автор, применяя метод format"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Располагает некоторыми дополнительными возможностями, отсутствующими в самом выражении

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Обладает гибким синтаксисом ссылки на чтение

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Может делать ссылки на значения более явными

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) Обменивает операцию на более значащее имя метода

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

5) Не допускает разного синтаксиса для одиночных и множественных значений

"}},{"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":"

В заключении могу сказать, что это не всё, что отразил в своей книге Лутц. В статье представлена только базовая и основная выжимка. Статья не раскрывает специфичные случаи использования строк, но может дать базовое представление о том, что это такое и как оно работает. Благодарю за внимание и до новой статьи!

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Все статьи по книге собраны в отдельном сообществе на vc:

"}},{"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":"

Кому интересно развитие проекта, могут поддержать донатами.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Спасибо за прочтение!

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":64,"hits":687,"reads":null,"online":0},"dateFavorite":0,"hitsCount":687,"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":"Год на 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":1764925872,"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":"Год на 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":1764925872,"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":564003,"customUri":null,"subsiteId":1377277,"title":"Что такое динамическая типизация и как она трактуется по Лутцу?","date":1671193678,"dateModified":1671193678,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Друзья, всем привет. Продолжаю медитировать над книгой «Изучаем Python». Сегодня речь зайдёт про сущность динамической типизации. Эта статья будет иметь более теоритическое, ежели практическое значение, однако этот вопрос может легко попасться на собеседовании. Поэтому читаем, вникаем и думаем

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Итак какова сущность динамической типизации?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Рассмотрим пару примеров. Допустим, у нас имеются следующие переменные:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"intNumber = 6; floatNumber = 3.5 ; StringRow = 'abba'; BoolValue = True\nprint(type(intNumber), type(floatNumber), type(StringRow), type(BoolValue)) # ","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как Python определил, что данные значения соответствуют определённому типу?

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

А всё дело в том, что определение типов в Python происходит автоматически, и как раз за это и отвечает метод динамической типизации.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Должен признаться, существует некая группа программистов, которая не любит работать с динамически типизированными объектами. Как правило это уже продвинутые программисты, которые умеют программировать на нескольких языках и в их представлении Python является даже не языком программирования. Поэтому будьте осторожны, когда начинаете спор с Java программистом или C++ программистом. У них мозг работает несколько иначе, чем у тех людей, кто программирует на Python.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Итак, из чего состоит программа в Python?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Переменные - это записи в системной таблицы, в которых предусмотрены места для связей с объектами

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Объекты - это области выделенной памяти с достаточным пространством для представления значений, для которых они предназначены

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ссылки - это указатели от переменных к объектам

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для ассоциации в книге приводится следующая схема. Я её немного поменял, но совсем чуть-чуть. Она описывает задачу присвоения переменной intNumber значения 6 (взял это из выдуманного примера, который описал выше)

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"3155038d-c9af-5bfb-8e72-c41711e54476","width":807,"height":311,"size":32350,"type":"png","color":"ececec","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что происходит, когда мы создаём переменную?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Сначала создаётся объект 6

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Затем создаётся переменная с именем intNumber

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Создаётся ссылка, связывающая объект 6 с переменной intNumber

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Каждый объект имеет сложную структуру, чем описывается на рисунке. Вместе с вышеизложенным он делится на два стандартных поля: обозначение типа и счётчик ссылок. Для наглядности сделаю для описания умную карту.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"1d8dfd98-5aa9-54a0-a32d-dd214b74e98f","width":807,"height":231,"size":30147,"type":"png","color":"dfe8f2","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Исходя из сложности понимания объекта из этой схемы логично сделать вывод, что типы определяются именно в объектах, а не в переменных. Переменные - это чисто название объекта. Таким образом Лутц предлагает следующие утверждения:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Имена не имеют типов

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Типы обитают в объектах

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Объектам известно какого типа он содержит переменную

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что необходимо знать про объекты и сборку мусора?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Так-так, тут уже появляется новый термин, и при чём очень важный. Следует правильно понимать, что под ним люди имеют ввиду, чтобы они вас смогли понять.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Итак, Python - очень оптимизированный язык программирования. И основное в этом преимущество состоит в том, что ненужные объекты он убирает из памяти. Вот пример:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"stringName = 'Misha'\nstringName = 'Vasya'","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как можно видеть из примера, у нас одинаковые имена stringName. И если мы выведем stringName методом print. То получим объект Vasya

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(stringName) #Vasya","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А что случилось с Misha? Правильно, он уничтожился. Таким образом произошло освобождение памяти, а за это отвечает сборщик мусора.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сборщик мусора также используется с объектами разными типами. Таким образом вот следующий пример:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = 42 # тип int\nx = 'shrubbery' # тип string\nx = 3.14 # тип float\nx = [1,2,3,4] # тип list","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Таким образом при выводе переменной x происходит вывод последнего объекта, а другие удаляются.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(x) # [1, 2, 3, 4]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сборщик мусора основан на счётчике ссылок (картинка 2), однако они имеют компоненты, обнаруживающие и освобождающие пространство в памяти для объектов с циклическими ссылками

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

По Лутцу циклические ссылки служат основной проблемой сборщика мусора, основанных на счётчиках ссылок.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А что такое циклические ссылки?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Циклические ссылки возникают тогда, когда объект ссылается на самого себя. Вот пример:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = [1,2,3,4] # тип list\nx.append(x) \nprint(x) #[1, 2, 3, 4, [...]]","lang":""}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если честно, я так никогда не делал, да и Мартин не рекомендует. Однако вывод весьма любознательный на мой взгляд. Вполне возможно резонно сказать на собеседовании, что подобный случай является редким, однако «с ними нужно обходиться особым образом», поскольку счётчики ссылок никогда не уменьшаются до 0

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для получения дополнительных сведений автор рекомендует изучить модуль gc. Я о нём узнал только недавно, поэтому до сей поры не игрался.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что такое разделяемые ссылки?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Автор приводит показательный пример:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"name = 'Misha'\nnewName = name","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Итак, я вижу переменную name и вижу новую переменную newName. То есть когда мы объявили переменную newName, то этим самым мы организовали ссылку на один и тот же объект Misha

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для иллюстрации автор предлагает нам запомнить тему с помощью простой схемы.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"449a269a-6b17-54ff-91a9-78f69e22815e","width":807,"height":330,"size":36721,"type":"png","color":"eaeaea","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Иллюстрация демонстрирует как сценарий с множеством имён ссылается на на тот же самый объект. Такой процесс называется разделяемой ссылкой

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь добавим новую переменную как в следующем примере

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что же происходит здесь?"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"576596a4-412f-597c-ae0b-dfa70cc62438","width":807,"height":569,"size":60787,"type":"png","color":"ececec","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Эту схему уже понимать сложнее. Однако на основе неё можно сделать следующий вывод:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Переменные в Python всегда являются указателями на объекты,

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Установка переменной в новое значение не изменяет первоначальный объект, но в замен указывает на ссылку переменной, находящейся в другом объекте

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как разделяемые ссылки меняют объекты?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Автор напоминает, что изменяемыми типами данных являются списки, словари и множества

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для того, чтобы продемонстрировать процесс изменения для изменения объектов, автор предлагает это сделать на примере следующего кода:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"L1 = [2,3,4]\nL2 = L1\nL1[0] = 24\nprint(L1 , L2) # [24, 3, 4] [24, 3, 4]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Данный пример фактически демонстрирует случай с разделяемыми ссылками.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь, внимание, вопрос!

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как изменить данные в списке таким образом, чтобы объекты в двух списках не менялись?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для ответа на этот вопрос, Лутц показывает следующий пример:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"L1 = [2,3,4]\nL2 = L1[:]\nL1[0] = 24\nprint(L1 , L2) # [24, 3, 4] [2, 3, 4]","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что делает \":\" ?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Фактически это оператор делает копию данных переменной L1. Фактически, получается, что данный объект сохраняется в памяти и L2 уже является новым объектом.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Аналогичные процессы создаются при вызове оператора copy() и deepcopy()

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Оператор copy() создаёт поверхностное копирование объекта, а deepcopy() - глубокое копирование.

"}},{"type":"incut","cover":false,"hidden":false,"anchor":"","data":{"text":"

Предлагаю потренироваться и проследить поведение представленных методов. Не всё же мне писать)

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Как отличить разделяемые ссылки от оператора сравнения?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Эта тема очень важная, поскольку здесь определяется суть оператора is в Python. На тему использования is даже сделали небольшой гайд на YouTube.

"}},{"type":"video","cover":false,"hidden":false,"anchor":"","data":{"title":"","video":{"type":"video","data":{"thumbnail":{"type":"image","data":{"uuid":"93a17f9d-6e24-5f84-9f89-4ac8f8c03ec5","width":1280,"height":720,"size":74971,"type":"jpg","color":"292a32","hash":"","external_service":[]}},"width":800,"height":450,"time":0,"external_service":{"name":"youtube","id":"mQk1NIV3HXM"}}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Примерно об этом же говорит соответствующая глава в книге

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что ещё важно знать про Динамическую типизацию?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Динамическая типизация - абстрактное пониятие

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) В Python абсолютно всё взаимодействует через присваивание и ссылки

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Для углубления понимания. Динамическая типизация является корнем полиморфизма

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) В Python существует только одна модель присваивания

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Вместе с разделяемыми ссылками в Python есть и «слабые ссылки», что это такое?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Честно говоря, о существовании «слабых ссылок» я прочитал только у Лутца. Ниже я представлю мнение автора, о том, как он понимает этот термин.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Слабая ссылка - довольно развитый инструмент, который связан с моделью ссылок, но операции is будут без них не понятны

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Данный термин реализуется в стандартной библиотеке weakref . Она представляет ссылку на объект, которая не препятствует выполнению сборки мусора в сборке мусора

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Слабые ссылки удобны в кешах для крупных объектов на основе словарей: без них них одна ссылка приводила бы к хранению объекта в памяти бесконечно долго.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На практике я не использовал «слабые ссылки», поэтому их применение лично для меня остаётся открытым вопросом.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На этом всё! До новых встреч :)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#изучаемPython #программирование #готовимсяКсобеседованию

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":3,"favorites":1,"reposts":0,"views":55,"hits":2235,"reads":null,"online":0},"dateFavorite":0,"hitsCount":2235,"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/564003-chto-takoe-dinamicheskaya-tipizaciya-i-kak-ona-traktuetsya-po-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":"Год на 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":1764925872,"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":"Год на 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":1764925872,"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":[],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":561328,"customUri":null,"subsiteId":1377277,"title":"Числа для продвинутых по Марку Лутцу","date":1670939656,"dateModified":1670939656,"blocks":[{"type":"media","cover":true,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                           Узнаёте циферки?)","image":{"type":"image","data":{"uuid":"0f683399-f7d3-534e-b40b-b50d564930b5","width":640,"height":423,"size":212984,"type":"png","color":"ccc6c0","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Доброго, прекрасного, сказочного времени суток, семья моя :) Пришло время углубляться… И искать крупицы в стоге сена, которые углубят моё представление о языке Python.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ну что ж, начинаю рефлексировать и перечитывать уже законспектированный материал.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Итак, что такое числа с точки зрения Python?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Это объект класса. Проверить это очень просто. Достаточно лишь написать в программном интерпретаторе следующий код:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"intNumber = 3\nprint(intNumber) #3\nprint(type(intNumber)) # ","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Python есть такая встроенная функция type() называется. С помощью неё как раз можно узнать каким типом данных является объект. Поскольку статья посвящена числам, то мы проверяем числа. В итоге результатом проверки числа определился класс int (<class 'int'>)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

По Лутцу числа являются не одиночным типом объектов, а категорией похожих объектов.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Давайте другой пример.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"floatNumber = 2.5 # это число уже с другим типом данных\nprint(floatNumber)\nprint(type(floatNumber)) #","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Видите различие?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В первом примере, у нас класс целых ЧИСЕЛ, а в другом класс ЧИСЕЛ с плавающей точкой. По факту их объединяет единое понятие «ЧИСЛО», а вот <class 'float'> и <class 'int'> являются их категориями (или характеристиками).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Таким образом выделяются следующие категории чисел:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Целые числа и с плавающей точкой

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"floatNumber = 2.5\nintNumber = 3","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Комплексные числа

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = 3j\nprint(a) # 3j","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Десятичные числа

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import decimal\nprint(decimal.Decimal('2.6') + decimal.Decimal('1.2'))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) Дроби

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import fractions\nprint(fractions.Fraction(1,2)) #1/2","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

5) Булевы числа (True/ False)

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Laptop = True #эквивалент 1\nKeyBoard = False #эквивалент 0","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

6) Встроенные функции и модули

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import math\nprint(math.sqrt(9))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

При работе с числами очень важно знать операции, которые необходимы для их обработки. Операции применяются по старшенству. Я выделил это понятие, потому что несоблюдение данного правила могут вызвать ошибки в программе. Из правила старшинства следует перечень операций приоритетные к обработке по сравнению с другими. Перечень операторов можно взять из (https://letpy.com/handbook/operator-priorities/) этой таблицы. А в этой статье (https://habr.com/ru/company/vk/blog/337364/) можно встретить экзотические случаи, когда игнорирование правила старшенства может привести к ошибочному результату.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Числа в действии"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

","subline1":"М.Лутц"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1. Переменные создаются, когда им присваиваются значения.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2. Переменные заменяются своими значениями, когда используются в выражениях

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3. Переменным должны быть присвоены значения до того, как можно применять их в выражениях

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4. Переменные ссылаются на объекты и не объявляются заранее

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ниже опишу это с помощью кода

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1 правило:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Number =3 # Number - название переменной , 3 - значение # 1 утверждение","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2 правило

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Number =3 #объявление переменной\nNextNumber = Number + 4 # Замена переменной своим значением\nprint(NextNumber) # 7","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3 правило

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\"\"\"\nНеобходимо сначала ОБЪЯВЛЯТЬ, а потом выполнять операции, иначе ошибка\n\"\"\"\nNumber1+Number2 # NameError: name 'Number1' is not defined\nNumber1 = 3\nNumber2 = 5","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4 правило

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\"\"\"\nТак тоже нельзя\n\"\"\"\nprint(Number) #NameError: name 'Number' is not defined\nNumber = 3","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Неочевидные вещи при работе с числами"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Если я захочу вычислить несколько чисел в одной строке, то формальным результатом получу кортеж.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Numbers = 2 +3 , 3+4\nprint(Numbers) # (5, 7)\nprint(type(Numbers)) # ","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот показательный пример. Тут я запихал в переменную Numbers два выражения, их он оформил в кортеж. Если я проверю тип, то обнаружу, что он НЕ относится к числовому типу данных. Магия Python в действии :)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Если я захочу отформатировать строку, то можно воспользоваться следующими примерами.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На форматировании я останавливаюсь очень подробно в виду того, что очень привык к f-строкам (хотя это самый мощный и быстрый инструмент). На мой взгляд, такой расклад вещей не является Best Practice, поэтому приведу форматирование чисел как видит их Лутц.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Я мало использовал правила отображения.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Знаете ребят, я редко их применял в функциональном программировании, но это не значит, что они вообще не нужны. Как я понял они очень востребованы в ООП (там, где мы объявляем классы).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как отличить отображение?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Лучше опишу конкретными примерами

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"repr('spam') # \"'spam'\" - это отображение как в коде\nstr('spam') # 'spam' - более дружественный человеку вариант","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

repr () представляет собой представляет собой вывод выражения, таким образом, каким его видит код

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

str() представляет собой более дружественный вывод объекта

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) Немного о правилах деления.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Тут и без комментариев всё понятно, поэтому сразу к написанию программ:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"10/4 # 2.5 # вывод - число с плавающей точкой\n10//4 # 2 вывод - число типа int\n10//4.0 #2.0 вывод - число типа float","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Правила округления:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import math\nmath.floor(2.525) # 2 - усечение в меньшую сторону\nmath.trunc(2.5) # 2 - усечеение дробной части\nround(2.6) # 3 - округление в большую строну","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

5) О существовании представления комплексных чисел в Python я не знал, поэтому для меня это новая информация.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

По Лутцу, комплексные числа являются отдельным основным типом объектов в Python. Данное число состоит из действующей и мнимой части. И записываются с добавлением суффикса j и J.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

6) Поддержка системы счисления. Данный пункт я прямо хорошо проработал на CodeWars. Здесь я лишь только скажу, что в базовой комплектации Python работает с двоичной, восьмеричной, десятичной, шестнадцатеричной системой счисления.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Преобразование в десятичный тип:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(0o10, 0o20, 0o5) #8 16 5 преобразование в десятичный тип из восьмеричного\nprint(0o10+ 0o20) #24 преобразование в десятичный тип\nprint(0b001, 0b111) # 1 7 преобразование в десятичный из двоичного\nprint(0x2f) #47 - преобразование в десятичный тип из шестнадцатеричного","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Преобразование в обратную сторону:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(hex(20)) # в шестнадцатеричный тип\nprint(bin(2)) # в двоичный\nprint(oct(20)) # в восьмеричный","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Правила форматирования разных типов"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"'{0:o}, {1:x}, {2:b}'.format(64, 64, 64) # '100, 40, 1000000' # с применением метода format\n'%o, %x, %x, %X' % (64, 64, 255, 255) # '100, 40, ff, FF' без применения методов format","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

7) Существуют другие встроенные типы. К ним Лутц относит random и math. Есть и более продвинутые ( вроде NumPy но о них автор не рассказывает)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Их описание я привёл выше по тексту. Основные методы, которые содержит этот модуль можно взять из официальной документации.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Модуль random: https://docs.python.org/3/library/random.html

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Модуль math: https://docs.python.org/3/library/math.html

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ребят, в программировании очень важна тренировка и отработка навыков, поэтому тут моя рекомендация: поэкспериментируйте с этими модулями, не бойтесь ошибаться. Уж лучше ошибиться сейчас, чем на собеседовании :)

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Основы десятичных чисел . Для чего нужен модуль Decimal?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как говорит Лутц математика с плавающей точкой не является точным представлением вычисляемого выражения. Для того, чтобы это исправить существует внутренняя библиотека decimal. В начале статьи я уже упоминал в вкратце об этом модуле.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В этом пункте привожу наиболее интересные случаи:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"from decimal import Decimal\nDecimal('0.1') + Decimal('0.1') + Decimal('0.1') - Decimal('0.3') # Вывод: Decimal('0.0')\nDecimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3) # Вывод: Decimal('2.775557561565156540423631668E-17')","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Здесь в выводе следует особо обращать внимание на точность.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(0.1+0.1+0.1-0.3) #5.551115123125783e-17 (похож на предыдущий пример)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Обратите внимание! Если вы хотите вывести число в более человекочитаемом виде, то рекомендуется отображать числа в строковом представлении

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Глобальная установка точности"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Чтобы установить точность модуля decimal необходимо его настроить. Для этого существует метод getcontext().prec

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот пример из книги:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import decimal\ndecimal.Decimal(1)/decimal.Decimal(7) # Decimal('0.1428571428571428571428571429')\ndecimal.getcontext().prec = 4 # присвоение фиксированной точности\ndecimal.Decimal(1)/decimal.Decimal(7) #Decimal('0.1429')","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ребята, знаете, если бы я знал об этом раньше, то работа с точными числами на CodeWars обходилось бы мне куда меньшей болью. Так что примите даннный модуль во внимание. Если вы столкнётесь с анализом больших данных и вычислении собственных показателей, он может вам оказать просто огромную службу

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

9) Поработаем с дробями. Это тоже полезный метод. С дробями, ребят я на CodeWars не сталкивался, но однако не факт, что подобного типа задач там нет.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот парочку примеров:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import fractions # импорт модуля с дробями\nxCoordinate = fractions.Fraction(1 , 3) # 1 - числитель, 3- знаменатель\nyCoordinate = fractions.Fraction(4, 6) # аналогично\nprint(xCoordinate, yCoordinate) #1/3 2/3 (вывод координат X и Y)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Использование этого модуля автоматически упрощает дробь. Метод позволяет работать с числами разных типов. Для экспериментов можно обратиться к документации. (https://docs.python.org/3/library/fractions.html)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сразу скажу, определение достаточно сложное. Его хорошо прорабатывать на практических примерах. Опишу его примерами:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = 'abcde'\ny = 'bdxyz'\nprint(set(x) , set(y)) {'c', 'd', 'a', 'e', 'b'} {'y', 'd', 'z', 'x', 'b'}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Множества описываются встроенным методом set()

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Его методами являются такие операции как: разность, пересечение, объединение, симметрическая разность, надмножество, подмножество

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"x = 'abcde'\ny = 'bdxyz'\nsetX, setY = set(x) , set(y)\nsetX-setY # разность {'c', 'e', 'a'} \nsetX | setY # объединение {'y', 'c', 'd', 'z', 'x', 'a', 'e', 'b'}\nsetX & setY # пересечение {'d', 'b'}\nsetX^setY # симметрическая разность (исключающее ИЛИ) {'c', 'z', 'a', 'e', 'x', 'y'} \nsetX>setY, setXВместе с операциями есть пара методов, среди которых: add() и update()

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Для чего могут использоваться множества?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Для создания объектов с уникальными номерами

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Для выделения различий в списках, строках и других объектах

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Выполнения проверок на равенство, нейтральное к порядку

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) Обработка запросов, связанных с базами данных

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Те пункты, которые я выделил, считаю наиболее важными.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"da28abc7-1bdb-529f-bd27-6143c196575b","width":618,"height":350,"size":105403,"type":"png","color":"d6a061","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот и закончилось глубокое описание работы с числами в Python!

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":48,"hits":171,"reads":null,"online":0},"dateFavorite":0,"hitsCount":171,"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/561328-chisla-dlya-prodvinutyh-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":"Год на 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":1764925872,"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":"Год на 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":1764925872,"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":[],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":560768,"customUri":null,"subsiteId":1377277,"title":"Python, начало","date":1670907752,"dateModified":1670907752,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Всем здравствуйте, друзья. Сегодня я продолжу рассказывать про обучение программированию на Python.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Должен сразу предупредить, что у меня был уже достаточно наработанные навыки по программированию на этом языке. Сейчас они ограничиваются знанием нескольких сторонних библиотек (на подобие Pandas, Numpy, Flask) и практикой решения задач на CodeWars (https://www.codewars.com/) . Для того, чтобы достичь более-менее хороших навыков владения языком, мне потребовалось решить не менее 500 задач разного уровня сложности.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Дальше я понял, что хорошая практика - это конечно хорошо, но тот факт, что мои знания не систематизированы вызывало некую озадаченность. Поэтому я задал себе вполне резонный и закономерный вопрос: «Как мне всё это можно систематизировать?»

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На этот запрос гугл выдал весьма лаконичный результат - книги. Прекрасно! Книги - это такой источник знаний, который позволяет дать не только систему, но и теорию.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Я полез на YouTube и сразу почти первым результатом выскочила книга Марка Лутца «Изучаем Python».

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"24ac7b71-a81a-541b-a1b5-718674d3203b","width":604,"height":425,"size":122443,"type":"png","color":"6f3d63","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Хорошо, подумал я. Видно, что книга толстая и это круто, ведь это то, что мне и нужно было. Но одно дело книга, а другое - содержимое. Таким образом посмотрел следующий ролик

"}},{"type":"video","cover":false,"hidden":false,"anchor":"","data":{"title":"","video":{"type":"video","data":{"thumbnail":{"type":"image","data":{"uuid":"a83da894-9ad0-5016-9145-0e4daa635214","width":1280,"height":720,"size":128397,"type":"jpg","color":"c3b4af","hash":"","external_service":[]}},"width":800,"height":450,"time":0,"external_service":{"name":"youtube","id":"ipXBlnv8odU"}}}}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В общем спасибо автору за качественную рецензию! Теперь я знаю, что читать.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В кратце скажу, что данная книга НЕ для новичков. Я полностью разделяю мнение автора этого ролика. Однако имея небольшой опыт программирования, эту книгу должен прочитать каждый. Она описывает практики и шаблоны, применяя которые можно улучшить качество кода а также систематизировать УЖЕ ИМЕЮЩИЕСЯ знания.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На текущий момент у меня на руках русская версия этой книги. Она есть как в свободном доступе, так и на Ozon. Однако я предпочитаю печатную версию книги, по той простой причине, что в таком виде мне легче её разобрать. Два тома обошлись в кругленькую сумму - 7500 рублей.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ниже я напишу преимущества и недостатки.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Преимущества"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Устаревшая версия

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Средний перевод

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Здесь будут представлены блоки реализации программного кода, которые я редко использовал в процессе практики на CodeWars.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Я очень надеюсь, что они сохранятся в моей голове и я уже в дальнейшем могу использовать их на реальном коде. Приступаю…

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Введение в типы объектов в Python"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В начале этой главы автор начинает с представления о концептуальной иерархии в Python. Что ж, я попробую её перевести с русского на русский и сделать информацию более понятной для себя.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Итак, из чего состоят программы:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Модули. В любой программе они описываются в начале документа. Примером модуля может являться импорт сторонней библиотеки, внутренней библиотеки и файла с самописным кодом.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import pandas as pd \nfrom math impot pi\nimport numpy as np\n....\nimport mycode","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Модули содержат операторы. По сути своей операторы соответствуют понятию переменные. Очень важно понимать как именуются переменные. На днях я писал статью на хабре ( https://habr.com/ru/post/683956/), где как раз указана информация о том, как надо правильно именовать переменные. Данная статья вызвала вал критики. Но факт есть факт. Операторы (как и переменные) надо именовать. Маленький пример:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"PersonId = 3\nNextPersonId = PersonId+1","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Операторы содержат выражения. По сути своей выражение - это блок кода, который выполняется для вычисления значений или операторов.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"numbers = []\nfor i in range(1,3):\n numbers.append(i)\nprint(numbers) #[1, 2]","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) Выражения обрабатывают объект. Вообще объект - это основа Python. В данном языке всё состоит из объектов. Так что привыкайте к правильному именованию переменных :). Особенно когда речь идёт о классах.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В Python любой объект состоит из типов. Из всего многообразия типов я, например не знал, что к типам относят не только строки, числа, множества, словари и списки , кортежи но и файлы, модули, классы, структурированный код. Так что на собеседовании надо быть внимательным, когда задают вопрос про типы.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И теперь чуть-чуть про типы.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Числа"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Числа - это представление объектов в виде цифр. В общем виде отображать числа в Python просто. Здесь они описываются в виде целых типов или типов с плавающей точкой.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"integerNumber = 2\nfloatingNumber = 2.5\nprint(integerNumber+floatingNumber) #4.5","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как видно из примера, целые не содержат точки, а с плавающей точкой содержат точку. Звучит как масло-масленое, но что есть, то есть.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Другие примеры"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"import math\nprint('%.2f'% (math.pi)) # 3.14\nprint('%.2f'% (math.pi*2)) # 6.28","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Здесь пример сложнее. Самая первая строка импортирует встроенный модуль math. Если что, он представляет набор функций и переменных с помощью которых можно вычислять базовые математические значения. Считается, что хорошей практикой является чтение документации. Слава Богу, я знаю английский и подобрать примеры для вас не составляет большого труда. В случае чего базу можно найти здесь https://docs.python.org/3/library/math.html

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Однако, если так случится, что я не смогу туда добраться. Вдруг против меня введут санкции, то можно воспользоваться встроенной функцией dir() и help()

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь внимание! На собеседованиях очень часто спрашивают про них. Поэтому я оставлю информацию о них в этой заметке .Функция dir() описывает методы, которые может содержать тип данных.

","subline1":""}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(dir(math))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Выведет

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']","lang":""}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print(help(math.pi))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Выведет

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Help on float object:\nclass float(object)\n| float(x=0, /)\n|\n| Convert a string or number to a floating point number, if possible.\n|\n| Methods defined here:\n|","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Иными славами, dir() выводит список методов, а help() - справочную информацию.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Строки"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Строки необходимы для тестовых данных. Здесь Марк Лутц говорит об объявлении строки, подсчёте количества символов, индексах и срезах. Базовые знания о строках я имею, поэтому заострять внимание на них не буду. Однако добавлю, что они поддерживают специфичные методы и форматирование. Пример форматирования оставлю здесь

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"NewSentence = '%s, eggs and %s' % ('spam', 'SPAM')\nprint(NewSentence) #spam, eggs and SPAM","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Этот пример очень важный при работе с базой данных. Именно таким образом надо осуществлять вставку в многие реляционные БД. Вместе с этим хорошей популярностью пользуются f-строки. Они не описываются в книге, но в CodeWars я их использую часто.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Отдельно отмечу информацию, что числа, что строки являются неизменяемыми. Иными словами, если я захочу их модифицировать, сделать это не получится, потому что Python это запрещает. А теперь возможный вопрос из собеседования.

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Какие типы данных являются неизменяемыми?

","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ответ: помимо вышеизложенных ещё кортежи и bytearray

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

А какие изменяемые?

","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Ответ: списки, словари, множества

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Строки Unicode"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот тут я бы возможно пролетел. Не знаю, правда на сколько данная тема важна, но шпаргалку всё-таки оставлю.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что же такое Unicode?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

По сути своей это кодировка. Она используется для обработки символов. Её используют для представления строк для тех символов, которые не помещаются в латинский алфавит. Python позволяет использовать множество символов кодировок. Лутц среди них выделяет байтовые строки (bytes), UTF и др. Они очень пригождаются для чтения данных с файлов с использованием сторонних библиотек (например Pandas).

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Далее примеры:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"print('sp\\xc4m') # spÄm - текст Unicode\nprint(b'a\\x01c') # b'a\\x01c' - флаг b (байтовое представление строки)\nprint(u'sp\\u00c4m') # spÄm - флаг u (соответствует Unicode)","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Кодировка и декодирование:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"WordTo8 = 'spam'.encode('utf8') # 4 байта в файлах b'spam'\nWordTo16 = 'spam'.encode('utf16') # 16 байтов в файлах b'\\xff\\xfes\\x00p\\x00a\\x00m\\x00'\nprint(WordTo8.decode('utf8')) #spam\nprint(WordTo16.decode('utf-16le')) #spam","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

То, что я привожу - это игровой пример, но вдруг где-то пригодится.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Сопоставление с образцом"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Здесь автор ссылается на регулярные выражения. Подробнее о них я остановлюсь в другой статье

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Списки"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Списки - основа Python. И это действительно так. Вместе с этим они представляют собой изменяемый набор последовательности. Я не буду останавливаться на этом типе данных, поскольку их часто применял на CodeWars. Единственное оставлю форму объявления списка

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"Names = ['Ben', 'Pen', 'Den'] # ['Ben', 'Pen', 'Den']\nNamesList = list('Ben') # ['B', 'e', 'n']","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Поскольку list разделяет строку поэлементно, то такой способ используется достаточно редко. Наиболее часто можно встретить первый способ

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Что умеют списки?"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Срезы (только в пределах списка!)","Добавлять элементы, удалять элементы, изменять элементы
","Вложение элементов
","Использовать списковые включения (list comprehencions)
","Вложенные функции (с помощью map, и filter)
"],"type":"OL"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"inneredList = [\n [1,2,3],\n [4,5,6],\n [7,8,9]\n]\n\nprint(inneredList) # очень круто, когда список создаётся как табуляция (тогда понятно сколько он содержит строк)","lang":""}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Словари"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"FirstDict = {'food': 'Spam', 'quantity': 4, 'color': 'Pink'} #Знал\nSecondDict = dict(food='Spam', quantity=4, color='Pink') # Знал\nThirdDict = dict(zip(['food', 'quantity', 'color']), zip(['Spam', 4, 'Pink'])) # Не знал","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

О функции zip() я знал давно, но я не задумывался о том, что его можно применять при создании словаря. Не знаю насколько данный способ крутой, но что есть, то есть.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как можно представлять вложенные словари:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"rec = {'name': {'first': 'Bob', 'last': 'Smith'},\n 'jobs': ['dev', 'mgr'],\n 'age': 40.5}\nprint(rec) #{'name': {'first': 'Bob', 'last': 'Smith'}, 'jobs': ['dev', 'mgr'], 'age': 40.5}","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Такой вывод хорошо описывает структуру представления данных и именно так собираются данные, например при парсинге сайта. Словари очень похожи на списки.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Кортежи"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Неизменяемый тип данных. Он очень похож на список, но его нельзя изменить. Формат его представления описывается с помощью круглых скобок. Вот как это выглядит:

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = (1,2, 3)\nprint(a) #(1, 2, 3)\nprint(type(a)) # ","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Стоит обратить внимание, что в английском языке кортеж называется tuple. Поэтому не стоит пугаться, если не увидите в интерпретаторе kortezg ^-^)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Он поддерживает всего два метода. Среди них count() и index()

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Кортежи я тоже часто использовал на CodeWars. Поэтому сильно много о них говорить не стану.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Файлы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Здесь я в первые столкнулся с тем, что файл это тип данных!

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Формально он описывается с помощью этого выражения

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"f = open('dataone.txt', 'w')\nf.write('Hello\\n')\nf.write('world\\n')\nf.close()","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Данный код создаёт файл и помещает в него Hello world.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"e644f4b9-199a-5508-b182-619ea64e51d6","width":807,"height":454,"size":42154,"type":"png","color":"edeeeb","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

С помощью файлов можно записывать , создавать, модифицировать и считывать данные.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

С ними я поиграюсь в другой статье и уделю им много времени, так как я о них знал, но не игрался :)

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Множества"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Всё пошло из математики :) И множества тоже. По сути это ещё один тип данных. В основном я его использовал тогда, когда хотел вычленить уникальные значения в списке. Вот как это работает.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"a = [2,3,4,5,5,6,7,8,8,8]\nsetA = set(a)\nprint(len(a), len(setA))","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Очень частый приём, но я запишу его сюда, чтобы не забыть во время собеседования.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Операции со множествами в целом вызывают у меня интерес, так как они могут использоваться при работе с базами данных, поэтому я оставлю эту тему на попозже.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Классы"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Какое же программирование без классов? Классы - это основа объектно-ориентированного программирования (далее ООП). Их буду изучать подробнее, так как знания именно в классах вообще слабые. Тут оставлю базовый шаблон.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"class Worker:\n def __init__(self, name, pay):\n self.name = name\n self.pay = pay\n def lastName(self):\n return self.name.split()[-1]\n def giveRaise(self, percent):\n self.pay *= (1.0 + percent)\n \nbob = Worker('Bob Smith', 5000)\nbob.giveRaise(1)\nbob.pay","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пока оставляю без комментариев.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вот такое вот краткое введение в типы данных. Спасибо за чтение!

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":4,"favorites":2,"reposts":0,"views":41,"hits":354,"reads":null,"online":0},"dateFavorite":0,"hitsCount":354,"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/560768-python-nachalo","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":"Год на 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":1764925872,"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":"Год на 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":1764925872,"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":2}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null}},{"type":"entry","data":{"id":560592,"customUri":null,"subsiteId":1377277,"title":"Поговорим про человека","date":1670867985,"dateModified":1670867985,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

И прежде чем начать говорить о нас с вами, предлагаю обратить внимание на эти две картинки

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                                   Первая","image":{"type":"image","data":{"uuid":"c9853af0-b3ce-5a97-8c9f-9087825d9dee","width":800,"height":509,"size":82253,"type":"png","color":"e7e2e1","hash":"","external_service":[]}}}]}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                              Вторая","image":{"type":"image","data":{"uuid":"267df48d-a902-57ca-8cdc-f63b3d2708d1","width":630,"height":473,"size":248741,"type":"png","color":"d5a498","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Узнаёте на них себя? Я узнаю себя на первой и второй. И при чём вторая — это то состояние, в котором я был, а первое — тот кем являюсь и по сей день. Признаюсь, для этого перехода мне приходится проходить огромный путь и каждая победа над своими собственными драконами, страхами и другими негативными словами помогает быть чуточку счастливей, любить этот мир и обнимать его таким, какой он есть.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сегодня я готов рассказать про эту трансформацию и про этот путь. Для этого понадобится вспомнить о знаниях из многих областей: математики, философии, истории, русского языка и толкования слов и даже основ религии. Я не жду, что вы примите слова как за истину в конечном пределе. Я единственное порадуюсь, если вы дочитав всё до конца, сформируете свой взгляд на эту статью и при желании дадите обратную связь.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"О мироощущении"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Очень важная и нужная вещь, помогающая воспринимать этот мир, извлекать уроки и делать выводы, превращая их в ЗНАНИЯ. Это движение уроки-выводы-знания на мой взгляд невозможно найти ни в одной из книг: ни в научной, ни классической, ни в учебной литературе. Я считаю, тех людей, которые действительно любят получать знания героями! Ваша черта характера очень редка в это время, ведь вы — ЛЮБОЗНАТЕЛЬНЫЙ ЧЕЛОВЕК!

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Что же такое это за предмет то такой ЛЮБОЗНАНИЕ?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Открываю словарь и читаю:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Любознательность – стремление к приобретению всё новых знаний. (http://www.xapaktep.net/virtues/russian/inquisitiveness/desc.php)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Любознательность – Внутренняя заинтересованность в получении новой информации с целью удовлетворения познавательной потребности. (https://dic.academic.ru/dic.nsf/socio/1924/%D0%9B%D0%AE%D0%91%D0%9E%D0%97%D0%9D%D0%90%D0%A2%D0%95%D0%9B%D0%AC%D0%9D%D0%9E%D0%A1%D0%A2%D0%AC)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Любознательность — это желание постигать мир, узнавать новую информацию самостоятельно или с помощью доступных источников, например книг.(https://school-ethiopia.ru/baza-sochinenij/lyuboznatelnost-argumenty.html)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Углубляясь в эту тему я вижу ещё два термина, близких по смыслу: ЛЮБОПЫТСТВО и ИНТЕРЕС.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Любопытство — бессознательное стремление к познанию, присущее не только человеку, но и многим живым существам. (https://ru.wikipedia.org/wiki/%D0%9B%D1%8E%D0%B1%D0%BE%D0%BF%D1%8B%D1%82%D1%81%D1%82%D0%B2%D0%BE)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Интерес — Внимание, возбуждаемое чем-н. значительным, привлекательным. (https://languages.oup.com/)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как вы думаете для чего я привёл сюда эти термины и определения? Отвлекитесь от экрана и подумайте как часто говорите в своей речи эти три слова?

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                     А это картинка, чтобы случайно не прочесть текст ниже","image":{"type":"image","data":{"uuid":"8b9375e1-5548-58cd-951a-d71e66414533","width":495,"height":330,"size":52171,"type":"png","color":"100705","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Однажды я тоже задумался о том, как эти три слова влияют на моё сознание и что происходит в мышлении в следствие этого. Произношу эти три слова в слух: ЛЮБОЗНАНИЕ, ЛЮБОПЫТСТВО, ИНТЕРЕС. Чувствую в них совершенно разную тональность. А не эта ли тональность является результатом программирования себя на будущие события в жизни?

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                                Думаю...","image":{"type":"image","data":{"uuid":"be6995ae-9fff-5da4-ab1b-c5ab98857248","width":807,"height":807,"size":308708,"type":"png","color":"34524a","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если ЛЮБО-ЗНАНИЕ — это ЛЮБОВЬ к ЗНАНИЯМ. А ЛЮБО-ПЫТСТВО — пытать ЛЮБОВЬ? Разве можем мы пытать любовь, подвергать её пыткам, унижать это вечное чувство? А ведь оно дано нам Свыше. А если так, то я отвергаю то, что даётся мне свыше. .. В представленном в статье определении смысл слова не раскрыт, но если разобрать его по составу, то можно понять его сущность.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь если постоянно произносить это слово…

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Стану ли я счастливым человеком? Как будто изнутри приходит ответ «нет».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Дальше разбираюсь с «ИНТЕРЕСОМ». Читаю внимательно определение. И вижу слово «ВОЗБУЖДЕНИЕ». Это похоже на что-то проходящее, мы ПЫТАЕМ ИНТЕРЕС только к тому, что хотим закончить…

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А ДЛЯ ЧЕГО мне что-то заканчивать, если я просто ЛЮБЛЮ ЗНАТЬ? В первом случае тональность вверх, во втором и третьем тональность вниз. И тут на помощь приходит математика и графики.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                        Тональность вверх","image":{"type":"image","data":{"uuid":"bc6bb9b2-6d4a-5fe9-9ce0-a01bdd62fe0f","width":348,"height":382,"size":42788,"type":"png","color":"dcdddb","hash":"","external_service":[]}}}]}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                                       Тональность вниз","image":{"type":"image","data":{"uuid":"e72ee2af-a021-599c-9428-d0e9239cef2a","width":285,"height":177,"size":30089,"type":"png","color":"0d0506","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А ведь каждый человек желает, чтобы у него шло всё вверх, а не вниз :)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Какой вывод я сделал с этого?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Мы те, что произносим в нашей речи. Если много негативного тона (напр. «плохо», «ужасно», «противно», «ничего себе»), значит программируем себя на то, что никогда не сможем сделать.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) А если очень много положительного тона (напр. «хорошо», «замечательно», «прекрасно», «удивительно»), значит мы в большей вероятности сделаем всё запланированное и просто порадуемся результатам)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Негативный тон конечный, а позитивный вечный. В негативном состоянии обречён на проигрыш, а в позитивном — нет.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) Каждое произнесённое слово программирует на негативный или позитивный исход события

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Полученные выводы вдохновили копать ещё дальше

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Всё, что конечное — материальное, а бесконечное — вечное."}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как это связано с мышлением? Делюсь своими наблюдениями

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"463d8c1c-96c2-5ed1-8c89-2e88db501d52","width":807,"height":537,"size":174101,"type":"png","color":"2c2f36","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Любая материальная вещица, которую я видел в магазинах имеет свойство устаревать. И доходит до того, что в конечном итоге она умирает и Человечество о нём забывает. Когда вещь новая, то срок её жизни достаточно длинный, а кривая сильно далека от оси OX. Смотрите на картинку.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"В общем случае всё, придуманное человеком имеет вышеизложенный вид","image":{"type":"image","data":{"uuid":"97bf4c66-d8d1-56af-9682-38fa93ae140b","width":452,"height":339,"size":86024,"type":"png","color":"d3d3d3","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"                                                  Кривая жизненного технологического цикла","image":{"type":"image","data":{"uuid":"13ae08c0-1bb6-51ba-a729-33ba65a21c5c","width":443,"height":221,"size":27385,"type":"png","color":"e5e5e5","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь вопрос

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Всё, что описано выше являются материальными предметами. График наглядно показывает как материя устаревает. А что же в таком случае может быть бесконечно-вечное?"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"774b9c87-6e2f-5f4d-880c-215f25628962","width":757,"height":504,"size":217664,"type":"png","color":"bdc1bd","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На ум пришло мышление, но здесь всё не так то просто.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

У Человека мышление бывает материальным и нематериальным, то есть зацикленным либо на получение материального (потребление), либо на получение нематериального т.е. вечного. Что я под этим подразумеваю?

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Материальное это когда:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Человек стремится получить высокопоставленную должность

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Прочитать книгу без понимания о чём она

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Получить дорогой предмет

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) … (дальше читателя помыслить самим)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Нематериальное это когда:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Извлекаем уроки

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Получаем знания

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) Вдохновляемся…

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

4) … (дальше прошу читателя помыслить самим)

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Размышляя на эту тему появился вопрос: люди, которые мыслят материальными категориями себя убивают, а вечными — постоянно возрождают?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А ведь процесс устаревания и возрождения хорошо описывает график нормального распределения. Только это происходит в цикле… То есть после того, как кривая будет близкой к нулю, значит она возродится снова.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c02c14ad-08e1-5693-ae5f-47af8c6f2558","width":566,"height":351,"size":51053,"type":"png","color":"e6e4e4","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Приведу простой пример, который мне рассказал мой научный руководитель в аспирантуре.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"2e388b59-cee0-5eea-9de8-723b9c66c4aa","width":807,"height":454,"size":173760,"type":"png","color":"45463e","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Это крыски :) Обычные ничем не примечательные. И вот этих крыс так много расплодилось, что человек принимает решение отравить этих крыс. Всех ли крыс удастся отравить? Нет конечно:)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сильные особи выживут и возродят новую популяцию. Если принять во внимание что крысы, как и человек Божественные создания, то понятно почему популяция постоянно возрождается.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"d3112f07-d7e1-539f-a2ec-6f52a4dad9a1","width":318,"height":158,"size":16365,"type":"png","color":"e5e9ee","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А что делать с теми животными, которых больше с нами нет? Как можно их объяснить? ( вопрос вам на подумать)

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"А как же с мыслями?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Например, я студент и стремлюсь получить диплом ради диплома.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Буду ли я счастлив после получения материального, которое рано или поздно превратится в негодность? — Временно да, потом нет

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Буду ли я удовлетворён, когда получу диплом? — Временно да, а потом нет

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) … (дальше прошу читателя помыслить самим)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А что если у меня другое намерение. Я стремлюсь получить диплом ради ЗНАНИЙ.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Буду ли я счастлив, когда получаю знания? — Однозначно да, они мне пригодятся в жизни

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Буду ли я счастлив, если стану их использовать для блага мира и людей? — Однозначно да. Значит я сам для себя востребованный и это даёт мне стимул получать новые знания. Я любознательный, помните? :)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

3) … (дальше прошу читателя помыслить самим)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Итого по разделу выводы:

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

1) Если мы делаем ради получения диплома, ради получения должности, ради покупки новой модели телефона — это значит мы не живём

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

2) Если мы делаем для вечности, для собственного наполнения — мы живём, всякий раз возрождаясь.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В первом случае мы вечно страдаем и хотим умереть, во втором — всегда живём и радуемся жизни :)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

#человек #психология

"}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":0,"reposts":0,"views":40,"hits":88,"reads":null,"online":0},"dateFavorite":0,"hitsCount":88,"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/560592-pogovorim-pro-cheloveka","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":"Год на 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":1764925872,"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":"Год на 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":1764925872,"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":559814,"customUri":null,"subsiteId":1377277,"title":"Почему технологическим предпринимателем быть не модно?","date":1670823013,"dateModified":1670823013,"blocks":[{"type":"text","cover":true,"hidden":false,"anchor":"","data":{"text":"

Привет, vc! Это моя первая публикация на этом ресурсе и вот недавно созрел один существенный повод поразмышлять над проблемой предпринимательства в России.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В начале декабря посчастливилось принять участие в конференции г. Екатеринбург в Ельцин-Центре. Формат конференции не похож на привычный сценарий: когда мы заходим в аудиторию, слушаем экспертов, задаём вопросы после выступления.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В отличии от привычного сценария эта конференция носит формат Организационно-Деятельностной Игры (ОДИ). Автором и разработчиком ее является заслуженный советский и российский философ, методолог, культурный деятель Георгий Петрович Щедровицкий. О его деятельности можно узнать по материалам Википедии. После его смерти (в 1994 году) появилось много сподвижников. Они обращали и обращают по сей день внимание общественности на проблемы, существующие в разных экономических отраслях, буквально сталкивая их мнения лбами. Таким образом в процессе обсуждения появляются варианты решения сложных и важных задач.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"b452cce7-2e4b-5242-892e-9b6588009ec1","width":3574,"height":2082,"size":653626,"type":"jpg","color":"786c68","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Со временем практика проведения подобных игр распространилось и стала традиционной по крайней мере в моём городе — Екатеринбурге.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В этом году темой выбран тезис, который неоднократно высказывал президент Российской Федерации Путин В. В. «о решении вопроса обретения технологического суверенитета Российской Федерации».

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Задача очень сложная. Усложняется она и тем, что Российская Федерация испытывает существенный дефицит в квалифицированных кадрах и технологиях, не говоря уже о санкциях, наложенных на Россию со стороны западных стран.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В результате организаторы игры предложили участникам разделиться на 8 групп:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

Корпорации

","

Предприниматели

","Органы власти","

Идеологи

","Экономисты","Разработчики","Пользователи","Методологи"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Но не каждая группа дошла до финального завершения (а игра длилась 7 дней) . Таким образом:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["

НЕ сформировалась группа Пользователи;

","

Экономисты и Органы власти объединились в одну группу под общим названием “Экономика и право”.

","В группе “Предприниматели” присутствовал всего лишь один человек.","

Чуть больше людей в группе “Методология”

","Ещё больше “Экономика и право”.","

Максимальное количество игроков набрали группы: Корпорации, Разработчики и Идеологи.

"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На мой взгляд полученное распределение отражает реальную ситуацию, в которой на данный момент находится Россия: всем интересно идти в корпорации, в разработку, органы власти, НО практически никто не хочет быть предпринимателем и никто не хочет брать ответственность за пользователя. Мой выбор пал на предпринимательство.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ первый. самоопределение участников И ГРУПП. готовы ЛИ МЫ принять участие В судьбе страны?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Пробуем разобраться в роли предпринимателя в России. Для этого наша команда подготовила небольшую презентацию. Ниже представлю схематично её содержание.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"7daf8bbd-2795-5958-b48d-64dc76dbdbbe","width":702,"height":616,"size":33645,"type":"png","color":"dbdbdb","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"f5024764-c024-598a-b5b7-3da013032b52","width":506,"height":426,"size":10444,"type":"png","color":"dbdbdb","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Услуга или продукт предпринимателя возникает от его тесного сотрудничества с корпорациями и государством в обществе и среде.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Из этого следует вывод, что в первый день задача самоопределения позиции технологического предпринимателя в обществе решена не была.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ второй. анализ ситуации В профессиональной СФЕРЕ деятельности. причины технологического отставания россии."}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Если на игре гипотеза подтверждается, следовательно вероятнее всего в реальной жизни может быть точно также. Таким образом появляется другая схема.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"7b5ee285-4942-54ce-b3c7-ab537e27a669","width":989,"height":900,"size":22143,"type":"png","color":"e1e1e1","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Идея этой схемы заключается в том, что предприниматель выступает в роли посредника между группами. Тогда для уточнения этой роли определены черты, отличающие предпринимателя от других групп. Среди них:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Отслеживание тенденций","Организация выгодного дела
","Отслеживание перспектив развития тенденций
"],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Так значит предприниматель — это не просто посредник, а ещё и внедритель? Ведь что делал Илон Маск? Внедрял технологии. Что делал Стив Джобс? Тоже внедрял технологии.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А существуют ли подобные внедренцы технологий в России, кроме Павла Дурова, который, на секундочку, тоже вынужден покинуть Россию? Возможно они есть, но их настолько маленькое количество, что о них мало кто знает.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"c1b78c35-1316-5140-9e3d-942ade2c4329","width":576,"height":335,"size":32384,"type":"png","color":"c3c3c3","hash":"","external_service":[]}}}]}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Внедрение технологий в промышленное производство не происходит. Иначе мы бы это видели. Следовательно в России количество технологических предпринимателей стремится к нулю.

","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ третий. проблематизация. ЧТО мешает обрести суверенитет?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Когда начался третий день игры, ведущий дал понять группе, что это самый сложный день. Потому что по замыслу организаторов, нам следовало: (1) определить роль предпринимателя, (2) проанализировать ситуацию в профессиональной сфере деятельности и (3) определить проблемы, с которой сталкивается предприниматель в процессе своей деятельности.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вторую задачу мы более-менее выполнили. Но проблема самоопределения не решена. В добавок мы определили, что в России технологическое предпринимательство плохо развивается. Вроде кажись государством выделяются колоссальные денежные средства, а результата видимого нет.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

С этим багажом мы начали третий день, по итогу которого появилась новая схема. В центр рисунка мы поместили идеологическую проблему общества — наличие потребительского отношения. Мы думали, что именно оно является корнем проблемы малого количества предпринимателей в России.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"2bcb2d95-8dc5-5b04-b8f7-53af3841ca58","width":877,"height":740,"size":65556,"type":"png","color":"dbdbdb","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Потребительское отношение порождает отсутствие мотивации у будущего поколения иметь свое дело в сфере производства это приводит к отсутствию проявления технологического предпринимательства и внедрению разработок в промышленное производство. И при этом примечательно, что предложенные факторы являются взаимозаменяемыми. Например в ситуации, когда студент ищет работу. (У меня нет опыта, потому что нет работы. Нет работы, потому что нет опыта)

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Данная схема позволила сформулировать последствия описанных выше факторов. Они получены в результате мозгового штурма:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Никого не интересует развитие Российской Федерации","Никто не берёт ответственность за развитие Российской Федерации
","Производство технологий в России низкокачественное
","Быть предпринимателем не в моде
","В России инициатива наказуема
","Отсутствие осознанности, что Российская Федерация находится в опасности."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А теперь итоги: нашей группой ключевой проблемой выбрана такая, которую предприниматель решить не в состоянии. Он не может поменять идеологию общества, в которой живёт. Он может лишь подстроиться под идеологию и предложить решение. В этот день мы вероятнее всего были очень близки к решению задачи роли технологического предпринимателя в жизни России, однако задача первого дня всё же не решена.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ ЧЕТВЁРТЫЙ. КАК обрести технологический суверенитет?"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Четвертый день игры мы решили повернуться внутрь себя и задать вопрос: “Что мы можем сделать, чтобы обрести суверенитет? ”. И решили сфокусироваться не на то, что происходит вокруг предпринимателя, а что происходит внутри его деятельности.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Таким образом методом мозгового штурма были пересмотрены характеристики предпринимателя в России. Получился следующий список:

"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["Инициативность","Нацеленность на результат
","Ориентация на разработку и внедрение продукта
","Деньги не первостепенны."],"type":"UL"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Возможно, по последнему пункту, читатель может раскритиковать выводы нашей группы. Но в процессе игры, мы всё-таки нашли стартап, который может быть отнесен к технологическому предпринимательству. Данный стартап называется “Канатаход”, разработанный компанией “Лаборатория будущего”. В беседе с руководителем компании, наша группа поняла, что у них есть готовый продукт “Канатоход”, а внедрить они в производство не получается - не покупают. В лучшем случае предлагают внедрять его незаконными способами. Данный робот проверяет сетевой кабель на предмет повреждений и их устраняет. Казалось разработка есть, даже робот есть, а денег и продаж нет.

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"18b76d6c-686e-5dc8-bd57-8a55d8cefe20","width":750,"height":500,"size":93151,"type":"png","color":"91c7f8","hash":"","external_service":[]}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На основе полученных сведений команда сформулировала выводы:

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Инновационные продукты не хотят покупать и внедрять в Российской Федерации.

Причиной может являться плохой продукт, либо плохая бизнес-модель.

В этой ситуации возможным вариантом решения может быть изменение бизнес-модели либо улучшение качества продукт

","subline1":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"2ba5a5be-181f-5aae-9885-b6a66b033061","width":1560,"height":1170,"size":614856,"type":"png","color":"6f5e54","hash":"","external_service":[]}}}]}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ДЕНЬ ПЯТЫЙ. ПОДВЕДЕНИЕ ИТОГОВ, САМООПРЕДЕЛЕНИЕ УЧАСТНИКОВ."}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Последний день игры был посвящён рефлексии участников. Мы анализировали свою роль в игре. Примечательно, что группой “Предприниматели” было подмечено, что проблема достижения технологического суверенитета может также быть низкий уровень качества образования в Российской Федерации. Следует отметить, что группы “Наука и образование” на игре вообще не была представлена. Об этом мной было сказано в заключительном докладе. Рекомендую его к просмотру. Заранее прошу прощения за низкое качество записи.

"}},{"type":"video","cover":false,"hidden":false,"anchor":"","data":{"title":"","video":{"type":"video","data":{"thumbnail":{"type":"image","data":{"uuid":"18492d12-e3f7-50a2-aba7-3e9a3876b428","width":1280,"height":720,"size":102256,"type":"jpg","color":"ecf2f1","hash":"","external_service":[]}},"width":800,"height":450,"time":0,"external_service":{"name":"youtube","id":"T-piWhH1zwo"}}}}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"ИТОГИ ИГРЫ"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"quiz","cover":false,"hidden":false,"anchor":"","data":{"uid":"","hash":"154edc91c3cfcd00","tmp_hash":"","title":"А у вас был опыт участия в организационно-деятельностных играх?","items":{"a16708227550":"Да","a16708227551":"Нет"},"is_public":false,"date_created":0}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":0,"favorites":1,"reposts":0,"views":35,"hits":262,"reads":null,"online":0},"dateFavorite":0,"hitsCount":262,"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/559814-pochemu-tehnologicheskim-predprinimatelem-byt-ne-modno","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":"Год на 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":1764925872,"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":"Год на 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":1764925872,"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}}],"cursor":"PuR2GsZKFTvhhG9UDIbj7NrVS6IzQAa09I6wtbz/zlbeaPDONLWpx0VZ4WpFlm4=","isAnonymized":true}};