HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Чтобы глубже погрузиться в настройку окружения Python, нам нужно вспомнить теоретические основы этого языка. Они помогут глубже разобраться в окружении и работе с ним.</p>
1 <p>Чтобы глубже погрузиться в настройку окружения Python, нам нужно вспомнить теоретические основы этого языка. Они помогут глубже разобраться в окружении и работе с ним.</p>
2 <h2>Язык программирования</h2>
2 <h2>Язык программирования</h2>
3 <p>Что такое язык программирования? За этим понятием скрываются две связанных, но независимых темы.</p>
3 <p>Что такое язык программирования? За этим понятием скрываются две связанных, но независимых темы.</p>
4 <p>С одной стороны, языком программирования называют синтаксические и семантические правила, по которым записывается и работает исходный код.</p>
4 <p>С одной стороны, языком программирования называют синтаксические и семантические правила, по которым записывается и работает исходный код.</p>
5 <p>В отличие от естественных языков, эти правила достаточно строги. Любая мельчайшая ошибка приведет к тому, что код либо не запустится, либо будет работать некорректно.</p>
5 <p>В отличие от естественных языков, эти правила достаточно строги. Любая мельчайшая ошибка приведет к тому, что код либо не запустится, либо будет работать некорректно.</p>
6 <p>Например, в Python нельзя написать my name = 5 с пробелом в имени переменной. Эти правила существуют не только в книгах, но и в головах конкретных программистов и разработчиков языка.</p>
6 <p>Например, в Python нельзя написать my name = 5 с пробелом в имени переменной. Эти правила существуют не только в книгах, но и в головах конкретных программистов и разработчиков языка.</p>
7 <p>Часто весь свод правил существует в виде отдельного специального документа и называется<strong>спецификацией</strong>.</p>
7 <p>Часто весь свод правил существует в виде отдельного специального документа и называется<strong>спецификацией</strong>.</p>
8 <p>С другой стороны, языком программирования называют программу, которая запускает и компилирует наш код. Обычно ее называют<strong>средой выполнения</strong>.</p>
8 <p>С другой стороны, языком программирования называют программу, которая запускает и компилирует наш код. Обычно ее называют<strong>средой выполнения</strong>.</p>
9 <p>Среда выполнения - это конкретное воплощение спецификации, поэтому ее иногда называют<strong>реализацией</strong>.</p>
9 <p>Среда выполнения - это конкретное воплощение спецификации, поэтому ее иногда называют<strong>реализацией</strong>.</p>
10 <p>У конкретного языка может существовать несколько реализаций, в том числе<strong>эталонная реализация</strong>, на которую равняются все остальные. Различные реализации могут разрабатываться разными людьми и компаниями.</p>
10 <p>У конкретного языка может существовать несколько реализаций, в том числе<strong>эталонная реализация</strong>, на которую равняются все остальные. Различные реализации могут разрабатываться разными людьми и компаниями.</p>
11 <p>У Python нет выделенной спецификации, но есть эталонная реализация. Она называется<strong>CPython</strong>- это интерпретатор Python, реализованный на языке C. Если вы слышите разговоры про Python, то скорее всего имеется в виду именно эталонная реализация CPython.</p>
11 <p>У Python нет выделенной спецификации, но есть эталонная реализация. Она называется<strong>CPython</strong>- это интерпретатор Python, реализованный на языке C. Если вы слышите разговоры про Python, то скорее всего имеется в виду именно эталонная реализация CPython.</p>
12 <p>Прочие варианты обычно имеют свои названия. Например, реализация языка для запуска программ на платформе .NET называется<a>IronPython</a>.</p>
12 <p>Прочие варианты обычно имеют свои названия. Например, реализация языка для запуска программ на платформе .NET называется<a>IronPython</a>.</p>
13 <h2>Python</h2>
13 <h2>Python</h2>
14 <p>Python - интерпретируемый язык программирования с сильной динамической типизацией. Разберем эти слова по отдельности.</p>
14 <p>Python - интерпретируемый язык программирования с сильной динамической типизацией. Разберем эти слова по отдельности.</p>
15 <h3>Интерпретируемый язык программирования</h3>
15 <h3>Интерпретируемый язык программирования</h3>
16 <p>Компьютеры не умеют читать программы на языке программирования. Они лишь исполняют машинный код, набор команд для процессора и других микросхем. Чтобы нашу программу смог выполнить компьютер ее нужно перевести на машинный код.</p>
16 <p>Компьютеры не умеют читать программы на языке программирования. Они лишь исполняют машинный код, набор команд для процессора и других микросхем. Чтобы нашу программу смог выполнить компьютер ее нужно перевести на машинный код.</p>
17 <p>Существует два основных подхода в переводе: компиляция и интерпретация.</p>
17 <p>Существует два основных подхода в переводе: компиляция и интерпретация.</p>
18 <p>При компиляции весь код программы считывается, анализируется и переводится в машинный код. Так как код обрабатывается целиком, то это позволяет избегать многих ошибок в программе - они будут отловлены на стадии анализа. Но как недостаток, компиляция может длиться довольно долго. Пока программа не "соберется", результатов ее мы так и не получим. Языки C, Rust, Go это<strong>компилируемые языки</strong>.</p>
18 <p>При компиляции весь код программы считывается, анализируется и переводится в машинный код. Так как код обрабатывается целиком, то это позволяет избегать многих ошибок в программе - они будут отловлены на стадии анализа. Но как недостаток, компиляция может длиться довольно долго. Пока программа не "соберется", результатов ее мы так и не получим. Языки C, Rust, Go это<strong>компилируемые языки</strong>.</p>
19 <p>При интерпретации, специальная программа интерпретатор, считывает и переводит код построчно, а не целиком. Такой подход позволяет сразу запустить программу и получать ее результаты, но об ошибке в коде мы узнаем лишь когда интерпретатор дойдет до строчки с ней. Языки Python, JS, Ruby, PHP это<strong>интерпретируемые</strong>языки.</p>
19 <p>При интерпретации, специальная программа интерпретатор, считывает и переводит код построчно, а не целиком. Такой подход позволяет сразу запустить программу и получать ее результаты, но об ошибке в коде мы узнаем лишь когда интерпретатор дойдет до строчки с ней. Языки Python, JS, Ruby, PHP это<strong>интерпретируемые</strong>языки.</p>
20 <p><em>В реальности все чуть сложнее. У Python и многих интерпретируемых языков есть частичная компиляция, а у компилируемых языков есть построчная компиляция схожая с интерпретацией. Но основное разделение все еще сохраняется</em></p>
20 <p><em>В реальности все чуть сложнее. У Python и многих интерпретируемых языков есть частичная компиляция, а у компилируемых языков есть построчная компиляция схожая с интерпретацией. Но основное разделение все еще сохраняется</em></p>
21 <p>Процесс исполнения кода на Python выглядит так:</p>
21 <p>Процесс исполнения кода на Python выглядит так:</p>
22 <ul><li>Вы запускаете программу</li>
22 <ul><li>Вы запускаете программу</li>
23 <li>Интерпретатор открывает файлы программы и загружает из них<strong>исходный код</strong></li>
23 <li>Интерпретатор открывает файлы программы и загружает из них<strong>исходный код</strong></li>
24 <li>Затем интерпретатор преобразует исходный код в<strong>байткод</strong>, проверяет ошибки синтаксиса и начинает исполнять по шагам</li>
24 <li>Затем интерпретатор преобразует исходный код в<strong>байткод</strong>, проверяет ошибки синтаксиса и начинает исполнять по шагам</li>
25 </ul><h3>Сильная типизация</h3>
25 </ul><h3>Сильная типизация</h3>
26 <p>С точки зрения компьютера, программа и ее машинный код, это всего лишь набор команд. Он не делает различия между разными данными как числа и буквы, ведь это в конечном итоге выражается в двоичный код. Но для нас, людей, число и буква разные понятия. И в языке программирования их выражают по-разному. То какие значения данных существуют в языке и как они соотносятся друг с другом называется<strong>типизацией</strong>или<strong>типами данных</strong>.</p>
26 <p>С точки зрения компьютера, программа и ее машинный код, это всего лишь набор команд. Он не делает различия между разными данными как числа и буквы, ведь это в конечном итоге выражается в двоичный код. Но для нас, людей, число и буква разные понятия. И в языке программирования их выражают по-разному. То какие значения данных существуют в языке и как они соотносятся друг с другом называется<strong>типизацией</strong>или<strong>типами данных</strong>.</p>
27 <p>Python - это язык с сильной типизацией. Это значит, что он не преобразовывает, без указания на это, значения одних типов в значения других. Или еще говорят, не приводит типы автоматически.</p>
27 <p>Python - это язык с сильной типизацией. Это значит, что он не преобразовывает, без указания на это, значения одних типов в значения других. Или еще говорят, не приводит типы автоматически.</p>
28 <p>Другими словами, Python не даст сложить число со строкой. При попытке сделать что-то подобное мы получим ошибку. Python требует, чтобы любые преобразования типов были явными - программист должен явно использовать в каждом конкретном случае соответствующие функции-преобразователи.</p>
28 <p>Другими словами, Python не даст сложить число со строкой. При попытке сделать что-то подобное мы получим ошибку. Python требует, чтобы любые преобразования типов были явными - программист должен явно использовать в каждом конкретном случае соответствующие функции-преобразователи.</p>
29 <h3>Динамическая типизация</h3>
29 <h3>Динамическая типизация</h3>
30 <p>Есть языки, в которых интерпретатор производит проверку типов, доступности функций и переменных во время выполнения кода. Такие языки называются<strong>динамически типизированными</strong>. Если мы случайно ошиблись и вызвали несуществующую функцию, то ошибка всплывет только во время вызова этой функции.</p>
30 <p>Есть языки, в которых интерпретатор производит проверку типов, доступности функций и переменных во время выполнения кода. Такие языки называются<strong>динамически типизированными</strong>. Если мы случайно ошиблись и вызвали несуществующую функцию, то ошибка всплывет только во время вызова этой функции.</p>
31 <p>В статически типизированных языках подобные ошибки отслеживаются раньше - на этапе анализа исходного текста без запуска кода на выполнение. Слово "статический" как раз означает, что программа не выполняется.</p>
31 <p>В статически типизированных языках подобные ошибки отслеживаются раньше - на этапе анализа исходного текста без запуска кода на выполнение. Слово "статический" как раз означает, что программа не выполняется.</p>
32 <p>Обычно статическими проверками занимаются компиляторы, но существуют и специальные инструменты -<strong>статические анализаторы кода</strong>. Для некоторых языков с динамической типизацией такие анализаторы тоже существуют, но отслеживают значительно меньшее число ошибок.</p>
32 <p>Обычно статическими проверками занимаются компиляторы, но существуют и специальные инструменты -<strong>статические анализаторы кода</strong>. Для некоторых языков с динамической типизацией такие анализаторы тоже существуют, но отслеживают значительно меньшее число ошибок.</p>