какая последняя версия питон

Что нового в Python? Руководство по Python 3 и выше

Обновление с одной версии языка программирования Python до другой может быть настоящей проблемой. Это еще сложнее, если вы пропустили несколько промежуточных версий. Какие самые важные различия? Как они соотносятся с версией, с которой вы знакомы?

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

Python 2.x против Python 3.0

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

В целом Python 3.x имеет:

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

Print()

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

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

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

В Python 2 вы могли печатать в той же строке с запятой в конце:

В Python 3 вместо этого вы используете endаргумент ключевого слова после первой строки.

Наконец, Python 3 сделал синтаксис для печати в файл более читабельным.

Версия Python 3 избавляется от символов `>>` в пользу более интуитивно понятного `file =`. Он также изменяет порядок аргументов в соответствии с бизнес-логикой операции, как мы бы сказали «печать ___ в файл ___» поверх «на файл ___, печать ____».

Строки в Unicode и ASCII

В Python 2 все строки по умолчанию сохраняются как ASCII. Они могут быть сохранены как Unicode, используя uперед строкой.

В Python 3 все строки по умолчанию хранятся в Юникоде. Unicode предпочтительнее ASCII во всем мире, потому что Unicode поддерживает переменную битовую кодировку и другие наборы символов.

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

Целочисленное деление

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

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

Python2

Python3

Range против xrange

range()Функция Python 3 заменяет xrange()функцию Python2. Новая, более чистая функция дает тот же результат.

В Python 2 range()возвращал список, а xrange()возвращал объект-итератор xrange. В большинстве случаев они могут использоваться как взаимозаменяемые. Теперь range()поведение Python 2 было удалено.

Python2

Python3

Обработка ошибок

Python 3 теперь требует asключевое слово при реализации обработки ошибок. Это изменение отделяет синтаксис обработки ошибок от синтаксиса параметров функции и упрощает чтение кода обработки ошибок с первого взгляда. Многие разработчики, переходящие с Python 2 на Python 3.0, упускают из виду это небольшое, но важное изменение.

Исходный код и совместимость библиотек

Код Python 2.x может быть совместим с Python 3, но часто приводит к неожиданному поведению. Однако код Python 3 нельзя запускать с Python 2.

Хотя код Python 2.x можно портировать, библиотеки часто не могут. Перенос библиотек Python 2 на Python 3 может быть трудным и ненадежным. Поскольку все больше пользователей продолжают внедрять новые функции Python 3, большинство разработчиков больше не создают или обновляют библиотеки из Python 2.

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

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

Шпаргалка по Python 3

какая последняя версия питон. Смотреть фото какая последняя версия питон. Смотреть картинку какая последняя версия питон. Картинка про какая последняя версия питон. Фото какая последняя версия питон

Python 3.7 против 3.8

Самая последняя версия Python — это версия 3.8. Независимо от того, используете ли вы Python 2 или более раннюю версию Python 3, важно понимать новейшие функции, доступные в этом мощном обновлении.

Ниже мы рассмотрим самые большие изменения с Python 3.7 до 3.8 с примерами кода и пояснениями, которые помогут вам использовать самую современную версию Python, независимо от того, с какой предыдущей версией вы работали.

Выражения присваивания

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

Python3.x

Python3.8

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

Посмотрите, насколько мы можем упростить эту более сложную программу:

Python3.x

Python3.8

Здесь мы используем оператор моржа для создания временной переменной, currentкоторая назначается как строка ввода пользователя. Он также оценивается при присвоении, чтобы увидеть, соответствует ли оно «концу». Программа повторяет цикл и добавляет новый элемент в конец списка.

Эта программа может создать весь управляемый вводом список с помощью всего 3 строк кода!

Отладка f-String

Относительно новые «f-строки» также получили обновление в Python 3.8. Напоминаем, что f-строки — это упрощенный способ печати операторов с вычисленными переменными без объединения строк вручную. Представленные в Python 3.6, они стали одной из самых популярных частей современного Python. Фактически, они считаются основной причиной того, что так много библиотек Python совместимы только с версиями после 3.6.

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

Взгляните на пример:

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

Начиная с Python 3.8, теперь вы можете добавить =переменную после фигурной скобки, чтобы напечатать как выражение, так и переменную.

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

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

Вы также можете использовать выражения присваивания в f-строках для создания компактных и динамических строк:

Только позиционные аргументы

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

В строке 1 мы указываем, что nameдолжно быть передано позиционно (после /), а spaceдолжно быть передано с его ключевым словом. В строке 4 мы успешно вызываем parkingSpaceи позиционируем значение nameсо значением по умолчанию для space. Также в строке 7 мы parkingSpaceснова успешно вызываем, но на этот раз мы присваиваем новое значение spaceс его ключевым словом. Наконец, в строке 10 мы вызываем parkingSpaceв третий раз, но назначаем nameего ключевым словом, а не позиционно, и получаем ошибку.

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

Используйте только позиционные аргументы, когда:

Предупреждения синтаксиса

Python 3.8 добавляет два новых предупреждения в список Python SyntaxWarnings. Первое предупреждение, которое покажет вам, когда выбрать isболее ==. Они немного отличаются, и их легко смешать. Последний проверяет равные значения, а isвозвращает True, только это одни и те же объекты.

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

Теперь Python 3.8 правильно определяет ошибку:

Шпаргалка по Python 3.8

какая последняя версия питон. Смотреть фото какая последняя версия питон. Смотреть картинку какая последняя версия питон. Картинка про какая последняя версия питон. Фото какая последняя версия питон

Что учить дальше

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

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

Источник

Download the latest source release

Download the latest version of Python

Looking for Python with a different OS? Python for Windows, Linux/UNIX, macOS, Other

Want to help test development versions of Python? Prereleases, Docker images

Looking for Python 2.7? See below for specific releases

Active Python Releases

Looking for a specific release?

Python releases by version number:

Sponsors

Visionary sponsors like Google help to host Python downloads.

Licenses

All Python releases are Open Source. Historically, most, but not all, Python releases have also been GPL-compatible. The Licenses page details GPL-compatibility and Terms and Conditions.

Sources

For most Unix systems, you must download and compile the source code. The same source code archive can also be used to build the Windows and Mac versions, and is the starting point for ports to all other platforms.

Download the latest Python 3 and Python 2 source.

Alternative Implementations

This site hosts the “traditional” implementation of Python (nicknamed CPython). A number of alternative implementations are available as well.

History

Python was created in the early 1990s by Guido van Rossum at Stichting Mathematisch Centrum in the Netherlands as a successor of a language called ABC. Guido remains Python’s principal author, although it includes many contributions from others.

Release Schedules

Information about specific ports, and developer info

OpenPGP Public Keys

Source and binary executables are signed by the release manager or binary builder using their OpenPGP key. Release files for currently supported releases are signed by the following:

Release files for older releases which have now reached end-of-life may have been signed by one of the following:

You can import a person’s public keys from a public keyserver network server you trust by running a command like:

or, in many cases, public keys can also be found at keybase.io. On the version-specific download pages, you should see a link to both the downloadable file and a detached signature file. To verify the authenticity of the download, grab both files and then run this command:

Note that you must use the name of the signature file, and you should use the one that’s appropriate to the download you’re verifying.

Other Useful Items

Want to contribute?

Want to contribute? See the Python Developer’s Guide to learn about how Python development is managed.

Источник

Python Releases for Windows

Stable Releases

Note that Python 3.9.8 cannot be used on Windows 7 or earlier.

Note that Python 3.10.0 cannot be used on Windows 7 or earlier.

Note that Python 3.7.12 cannot be used on Windows XP or earlier.

Note that Python 3.6.15 cannot be used on Windows XP or earlier.

Note that Python 3.9.7 cannot be used on Windows 7 or earlier.

Note that Python 3.8.12 cannot be used on Windows XP or earlier.

Note that Python 3.9.6 cannot be used on Windows 7 or earlier.

Note that Python 3.8.11 cannot be used on Windows XP or earlier.

Note that Python 3.6.14 cannot be used on Windows XP or earlier.

Note that Python 3.7.11 cannot be used on Windows XP or earlier.

Note that Python 3.9.5 cannot be used on Windows 7 or earlier.

Note that Python 3.8.10 cannot be used on Windows XP or earlier.

Note that Python 3.9.4 cannot be used on Windows 7 or earlier.

Note that Python 3.9.3 cannot be used on Windows 7 or earlier.

Note that Python 3.8.9 cannot be used on Windows XP or earlier.

Note that Python 3.9.2 cannot be used on Windows 7 or earlier.

Note that Python 3.8.8 cannot be used on Windows XP or earlier.

Note that Python 3.6.13 cannot be used on Windows XP or earlier.

Note that Python 3.7.10 cannot be used on Windows XP or earlier.

Note that Python 3.8.7 cannot be used on Windows XP or earlier.

Note that Python 3.9.1 cannot be used on Windows 7 or earlier.

Note that Python 3.9.0 cannot be used on Windows 7 or earlier.

Note that Python 3.8.6 cannot be used on Windows XP or earlier.

Note that Python 3.8.6rc1 cannot be used on Windows XP or earlier.

Note that Python 3.5.10 cannot be used on Windows XP or earlier.

Note that Python 3.7.9 cannot be used on Windows XP or earlier.

Note that Python 3.6.12 cannot be used on Windows XP or earlier.

Note that Python 3.8.5 cannot be used on Windows XP or earlier.

Note that Python 3.8.4 cannot be used on Windows XP or earlier.

Note that Python 3.8.4rc1 cannot be used on Windows XP or earlier.

Note that Python 3.7.8 cannot be used on Windows XP or earlier.

Note that Python 3.6.11 cannot be used on Windows XP or earlier.

Note that Python 3.8.3 cannot be used on Windows XP or earlier.

Note that Python 3.8.3rc1 cannot be used on Windows XP or earlier.

Note that Python 3.7.7 cannot be used on Windows XP or earlier.

Note that Python 3.8.2 cannot be used on Windows XP or earlier.

Note that Python 3.8.1 cannot be used on Windows XP or earlier.

Note that Python 3.7.6 cannot be used on Windows XP or earlier.

Note that Python 3.6.10 cannot be used on Windows XP or earlier.

Note that Python 3.5.9 cannot be used on Windows XP or earlier.

Note that Python 3.5.8 cannot be used on Windows XP or earlier.

Note that Python 3.7.5 cannot be used on Windows XP or earlier.

Note that Python 3.8.0 cannot be used on Windows XP or earlier.

Note that Python 3.7.4 cannot be used on Windows XP or earlier.

Note that Python 3.6.9 cannot be used on Windows XP or earlier.

Note that Python 3.7.3 cannot be used on Windows XP or earlier.

Note that Python 3.5.7 cannot be used on Windows XP or earlier.

Note that Python 3.7.2 cannot be used on Windows XP or earlier.

Note that Python 3.6.8 cannot be used on Windows XP or earlier.

Note that Python 3.7.1 cannot be used on Windows XP or earlier.

Note that Python 3.6.7 cannot be used on Windows XP or earlier.

Note that Python 3.5.6 cannot be used on Windows XP or earlier.

Note that Python 3.7.0 cannot be used on Windows XP or earlier.

Note that Python 3.6.6 cannot be used on Windows XP or earlier.

Note that Python 3.6.5 cannot be used on Windows XP or earlier.

Note that Python 3.5.5 cannot be used on Windows XP or earlier.

Note that Python 3.6.4 cannot be used on Windows XP or earlier.

Note that Python 3.6.3 cannot be used on Windows XP or earlier.

Note that Python 3.5.4 cannot be used on Windows XP or earlier.

Note that Python 3.6.2 cannot be used on Windows XP or earlier.

Note that Python 3.6.1 cannot be used on Windows XP or earlier.

Note that Python 3.5.3 cannot be used on Windows XP or earlier.

Note that Python 3.6.0 cannot be used on Windows XP or earlier.

Note that Python 3.5.2 cannot be used on Windows XP or earlier.

Note that Python 3.5.1 cannot be used on Windows XP or earlier.

Note that Python 3.5.0 cannot be used on Windows XP or earlier.

Источник

Выход стабильной версии Python 3.9.0

Сегодня, 05.10.2020 ожидается выход стабильной версии Python 3.9.0. Новая версия будет получать обновления с исправлениями примерно каждые 2 месяца в течение примерно 18 месяцев. Через некоторое время после выпуска финальной версии 3.10.0 будет выпущено девятое и последнее обновление с исправлением ошибок 3.9.

«This is the first version of Python to default to the 64-bit installer on Windows. The installer now also actively disallows installation on Windows 7.»
«Это первая версия Python, по умолчанию использующая 64-разрядный установщик в Windows. Программа установки теперь также запрещает установку в Windows 7.»

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

UPD:
Переход на стабильные годовые циклы выпуска, см. PEP 602
alec_kalinin
«Каждая новая версия Python теперь будет выходить в октябре. Python 3.10 выйдет в октябре 2021, Python 3.11 в октябре 2022. А каждые два месяца будет выходить багфикс. Для меня это великолепная новость, теперь можно четко планировать upgrade python окружения.»

PEP 584

Этот PEP предлагает добавить операторы слияния ( | ) и обновления ( | = ) во встроенный класс dict.

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

Безусловно, у многих питонистов возникнет вопрос, зачем это нужно, если уже есть привычный всем вариант

На этот вопрос был дан ответ в самом PEP:

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

Прошу прощения за PEP 448, но даже если вы знаете о ** d в более простом контексте, если бы вы спросили типичного пользователя Python, как объединить два dict в новый, я сомневаюсь, что многие люди подумают о <**d1, **d2>. Я знаю, что сам забыл об этом, когда началась эта ветка!

Также <**d1, **d2>не работает для подклассов dict, таких как defaultdict

PEP 585

Generics подсказки типов в стандартных коллекциях.

Generic — тип, который можно параметризовать, некий контейнер. Также известен как параметрический тип или универсальный тип.

В выпуске включена поддержка универсального синтаксиса во всех стандартных коллекциях, доступных в настоящее время в модуле «Typing». Мы можем использовать типы list или dict в качестве универсальных типов вместо использования typing.List или typing.Dict.

PEP 615

Поддержка базы данных часовых поясов IANA в стандартной библиотеке.

IANA часовые пояса часто называют tz или zone info. Существует большое количество часовых поясов IANA с разными путями поиска для указания часового пояса IANA для объекта даты и времени. Например, мы можем передать имя пути поиска как Континент/Город datetime объекту, чтобы установить его tzinfo.

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

PEP 616

Новые строковые функции для удаления префикса и суффикса.

К str объекту добавлены две новые функции.

PEP 617

Версия Python 3.9 предлагает заменить текущий синтаксический анализатор Python на основе LL (1) новым синтаксическим анализатором на основе PEG, который является высокопроизводительным и стабильным.

Текущий парсер CPython основан на LL (1). Впоследствии грамматика основана на LL (1), что позволяет анализировать ее с помощью анализатора LL (1). Парсер LL (1) работает сверху вниз. Кроме того, он анализирует входные данные слева направо. Текущая грамматика является контекстно-свободной грамматикой, поэтому контекст токенов не принимается во внимание.
Версия Python 3.9 предлагает заменить его новым парсером на основе PEG, что означает, что он снимет текущие ограничения Python грамматики LL (1). Кроме того, в текущий синтаксический анализатор внесены исправления, в которые добавлен ряд хаков, которые будут удалены. В результате это снизит стоимость обслуживания в долгосрочной перспективе.

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

issue30966

Новый параметр cancel_futures был добавлен в concurrent.futures.Executor.shutdown().

В этом параметре все отложенные фьючерсы, которые еще не начались. До версии 3.9 процесс ожидал их завершения перед завершением работы исполнителя.

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

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

issue30966

Этот метод явно закрывает очередь. Это гарантирует, что очередь будет закрыта и не останется дольше ожидаемого. Важно помнить, что методы get(), put(), empty() нельзя вызывать после закрытия очереди.

issue37444

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

builtins.__import__() вызывал ValueError то время как importlib.__import__() вызывал ImportError.

Сейчас это исправлено, . __Import __ () теперь вызывает ImportError вместо ValueError.

issue40286

Еще одна функция, которая была добавлена ​​в версии 3.9, — это random.Random.randbytes(). Она может использоваться для генерации случайных байтов.

Мы можем генерировать случайные числа, но что, если нам нужно было генерировать случайные байты? До версии 3.9 разработчикам приходилось проявлять изобретательность, чтобы генерировать случайные байты. Хотя мы можем использовать, os.getrandom(), os.urandom() или secrets.token_bytes() но не можем генерировать псевдослучайные шаблоны.

Например, чтобы гарантировать, что случайные числа генерируются с ожидаемым поведением и процесс воспроизводится, мы обычно используем seed с модулем random.Random.

В результате был введен метод random.Random.randbytes(). Он генерирует случайные байты.

issue28029

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

Чтобы дополнительно объяснить проблему, до версии 3.9 функция replace имела несогласованное поведение:

Можно было бы ожидать увидеть blog

Можно было бы ожидать увидеть |

issue39648, issue39479, issue39288, issue39310

Изменения в модуле «math».

Возвращает наименьшее общее кратное целых аргументов:

Возвращает наибольший общий делитель целочисленных аргументов. В более ранней версии поддерживалось только два аргумента. Добавлена ​​поддержка произвольного количества аргументов:

Вычисляет ближайшее к “x” число с плавающей точкой, если двигаться в направлении “y“.

Этот метод возвращает значение младшего бита числа с плавающей запятой x.

issue38870

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

issue39507, issue39509

Добавление новых кодов в http.HTTPStatus.

PEP 614

Ослабление грамматических ограничений для декораторов.

То теперь можно убрать лишние присваивания и вызывать напрямую:

«Кортеж должен быть заключен в круглые скобки»

Это основано на видении Гвидо в том же письме. Цитата:

Но запятых я не допущу. Я не могу согласиться с этим

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

issue17005

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

UPD: ifinik
какая последняя версия питон. Смотреть фото какая последняя версия питон. Смотреть картинку какая последняя версия питон. Картинка про какая последняя версия питон. Фото какая последняя версия питон

Граф можно передавать не сразу, а заполнять TopologicalSorter с помощью метода add. Кроме того класс адаптирован к параллельным вычислениям и может быть использован, например, для создания очереди задач.

issue37630, issue40479

Обновление библиотеки hashlib.
Теперь hashlib может использовать хэши SHA3 и SHAKE XOF из OpenSSL.
Встроенные хэш-модули теперь могут быть отключены или выборочно включены, например, для принудительного использования реализации на основе OpenSSL.

Оптимизация

Сводка улучшений производительности от Python 3.4 до Python 3.9:

Сценарий теста отображает время в наносекундах. Тесты были выполнены на процессоре Intel Core i7-4960HQ. Код теста можно найти в репозитории по адресу “Tools/scripts/var_access_benchmark.py”.

Благодарю за внимание.

Ссылка на официальное руководство Python 3.9.
Отпишитесь в комментарии, если что-то было упущено.

Источник

Leave a Reply

Your email address will not be published. Required fields are marked *