HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>2 авг 2022</li>
2 <ul><li>2 авг 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Готовимся к собеседованию на должность Python-разработчика. Знакомимся с системой типов в Python, встроенными типами данных и правилами работы с ними.</p>
4 </ul><p>Готовимся к собеседованию на должность Python-разработчика. Знакомимся с системой типов в Python, встроенными типами данных и правилами работы с ними.</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6 <p>Пишет об истории IT, разработке и советской кибернетике. Знает Python, JavaScript и немного C++, но предпочитает писать на русском.</p>
6 <p>Пишет об истории IT, разработке и советской кибернетике. Знает Python, JavaScript и немного C++, но предпочитает писать на русском.</p>
7 - <p>Python - объектно-ориентированный язык программирования, его основу составляют объекты и классы. Объект - это область памяти компьютера, которая описывается<em>типом (он же класс)</em>и <em>значением</em>. При этом от типа зависит область значений объекта, операции и методы, которые к нему можно применять.</p>
7 + <p>Python - объектно-ориентированный язык программирования, его основу составляют объекты и классы. Объект - это область памяти компьюера, которая описывается<em>типом (он же класс)</em>и <em>значением</em>. При этом от типа зависит область значений объекта, операции и методы, которые к нему можно применять.</p>
8 <p>Python предоставляет богатый набор встроенных типов данных. Поэтому при решении стандартных задач питонист реже пишет собственные классы, чем, например, разработчик на Java.</p>
8 <p>Python предоставляет богатый набор встроенных типов данных. Поэтому при решении стандартных задач питонист реже пишет собственные классы, чем, например, разработчик на Java.</p>
9 <p>Из этой статьи вы узнаете:</p>
9 <p>Из этой статьи вы узнаете:</p>
10 <ul><li><a>что такое строгая динамическая типизация в Python</a>;</li>
10 <ul><li><a>что такое строгая динамическая типизация в Python</a>;</li>
11 <li><a>что такое изменяемые и неизменяемые типы данных</a>;</li>
11 <li><a>что такое изменяемые и неизменяемые типы данных</a>;</li>
12 <li><a>какие встроенные типы данных есть в Python</a>;</li>
12 <li><a>какие встроенные типы данных есть в Python</a>;</li>
13 <li><a>что почитать про типы данных в Python</a>.</li>
13 <li><a>что почитать про типы данных в Python</a>.</li>
14 </ul><p>Python - язык программирования со строгой динамической типизацией.</p>
14 </ul><p>Python - язык программирования со строгой динамической типизацией.</p>
15 <p>"<strong>Строгая"</strong>означает, что язык не производит неявные преобразования типов и не создаёт сюрпризов при их случайном смешении.</p>
15 <p>"<strong>Строгая"</strong>означает, что язык не производит неявные преобразования типов и не создаёт сюрпризов при их случайном смешении.</p>
16 <p>Чтобы понять, о чём идёт речь, запустите этот код на Python и JavaScript, а затем сравните результаты:</p>
16 <p>Чтобы понять, о чём идёт речь, запустите этот код на Python и JavaScript, а затем сравните результаты:</p>
17 #классический пример из JavaScript some_number = 1 + '1'<p>JavaScript любезно выдаст строку '11', а Python выругается такой фразой:</p>
17 #классический пример из JavaScript some_number = 1 + '1'<p>JavaScript любезно выдаст строку '11', а Python выругается такой фразой:</p>
18 <p>TypeError: unsupported operand type (s) for +: 'int' and 'str'</p>
18 <p>TypeError: unsupported operand type (s) for +: 'int' and 'str'</p>
19 <p>Можно подумать, что JavaScript лучше, чем Python, - ведь он даёт больше свободы разработчикам. Но не всё так однозначно: в больших скриптах, на 3-5 тысяч строк, такая свобода может сыграть злую шутку. Например, если банковская программа вместо 100 + 100 = 200 долларов спишет со счёта 100100 :)</p>
19 <p>Можно подумать, что JavaScript лучше, чем Python, - ведь он даёт больше свободы разработчикам. Но не всё так однозначно: в больших скриптах, на 3-5 тысяч строк, такая свобода может сыграть злую шутку. Например, если банковская программа вместо 100 + 100 = 200 долларов спишет со счёта 100100 :)</p>
20 <p>К счастью, в Python такой трюк не пройдёт. Строгий интерпретатор забьёт тревогу и не позволит разработчику смешать типы.</p>
20 <p>К счастью, в Python такой трюк не пройдёт. Строгий интерпретатор забьёт тревогу и не позволит разработчику смешать типы.</p>
21 <p><strong>"Динамическая"</strong>означает, что типы объектов определяются в процессе исполнения программы (runtime). Поэтому питонисты могут не указывать типы переменных. Переменные в Python - это всего лишь указатели на объекты, они не содержат информации о типе.</p>
21 <p><strong>"Динамическая"</strong>означает, что типы объектов определяются в процессе исполнения программы (runtime). Поэтому питонисты могут не указывать типы переменных. Переменные в Python - это всего лишь указатели на объекты, они не содержат информации о типе.</p>
22 <p>Вы можете создавать и изменять переменные в любой момент, главное - присвойте значение:</p>
22 <p>Вы можете создавать и изменять переменные в любой момент, главное - присвойте значение:</p>
23 #год рождения - целое число 1995 year_of_birth = 1995 print(year_of_birth) #заменили на строку "nineteen ninety five" year_of_birth = "nineteen ninety five" print(year_of_birth)<p>А вот в языках со статической типизацией, таких как C++, C# и Java, типы объектов определяются ещё на этапе компиляции. Поэтому при попытке запустить такой код, например, в C++ компилятор выдаст ошибку:</p>
23 #год рождения - целое число 1995 year_of_birth = 1995 print(year_of_birth) #заменили на строку "nineteen ninety five" year_of_birth = "nineteen ninety five" print(year_of_birth)<p>А вот в языках со статической типизацией, таких как C++, C# и Java, типы объектов определяются ещё на этапе компиляции. Поэтому при попытке запустить такой код, например, в C++ компилятор выдаст ошибку:</p>
24 <p>"невозможно преобразовать "const char [20]“ в "int“"</p>
24 <p>"невозможно преобразовать "const char [20]“ в "int“"</p>
25 <p>Придётся объявлять новую переменную:</p>
25 <p>Придётся объявлять новую переменную:</p>
26 int main() { int year_of_birth{ 5 }; std::cout &lt;&lt; year_of_birth &lt;&lt; std::endl; //создадим новую переменную str_year_of_birth string str_year_of_birth {"nineteen ninety five"}; std::cout &lt;&lt; str_year_of_birth &lt;&lt; std::endl; return 0; }<p>Мы оставим детальное сравнение статической и динамической типизации для другой статьи. На практике и та, и другая имеют свои плюсы и минусы.</p>
26 int main() { int year_of_birth{ 5 }; std::cout &lt;&lt; year_of_birth &lt;&lt; std::endl; //создадим новую переменную str_year_of_birth string str_year_of_birth {"nineteen ninety five"}; std::cout &lt;&lt; str_year_of_birth &lt;&lt; std::endl; return 0; }<p>Мы оставим детальное сравнение статической и динамической типизации для другой статьи. На практике и та, и другая имеют свои плюсы и минусы.</p>
27 <p>Типы данных в Python можно разделить на изменяемые и неизменяемые.</p>
27 <p>Типы данных в Python можно разделить на изменяемые и неизменяемые.</p>
28 <p>Когда мы присваиваем новое значение неизменяемому объекту, Python не перезаписывает его, а создаёт новый объект с тем же именем. Чтобы в этом убедиться, достаточно проверить id - уникальный номер, который присваивается каждому объекту в Python:</p>
28 <p>Когда мы присваиваем новое значение неизменяемому объекту, Python не перезаписывает его, а создаёт новый объект с тем же именем. Чтобы в этом убедиться, достаточно проверить id - уникальный номер, который присваивается каждому объекту в Python:</p>
29 #числовые типы в Python - неизменяемые int_obj = 10 print("id of int_obj: ", id(int_obj)) #140717895746096 int_obj += 5 print("id of int_obj: ", id(int_obj)) #140717895746256<p>Когда мы прибавляем 5 к переменной int_obj, на её месте создаётся новый объект с тем же именем. Заметьте: при первом выводе id равен 140717895746096, а после выполнения операции сложения - 140717895746256.</p>
29 #числовые типы в Python - неизменяемые int_obj = 10 print("id of int_obj: ", id(int_obj)) #140717895746096 int_obj += 5 print("id of int_obj: ", id(int_obj)) #140717895746256<p>Когда мы прибавляем 5 к переменной int_obj, на её месте создаётся новый объект с тем же именем. Заметьте: при первом выводе id равен 140717895746096, а после выполнения операции сложения - 140717895746256.</p>
30 <p>А вот идентификатор списка list_obj не меняется, потому что списки в Python - это изменяемые объекты:</p>
30 <p>А вот идентификатор списка list_obj не меняется, потому что списки в Python - это изменяемые объекты:</p>
31 #а объекты типа list - изменяемые list_obj = [10, 20, 30] print("id of list_obj: ", id(list_obj)) #2302150079496 list_obj += [40] print("id of list_obj: ", id(list_obj)) #2302150079496<p>К неизменяемым объектам относятся числа, строки и кортежи, а к изменяемым - списки, словари и множества. Это свойство нужно учитывать при передаче объектов в функцию. Например, если вы не хотите, чтобы функция изменила исходный список, передайте в неё копию этого списка.</p>
31 #а объекты типа list - изменяемые list_obj = [10, 20, 30] print("id of list_obj: ", id(list_obj)) #2302150079496 list_obj += [40] print("id of list_obj: ", id(list_obj)) #2302150079496<p>К неизменяемым объектам относятся числа, строки и кортежи, а к изменяемым - списки, словари и множества. Это свойство нужно учитывать при передаче объектов в функцию. Например, если вы не хотите, чтобы функция изменила исходный список, передайте в неё копию этого списка.</p>
32 <p>Теперь рассмотрим встроенные типы данных языка Python.</p>
32 <p>Теперь рассмотрим встроенные типы данных языка Python.</p>
33 <p>В недрах интерпретатора Python зашито много типов данных. Их можно разделить на три группы:</p>
33 <p>В недрах интерпретатора Python зашито много типов данных. Их можно разделить на три группы:</p>
34 <ul><li>Простые - числа и строки.</li>
34 <ul><li>Простые - числа и строки.</li>
35 <li>Коллекции - списки, кортежи и словари.</li>
35 <li>Коллекции - списки, кортежи и словари.</li>
36 <li>Остальные - файлы, итераторы, сокеты, NaN.</li>
36 <li>Остальные - файлы, итераторы, сокеты, NaN.</li>
37 </ul><p>Отдавайте предпочтение встроенным типам. Они упрощают разработку и более эффективны, чем пользовательские классы, потому что представляют собой оптимизированные структуры данных на языке C.</p>
37 </ul><p>Отдавайте предпочтение встроенным типам. Они упрощают разработку и более эффективны, чем пользовательские классы, потому что представляют собой оптимизированные структуры данных на языке C.</p>
38 <p>Программы на Python умеют работать с целыми числами (int), числами с плавающей точкой (float) и комплексными числами (complex). В целом числовые объекты в Python поддерживают те же операции, что и числа в других языках программирования:</p>
38 <p>Программы на Python умеют работать с целыми числами (int), числами с плавающей точкой (float) и комплексными числами (complex). В целом числовые объекты в Python поддерживают те же операции, что и числа в других языках программирования:</p>
39 a = 20.5 b = 10 #сложение sum_ab = a + b print(sum_ab) #результат: 30.5 #умножение mult_ab = a * b print(mult_ab) #результат: 205 #деление div_ab = a / b print(div_ab) #результат: 2.05<p>Также в стандартной библиотеке Python есть модуль math, который подключается директивой import math, - он содержит широкий набор функций для работы с числовыми данными:</p>
39 a = 20.5 b = 10 #сложение sum_ab = a + b print(sum_ab) #результат: 30.5 #умножение mult_ab = a * b print(mult_ab) #результат: 205 #деление div_ab = a / b print(div_ab) #результат: 2.05<p>Также в стандартной библиотеке Python есть модуль math, который подключается директивой import math, - он содержит широкий набор функций для работы с числовыми данными:</p>
40 import math a = 20.5 b = 10 #факториал числа b math_factor = math.factorial(b) print(math_factor) #результат: 3628800 #посчитать остаток от деления a на b math_fmod = math.fmod(a, b) print(math_fmod) #результат:0.5 #отсечь дробную часть у числа a math_trunc = math.trunc(a) print(math_trunc) #результат: 20<p>А теперь получим какое-нибудь очень большое число. Например, возведём 27 в 560-ю степень:</p>
40 import math a = 20.5 b = 10 #факториал числа b math_factor = math.factorial(b) print(math_factor) #результат: 3628800 #посчитать остаток от деления a на b math_fmod = math.fmod(a, b) print(math_fmod) #результат:0.5 #отсечь дробную часть у числа a math_trunc = math.trunc(a) print(math_trunc) #результат: 20<p>А теперь получим какое-нибудь очень большое число. Например, возведём 27 в 560-ю степень:</p>
41 print(27 ** 560) #результат: #366191221537348906724224962113233696161029018222927370716739871087661400220838310915248021370798668687237512226282332116... и так далее<p>Для таких объектов в Python есть специальный тип - long. Но если в том же C++ самый большой тип long long ограничен 64 битами (самое большое положительное число равно 18 446 744 073 709 551 615), то "длинные числа" в Python не ограничены.</p>
41 print(27 ** 560) #результат: #366191221537348906724224962113233696161029018222927370716739871087661400220838310915248021370798668687237512226282332116... и так далее<p>Для таких объектов в Python есть специальный тип - long. Но если в том же C++ самый большой тип long long ограничен 64 битами (самое большое положительное число равно 18 446 744 073 709 551 615), то "длинные числа" в Python не ограничены.</p>
42 <p>Строки (string) - это последовательности символов, поэтому к ним применимы многие методы других последовательностей: списков и кортежей. Например, обращение к элементу по индексу, вычисление количества символов, конкатенация и получение среза.</p>
42 <p>Строки (string) - это последовательности символов, поэтому к ним применимы многие методы других последовательностей: списков и кортежей. Например, обращение к элементу по индексу, вычисление количества символов, конкатенация и получение среза.</p>
43 <p>Рассмотрим основные операции со строками в Python:</p>
43 <p>Рассмотрим основные операции со строками в Python:</p>
44 first_str = 'skill' second_str = 'box' #конкатенация строк some_string = first_str + second_str print(some_string) #skillbox #длина строки length = len(some_string) print(length) #8 #первый символ строки first_symbol = some_string[0] print(first_symbol) #s #срез строки с первого по пятый символ skill_slice = some_string[0:5] print(skill_slice) #skill<p>Строки поддерживают работу с отрицательными индексами. Их удобно использовать, когда нужно обратиться к элементу с конца:</p>
44 first_str = 'skill' second_str = 'box' #конкатенация строк some_string = first_str + second_str print(some_string) #skillbox #длина строки length = len(some_string) print(length) #8 #первый символ строки first_symbol = some_string[0] print(first_symbol) #s #срез строки с первого по пятый символ skill_slice = some_string[0:5] print(skill_slice) #skill<p>Строки поддерживают работу с отрицательными индексами. Их удобно использовать, когда нужно обратиться к элементу с конца:</p>
45 #последний символ строки last_symbol = some_string[-1] print(last_symbol) #x #последние три символа строки 'skillbox' box_slice = some_string[-3:] print(box_slice) #box<p>Кроме того, у типа string есть ряд методов, уникальных для него:</p>
45 #последний символ строки last_symbol = some_string[-1] print(last_symbol) #x #последние три символа строки 'skillbox' box_slice = some_string[-3:] print(box_slice) #box<p>Кроме того, у типа string есть ряд методов, уникальных для него:</p>
46 #поиск подстроки #если подстрока найдена, метод вернёт позицию её первого элемента, если нет - вернёт -1 ill_substr = some_string.find('ill') print(ill_substr) #поиск подстроки с заменой, заменим skill на school school_box = some_string.replace('skill', 'school') print(school_box) #schoolbox #разбить строку по разделителю student_name = 'Ivan_Ivanovich_Petrov' list_of_substr = student_name.split('_') print(list_of_substr) #['Ivan', 'Ivanovich', 'Petrov']<p>Список (list) - это упорядоченная коллекция объектов. Списки могут иметь сколько угодно уровней вложенности и хранить неограниченное количество объектов. Кроме того, в одном списке могут одновременно храниться объекты разных типов.</p>
46 #поиск подстроки #если подстрока найдена, метод вернёт позицию её первого элемента, если нет - вернёт -1 ill_substr = some_string.find('ill') print(ill_substr) #поиск подстроки с заменой, заменим skill на school school_box = some_string.replace('skill', 'school') print(school_box) #schoolbox #разбить строку по разделителю student_name = 'Ivan_Ivanovich_Petrov' list_of_substr = student_name.split('_') print(list_of_substr) #['Ivan', 'Ivanovich', 'Petrov']<p>Список (list) - это упорядоченная коллекция объектов. Списки могут иметь сколько угодно уровней вложенности и хранить неограниченное количество объектов. Кроме того, в одном списке могут одновременно храниться объекты разных типов.</p>
47 <p>Над списками можно производить те же операции, что и над строками:</p>
47 <p>Над списками можно производить те же операции, что и над строками:</p>
48 some_list = ['s', 'k', 'i', 'l', 'l', 'b', 'o', 'x'] #первый символ списка list_first_symbol = some_list[0] print(list_first_symbol) #s #срез списка с первого по пятый элемент list_slice = some_list[0:5] print(list_slice) #['s', 'k', 'i', 'l', 'l'] #последний элемент списка list_last_symbol = some_list[-1] print(list_last_symbol) #x<p>Но у списков есть и специфические методы, которые присущи только им. Например, можно добавить новый элемент в конце списка, удалить i-й элемент или отсортировать список:</p>
48 some_list = ['s', 'k', 'i', 'l', 'l', 'b', 'o', 'x'] #первый символ списка list_first_symbol = some_list[0] print(list_first_symbol) #s #срез списка с первого по пятый элемент list_slice = some_list[0:5] print(list_slice) #['s', 'k', 'i', 'l', 'l'] #последний элемент списка list_last_symbol = some_list[-1] print(list_last_symbol) #x<p>Но у списков есть и специфические методы, которые присущи только им. Например, можно добавить новый элемент в конце списка, удалить i-й элемент или отсортировать список:</p>
49 #добавить новый элемент в конец списка some_list.append('!') print(some_list) #['s', 'k', 'i', 'l', 'l', 'b', 'o', 'x', '!'] #удалить элемент с индексом 3 some_list.pop(3) print(some_list) #'s', 'k', 'i', 'l', 'b', 'o', 'x', '!'] #отсортировать элементы списка в порядке возрастания some_list.sort() print(some_list) #['!', 'b', 'i', 'k', 'l', 'o', 's', 'x']<p>Кортежи (tuple) - это те же списки, только неизменяемые. Над ними можно производить те же операции, что и над списками, - кроме тех, которые изменяют кортеж:</p>
49 #добавить новый элемент в конец списка some_list.append('!') print(some_list) #['s', 'k', 'i', 'l', 'l', 'b', 'o', 'x', '!'] #удалить элемент с индексом 3 some_list.pop(3) print(some_list) #'s', 'k', 'i', 'l', 'b', 'o', 'x', '!'] #отсортировать элементы списка в порядке возрастания some_list.sort() print(some_list) #['!', 'b', 'i', 'k', 'l', 'o', 's', 'x']<p>Кортежи (tuple) - это те же списки, только неизменяемые. Над ними можно производить те же операции, что и над списками, - кроме тех, которые изменяют кортеж:</p>
50 some_tuple = ('p', 'y', 't', 'h', 'o', 'n') #последний элемент кортежа last_element = some_tuple[-1] print(last_element) #срез кортежа с первого по третий элемент tuple_slice = some_tuple[0:3] print(tuple_slice) #меняем значение первого элемента some_tuple[0] = 'c'<p>При попытке заменить элемент 'p' на 'c' Python выдаст сообщение об ошибке:</p>
50 some_tuple = ('p', 'y', 't', 'h', 'o', 'n') #последний элемент кортежа last_element = some_tuple[-1] print(last_element) #срез кортежа с первого по третий элемент tuple_slice = some_tuple[0:3] print(tuple_slice) #меняем значение первого элемента some_tuple[0] = 'c'<p>При попытке заменить элемент 'p' на 'c' Python выдаст сообщение об ошибке:</p>
51 <p>TypeError: 'tuple' object does not support item assignment</p>
51 <p>TypeError: 'tuple' object does not support item assignment</p>
52 <p>Вы спросите: зачем нужны кортежи, когда есть списки с более широким набором методов и операций? Как мы уже сказали выше, иногда программистам важно быть уверенными, что функция не изменит значение объекта. Как раз для таких случаев и годятся кортежи.</p>
52 <p>Вы спросите: зачем нужны кортежи, когда есть списки с более широким набором методов и операций? Как мы уже сказали выше, иногда программистам важно быть уверенными, что функция не изменит значение объекта. Как раз для таких случаев и годятся кортежи.</p>
53 <p>Словарь (dict) - это неупорядоченная коллекция пар "ключ - значение". В качестве ключей могут выступать любые неизменяемые объекты (числа, строки и даже кортежи).</p>
53 <p>Словарь (dict) - это неупорядоченная коллекция пар "ключ - значение". В качестве ключей могут выступать любые неизменяемые объекты (числа, строки и даже кортежи).</p>
54 <p>Получать доступ к элементам, удалять и создавать новые довольно просто:</p>
54 <p>Получать доступ к элементам, удалять и создавать новые довольно просто:</p>
55 #словарь с данными об ученике Skillbox some_dict = {'first_name':'Алексей', 'age':35, 'is_paid':True, 'courses':['python', 'javascript', 'html/css'], } print(some_dict) #элемент с ключом 'last_name' print(some_dict['first_name']) # 'Алексей' #создать элемент, присвоив значение несуществующему ключу some_dict['second_name'] = 'Петров' print(some_dict) #{'first_name': 'Алексей', 'age': 35, 'is_paid': True, 'courses': ['python', 'javascript', 'html/css'], 'second_name': 'Петров'} del some_dict['is_paid'] print(some_dict) #{'first_name': 'Алексей', 'age': 35, 'courses': ['python', 'javascript', 'html/css'], 'second_name': 'Петров'}<p>В качестве значений словарь может хранить объекты совершенно разных типов - даже другие словари. Глубина вложенности не ограничена.</p>
55 #словарь с данными об ученике Skillbox some_dict = {'first_name':'Алексей', 'age':35, 'is_paid':True, 'courses':['python', 'javascript', 'html/css'], } print(some_dict) #элемент с ключом 'last_name' print(some_dict['first_name']) # 'Алексей' #создать элемент, присвоив значение несуществующему ключу some_dict['second_name'] = 'Петров' print(some_dict) #{'first_name': 'Алексей', 'age': 35, 'is_paid': True, 'courses': ['python', 'javascript', 'html/css'], 'second_name': 'Петров'} del some_dict['is_paid'] print(some_dict) #{'first_name': 'Алексей', 'age': 35, 'courses': ['python', 'javascript', 'html/css'], 'second_name': 'Петров'}<p>В качестве значений словарь может хранить объекты совершенно разных типов - даже другие словари. Глубина вложенности не ограничена.</p>
56 <p>Так как словари являются<em>отображениями</em>, а не последовательностями, то элементы в них не упорядочены. Это значит, что при выводе элементов в цикле for их порядок не всегда будет совпадать с порядком, заданным при инициализации словаря.</p>
56 <p>Так как словари являются<em>отображениями</em>, а не последовательностями, то элементы в них не упорядочены. Это значит, что при выводе элементов в цикле for их порядок не всегда будет совпадать с порядком, заданным при инициализации словаря.</p>
57 <p>Объекты-файлы позволяют работать с файловой системой компьютера. Чтобы создать такой объект, нужно передать функции open имя файла и режим доступа (чтение или запись).</p>
57 <p>Объекты-файлы позволяют работать с файловой системой компьютера. Чтобы создать такой объект, нужно передать функции open имя файла и режим доступа (чтение или запись).</p>
58 <p>Допустим, вы собрались написать книгу о Python. Тогда нужно создать файловый объект в режиме записи - w write, а затем записывать в него строки текста с помощью метода write ():</p>
58 <p>Допустим, вы собрались написать книгу о Python. Тогда нужно создать файловый объект в режиме записи - w write, а затем записывать в него строки текста с помощью метода write ():</p>
59 #начнём с первой главы #создадим файл с книгой в текущей папке my_book = open("my_book.txt", 'w') my_book.write('Chapter 1: Hello, Python!\n') my_book.write('To be continued...\n') #закроем поток записи my_book.close()<p>А теперь проверим, всё ли сохранилось как надо. Для этого создадим новый объект-файл с помощью той же функции open, но в режиме чтения - r read:</p>
59 #начнём с первой главы #создадим файл с книгой в текущей папке my_book = open("my_book.txt", 'w') my_book.write('Chapter 1: Hello, Python!\n') my_book.write('To be continued...\n') #закроем поток записи my_book.close()<p>А теперь проверим, всё ли сохранилось как надо. Для этого создадим новый объект-файл с помощью той же функции open, но в режиме чтения - r read:</p>
60 #откроем нашу книгу и проверим содержимое book = open("my_book.txt", 'r') text = book.read() print(text)<p>Как вы можете убедиться, все строки, которые мы записали в файл, на месте.</p>
60 #откроем нашу книгу и проверим содержимое book = open("my_book.txt", 'r') text = book.read() print(text)<p>Как вы можете убедиться, все строки, которые мы записали в файл, на месте.</p>
61 <p>Для закрепления - небольшая шпаргалка по базовым типам в Python:</p>
61 <p>Для закрепления - небольшая шпаргалка по базовым типам в Python:</p>
62 <em>Изображение: Skillbox Media</em><p>Теперь вы знаете о типах в Python достаточно, чтобы решать простейшие задачи и даже ответить на вопросы на собеседовании. Если хотите узнать о системе типов ещё больше - почитайте классические источники:</p>
62 <em>Изображение: Skillbox Media</em><p>Теперь вы знаете о типах в Python достаточно, чтобы решать простейшие задачи и даже ответить на вопросы на собеседовании. Если хотите узнать о системе типов ещё больше - почитайте классические источники:</p>
63 <ul><li>"Изучаем Python 3", Часть II. Типы и операции, М. Лутц;</li>
63 <ul><li>"Изучаем Python 3", Часть II. Типы и операции, М. Лутц;</li>
64 <li>"Программирование на Python 3", Глава 2. Типы данных, М. Саммерфилд;</li>
64 <li>"Программирование на Python 3", Глава 2. Типы данных, М. Саммерфилд;</li>
65 <li>документацию Python, раздел "<a>Built-in Types</a>".</li>
65 <li>документацию Python, раздел "<a>Built-in Types</a>".</li>
66 </ul><p>Python для всех</p>
66 </ul><p>Python для всех</p>
67 <p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
67 <p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
68 <p><a>Пройти бесплатно</a></p>
68 <p><a>Пройти бесплатно</a></p>
69 <a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>
69 <a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>