Piton x-3 инструкция
Интерпретатор языка программирования Python, который содержит в себе все, что требуется для создания работающих программ. А именно возможность компилирования, подключение библиотек и модулей.
- интегрирован фреймворк для асинхронного ввода/вывода "asyncio";
- в поставку добавлен инсталлятор для пакетного менеджера pip;
- в состав включён модуль "pathlib", предоставляющий объектно-ориентированный интерфейс для доступа к ФС;
- добавлен модуль "tracemalloc" для трассировки распределения памяти;
- добавлен модуль "statistics" с подборкой функций для математической статистики;
- улучшена система сборки, в которой реализованы возможности для генерации информации об интроспекции для встроенных компонентов (builtins);
- стандартизован модуль "enum" с реализацией классов IntEnum и Enum для работы со списками перечислимых констант;
- стандартизирован тип "ModuleSpec" для предоставления метаданных системы импорта модулей на стадии до непосредственной загрузки модуля;
- для строковых и бинарных данных реализован новый алгоритм хэширования SipHash, предоставляющий более высокий уровень безопасности. SipHash отличается высокой производительностью и непредсказуемым результатом операции (полноценная рандомизация ключей);
- в модуле pickle обеспечена поддержка протокола Pickle 4, используемого для сериализации и десериализации объектов;
- новые файловые дескрипторы теперь по умолчанию не наследуются дочерними подпроцессами;
- в модуль ssl добавлена поддержка SNI (Server Name Indication, позволяет обеспечить доступ через шифрованное соединение к виртуальным хостам на одном IP) на стороне сервера, а также поддержка TLSv1.1 и TLSv1.2;
- во все модули стандартной библиотеки, которые поддерживают работу с SSL, добавлены средства для верификации сертификатов;
- в стандартную библиотеку functools добавлены generic-функции одиночной диспетчеризации (Single-dispatch generic functions);
- улучшена семантика для финализации объектов;
- представлен новый C API для создания собственных методов распределения памяти.
Рекомендуем! InstallPack | Стандартный установщик |
---|---|
Официальный дистрибутив Python | |
Тихая установка без диалоговых окон | |
Рекомендации по установке необходимых программ | |
Пакетная установка нескольких программ |
Описание
Вместе с появлением различных программ и приложений появились и языки программирования, на которых эти приложения создавались. Точно так же появился Питон, в 1991 году. С тех пор приложение для компиляции обновляется не реже раза в два года, в него добавляется новый синтаксис языка и свежие библиотеки. Сам язык довольно дружелюбен и понятен. Главной его особенностью является минимализм. Другими словами, вы написали всего несколько строчек, но уже покрыли большой объем работы.
Работает интерпретатор на любой версии Windows, начиная XP и заканчивая 8.
Конструкция with . as используется для оборачивания выполнения блока инструкций менеджером контекста. Иногда это более удобная конструкция, чем try. except. finally.
Синтаксис конструкции with . as:
Теперь по порядку о том, что происходит при выполнении данного блока:
- Выполняется выражение в конструкции with . as.
- Загружается специальный метод __exit__ для дальнейшего использования.
- Выполняется метод __enter__. Если конструкция with включает в себя слово as, то возвращаемое методом __enter__ значение записывается в переменную.
- Выполняется suite.
- Вызывается метод __exit__, причём неважно, выполнилось ли suite или произошло исключение. В этот метод передаются параметры исключения, если оно произошло, или во всех аргументах значение None, если исключения не было.
Если в конструкции with - as было несколько выражений, то это эквивалентно нескольким вложенным конструкциям:
Для чего применяется конструкция with . as? Для гарантии того, что критические функции выполнятся в любом случае. Самый распространённый пример использования этой конструкции - открытие файлов. Я уже рассказывал об открытии файлов с помощью функции open, однако конструкция with . as, как правило, является более удобной и гарантирует закрытие файла в любом случае.
Гарантирует, что файл будет закрыт вне зависимости от того, что введёт пользователь.
В этом руководстве мы узнаем, как использовать библиотеку pyautogui в Python 3. Она обеспечивает кроссплатформенную поддержку для управления операциями с мышью и клавиатурой с помощью кода, позволяющего автоматизировать задачи. Библиотека pyautogui также доступна для Python 2, однако мы будем использовать Python 3 на протяжении всего этого руководства.
Такой инструмент имеет множество приложений, некоторые из которых включают создание снимков экрана, автоматизацию тестирования графического интерфейса пользователя (например, Selenium), автоматизацию задач, которые можно выполнить только с помощью графического интерфейса, и т.д.
Прежде чем продолжить это руководство, обратите внимание, что есть несколько предварительных условий. Вы должны иметь базовое представление о синтаксисе Python или программировать на каком-либо другом языке, по крайней мере, для начинающих. В остальном учебник довольно прост и понятен новичкам.
Установка PyAutoGUI в Python
Процесс установки PyAutoGUI довольно прост для всех операционных систем. Однако существует несколько зависимостей для Mac и Linux, которые необходимо установить перед установкой и использованием библиотеки PyAutoGUI в программах.
Windows
Для Windows PyAutoGUI не имеет зависимостей. Просто запустите следующую команду в командной строке, и установка будет завершена.
Для Mac сначала необходимо последовательно установить модули pyobjc-core и pyobjc. Ниже приведены команды, которые необходимо последовательно запустить в терминале для успешной установки:
Linux
Для Linux единственная зависимость – это python3-xlib (для Python 3). Чтобы установить его, а затем pyautogui, запустите в своем терминале две указанные ниже команды:
Общие функции
В этом разделе мы собираемся охватить некоторые из наиболее часто используемых функций из библиотеки PyAutoGUI.
position()
Прежде чем мы сможем использовать функции PyAutoGUI, нам нужно импортировать их в нашу программу:
Эта функция position() сообщает нам текущее положение мыши на экране:
onScreen()
Функция onScreen() сообщает нам, существует ли на экране точка с координатами x и y:
Здесь мы видим, что первая точка существует на экране, но вторая точка выходит за пределы.
Функция size() находит высоту и ширину (разрешение) экрана.
Ваш результат может отличаться и будет зависеть от размера вашего экрана.
Общие операции с мышью
В этом разделе мы собираемся охватить функции PyAutoGUI для управления мышью, которые включают в себя как перемещение положения курсора, так и автоматическое нажатие кнопок с помощью кода.
moveTo()
Синтаксис функции moveTo() следующий:
Значение x_coordinate увеличивается слева направо на экране, а значение y_coordinate увеличивается сверху вниз. Значение как x_coordinate, так и y_coordinate в верхнем левом углу экрана равно 0.
Взгляните на следующий скрипт:
В приведенном выше коде основное внимание уделяется функции moveTo(), которая перемещает курсор мыши по экрану на основе координат, которые мы предоставляем в качестве параметров. Первый параметр – это координата x, а второй параметр – координата y. Важно отметить, что эти координаты представляют собой абсолютное положение курсора.
Еще одна вещь, которая была введена в приведенный выше код, – это свойство PAUSE. В основном он приостанавливает выполнение скрипта на заданное время. Свойство PAUSE было добавлено в приведенный выше код, чтобы вы могли видеть выполнение функции. В противном случае функции будут выполняться за доли секунды, и вы не сможете увидеть, как курсор перемещается из одного места в другое на экране.
Другой обходной путь для этого – указать время для каждой операции moveTo() в качестве третьего параметра функции, например moveTo (x, y, time_in_seconds).
Выполнение вышеуказанного скрипта может привести к следующей ошибке:
Если выполнение функции moveTo() вызывает ошибку, аналогичную показанной выше, это означает, что на вашем компьютере включена функция защиты от сбоев. Чтобы отключить отказоустойчивость, добавьте в начало кода следующую строку:
Эта функция включена по умолчанию, поэтому вы можете легко остановить выполнение вашей программы pyautogui, вручную переместив мышь в верхний левый угол экрана. Как только мышь окажется в этом месте, pyautogui выдаст исключение и завершит работу.
moveRel()
Координаты функции moveTo() абсолютны. Однако, если вы хотите переместить положение мыши относительно текущего положения мыши, вы можете использовать функцию moveRel().
Это означает, что точкой отсчета для этой функции при перемещении курсора будет не верхняя левая точка на экране (0, 0), а текущая позиция курсора мыши. Итак, если ваш курсор мыши в настоящее время находится в точке (100, 100) на экране и вы вызываете функцию moveRel() с параметрами (100, 100, 2), новая позиция вашего курсора перемещения будет (200, 200) .
Вы можете использовать функцию moveRel(), как показано ниже:
Приведенный выше скрипт переместит курсор на 100 пунктов вправо и на 100 пунктов вниз за 2 секунды относительно текущей позиции курсора.
click()
Функция click() используется для имитации операций щелчка мышью. Синтаксис функции click() следующий:
- x: координата x точки, которую нужно достичь.
- y: координата y точки, которую нужно достичь.
- clicks: количество кликов, которые вы хотели бы сделать, когда курсор достигнет этой точки на экране.
- interval: количество времени в секундах между каждым щелчком мыши, например, если вы выполняете несколько щелчков мышью.
- button: укажите, какую кнопку мыши вы хотите нажать, когда курсор переместится в эту точку на экране. Возможные значения: правое, левое и среднее.
Вы также можете выполнять определенные функции щелчка следующим образом:
Здесь x и y представляют координаты x и y, как и в предыдущих функциях.
Вы также можете иметь более детальный контроль над щелчками мыши, указав, когда нажимать и отпускать кнопку мыши. Это делается с помощью функций mouseDown и mouseUp соответственно.
Вот небольшой пример:
Приведенный выше код эквивалентен простому вызову pag.click (x, y).
scroll()
Последняя функция мыши, которую мы рассмотрим, – это прокрутка. Как и ожидалось, у него есть два варианта: прокрутка вверх и прокрутка вниз. Синтаксис функции scroll() следующий:
Для прокрутки вверх укажите положительное значение для параметра amount_to_scroll, а для прокрутки вниз укажите отрицательное значение. Вот пример:
Хорошо, это было для функций мыши. К настоящему времени вы должны иметь возможность управлять кнопками мыши, а также перемещениями по коду. Теперь перейдем к функциям клавиатуры. Их много, но мы рассмотрим только наиболее часто используемые.
Общие операции с клавиатурой
Прежде чем мы перейдем к функциям, важно знать, какие клавиши можно нажимать с помощью кода в pyautogui, а также их точное соглашение об именах. Для этого запустите следующий скрипт:
typewrite()
Функция typewrite() используется для ввода чего-либо в текстовое поле. Синтаксис функции следующий:
Здесь текст – это то, что вы хотите ввести в поле, а интервал – это время в секундах между каждым нажатием клавиши. Вот пример:
Другой способ использования этой функции – передача списка клавиш, которые вы хотите нажимать последовательно. Чтобы сделать это с помощью кода, смотрите пример ниже:
В приведенном выше примере будет введен текст junaide с удалением завершающего e. Ввод в текстовое поле будет отправлен нажатием клавиши Enter.
hotkey()
Если вы до сих пор этого не заметили, ключи, которые мы показали выше, не упоминаются для комбинированных операций, таких как Control + C для команды копирования. Если вы думаете, что можете сделать это, передав список [‘ctrl’, ‘c’] функции typewrite(), вы ошибаетесь.
Функция typewrite() будет нажимать обе эти кнопки последовательно, а не одновременно. И, как вы, наверное, уже знаете, чтобы выполнить команду копирования, вам нужно нажать клавишу C, удерживая клавишу ctrl.
Чтобы нажать две или более клавиш одновременно, вы можете использовать функцию hotkey(), как показано здесь:
screenshot()
Если вы хотите сделать снимок экрана в любой момент, функция screenshot() – это именно та функция, которую вы ищете. Давайте посмотрим, как мы можем реализовать это с помощью PyAutoGUI:
Это сохранит объект PIL, содержащий изображение, в переменной.
Однако, если вы хотите сохранить снимок экрана непосредственно на свой компьютер, вы можете вместо этого вызвать функцию снимка экрана следующим образом:
Это сохранит снимок экрана в файле с указанным именем на вашем компьютере.
Функции confirm(), alert() и prompt()
- Окно подтверждения: отображает информацию и дает вам два варианта: ОК и Отмена.
- Окно оповещения: отображает некоторую информацию и подтверждает, что вы ее прочитали. Он отображает одну кнопку, т.е. ОК.
- Поле подсказки: запрашивает некоторую информацию от пользователя, и при входе пользователь должен нажать кнопку ОК.
Теперь, когда мы увидели типы, давайте посмотрим, как мы можем отображать эти кнопки на экране в той же последовательности, что и выше:
После изучения этого руководства вы сможете использовать PyAutoGUI в Python для автоматизации операций с графическим интерфейсом пользователя для повторяющихся задач в вашем собственном приложении.
Изучение
Обновление с одной версии языка программирования Python до другой может быть настоящей проблемой. Это еще сложнее, если вы пропустили несколько промежуточных версий. Какие самые важные различия? Как они соотносятся с версией, с которой вы знакомы?
Сегодня мы ответим на все эти вопросы от Python 3.0 до Python 3.8. Мы проведем вас через все самые большие изменения, их сравнение с предыдущими версиями Python, и покажем вам примеры кода, которые помогут вам реализовать свой собственный современный код Python. В конце разделов вы получите загружаемый чит-лист, который вы сможете взять с собой, продолжая свой путь к программному обеспечению Python.
Python 2.x против Python 3.0
Python 3 внес много изменений, чтобы упростить синтаксис Python и добавить новые функции. Каждое из этих изменений может показаться незначительным, но вместе они могут серьезно повлиять на работу вашей программы.
В целом Python 3.x имеет:
- Более чистый синтаксис
- Более надежные математические и логические операторы
- Также более универсальное поведение String
- Более строгие правила для типов данных
- Более современная поддержка
Далее мы рассмотрим важные синтаксические изменения, которые помогут вам адаптироваться к Python 3.
Print()
В Python 3.0 поведение печати изменилось с оператора на функцию Python. Теперь поле печати должно быть заключено в круглые скобки как параметр для правильной работы.
Переход от printоператора к printфункции также повлиял на некоторые общие способы печати, такие как разрывы строк и печать в файл.
Во всех версиях Python каждый вызов печати заканчивается разрывом строки. Однако иногда вам нужно печатать в той же строке.
В Python 2 вы могли печатать в той же строке с запятой в конце:
В Python 3 вместо этого вы используете endаргумент ключевого слова после первой строки.
Наконец, Python 3 сделал синтаксис для печати в файл более читабельным.
Строки в 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
Эта программа может создать весь управляемый вводом список с помощью всего 3 строк кода!
Отладка f-String
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, только это одни и те же объекты.
Теперь Python 3.8 правильно определяет ошибку:
Шпаргалка по Python 3.8
Что учить дальше
Вы только что узнали обо всех наиболее важных обновлениях Python 3 и 3.8. Если какое-либо из этих изменений кажется привлекательным, я рекомендую вам обновить его сейчас и начать реализацию этих новых функций. Важно быть современным разработчиком Python.
Даже если вас не интересует какая-либо конкретная функция, Python с каждым обновлением становится быстрее и требует меньше памяти. Если вы внесете изменения сейчас и начнете практиковать новый синтаксис, вы сможете продемонстрировать свои современные навыки интервьюеру!
Функция range является одной из встроенных функций, доступных в Python. Он генерирует серию целых чисел, от значения start до stop, указанного пользователем. Мы можем использовать его для цикла for и обходить весь диапазон как список.
Функция range() принимает один обязательный и два необязательных параметра. Это работает по-разному с различными комбинациями аргументов. В этом руководстве мы познакомим вас со всеми возможностями данной функции Python, чтобы вы могли легко использовать ее в своих задачах.
Существует два варианта функции range() в Python 3. Давайте проверим их синтаксис по одному.
Range(Stop)
Это самая основная форма range(). Требуется один аргумент для указания исключительного (Stop) верхнего предела.
Если вы предоставляете нецелочисленное значение остановки, тогда оно вызывает ошибку TypeError.
Range(Start, Stop[, Step])
Это немного сложная форма функции range. Здесь вы можете создать серию чисел с общей разницей по вашему выбору.
Вы можете передать следующие три аргумента:
- 'start' -> Начальная точка для генерации чисел в range()
- 'stop' -> Это точка перед завершением range().
- 'step' -> Общая разница или счетчик приращений между двумя значениями
Обратите внимание на следующие моменты при использовании range() с вышеуказанной подписью.
Обратите внимание, что функция range принимает только целочисленные аргументы. Чтобы создать диапазон с плавающей точкой, следуйте данному руководству: Генерация плавающего диапазона в Python
Функция Python Range() с примерами
Посмотрите примеры кода ниже, чтобы понять эту функцию немного глубже:
Использование параметров Start, Stop и Step
Использование отрицательных значений start, stop и step
Мы можем передавать отрицательные значения для всех параметров диапазона, таких как аргументы start, stop и step.
В приведенном ниже примере мы предоставляем отрицательное значения для stop и step, чтобы выполнить цикл в обратном направлении.
Генерация диапазона как арифметический ряд
Давайте создадим арифметический ряд (i = 10, n = 100, d = 10), используя метод range().
Объект range() работает как генератор. Следовательно, мы преобразовали его в список, чтобы мы могли распечатать значения.
Перебор списка с использованием range()
Мы можем использовать функцию Python range() для обхода списка. Смотрите пример ниже.
Преобразовать диапазон в список
Python 3 range() создает объект типа генератора. По ходу цикла он выбирает значения одно за другим, а не получает их все сразу.
В действительности выходные данные функции range() представляют собой неизменяемую последовательность целых чисел. Следовательно, мы можем преобразовать то же самое в список Python. Мы будем использовать конструктор списка для преобразования вывода диапазона в список.
Смотрите пример ниже.
Верхний предел range включительно
По умолчанию Python range() по умолчанию исключает последнее число. Следовательно, он всегда игнорирует верхний предел своего вывода.
Однако мы можем внести следующие изменения в наш код, чтобы разрешить это.
- Увеличьте значение stop с помощью счетчика шагов
- Передайте новое значение stop в функцию range()
После внесения вышеуказанных изменений, давайте посмотрим, что происходит:
Range Python против Xrange
Мы изложили несколько отличий и некоторые ключевые факты о функциях range и xrange.
В Python 2.x было две функции диапазона: range() и xrange()
- Разница между ними заключается в том, что range() возвращает список, тогда как последний возвращает итератор.
В Python 3.x у нас есть только одна функция range(). Это реализация xrange() из версии 2.x.
- Новая функция range() не возвращает ни список, ни итератор. Он получает новый тип, известный как объект диапазона.
- Мы можем перебирать объект диапазона как список. Но это немного отличается, так как мы не можем нарезать его.
- В отличие от итераторов, которые выдают одно значение за раз, функция range() получает все числа одновременно. Следовательно, он имеет высокие требования к памяти.
- Тем не менее, диапазон работает быстрее с небольшим набором чисел.
Использование индекса с результатом работы range Python
Да, range() возвращает уникальный объект, который обладает свойствами, подобными списку и генератору.
Поскольку он действует как последовательность, мы можем получить доступ к его элементам, используя индексы. Он допускает как положительные так и отрицательные значения индекса.
Объединить вывод двух функций range()
В Python нет встроенной функции для объединения результатов двух результатов range(). Тем не менее, мы все еще можем сделать это.
Существует модуль с именем 'itertools', который имеет функцию chain() для объединения двух объектов диапазона.
Читайте также: