from __future__ import
Одним из последствий популярности Python является то, что постоянно разрабатываются и выходят новые версии. Новые версии — новые возможности, но только не для вас, если вы пользуетесь устаревшей.
Впрочем, не всё так плохо. Модуль future даёт возможность импортировать функциональность будущих версий Python. Это прямо как путешествие во времени, или магия.
Одним из последствий популярности Python является то, что постоянно разрабатываются и выходят новые версии. Новые версии — новые возможности, но только не для вас, если вы пользуетесь устаревшей.
Впрочем, не всё так плохо. Модуль future даёт возможность импортировать функциональность будущих версий Python. Это прямо как путешествие во времени, или магия.
Что выведет код сверху?
Anonymous Quiz
23%
False
34%
True
10%
None
33%
Будет вызвано исключение и выведена ошибка.
Разбор веб-страниц
Разбор веб-страниц (scraping) нужен для многих целей: от борьбы с сервисами, которые не предоставляют API, до создания поисковых систем.
Для демонстрации мы извлечем заголовки новостей с главной страницы журнала. C помощью библиотеки requests и парсера HTML BeautifulSoup мы можем сделать это всего в несколько строк.
Установим библиотеки: pip3 install requests beautifulsoup4. Теперь откроем xakep.ru в отладчике браузера и увидим, что заголовки новостей находятся в тэгах <h3 class="entry-title">, но не напрямую, а во вложенных <a> и <span>. К счастью для нас, BeautifulSoup поддерживает селекторы CSS3, а в ее стандарте tag1 tag2 как раз означает «<tag2> вложенный в <tag1>. То есть, наш селектор для заголовков новостей будет h3.entry-title a span.
Сохрани в файл вроде xakep-headings.py и выполни python3 xakep-headings.py или просто скопируй в интерпретатор, и ты увидишь все свежие новости.
Разбор веб-страниц (scraping) нужен для многих целей: от борьбы с сервисами, которые не предоставляют API, до создания поисковых систем.
Для демонстрации мы извлечем заголовки новостей с главной страницы журнала. C помощью библиотеки requests и парсера HTML BeautifulSoup мы можем сделать это всего в несколько строк.
Установим библиотеки: pip3 install requests beautifulsoup4. Теперь откроем xakep.ru в отладчике браузера и увидим, что заголовки новостей находятся в тэгах <h3 class="entry-title">, но не напрямую, а во вложенных <a> и <span>. К счастью для нас, BeautifulSoup поддерживает селекторы CSS3, а в ее стандарте tag1 tag2 как раз означает «<tag2> вложенный в <tag1>. То есть, наш селектор для заголовков новостей будет h3.entry-title a span.
Сохрани в файл вроде xakep-headings.py и выполни python3 xakep-headings.py или просто скопируй в интерпретатор, и ты увидишь все свежие новости.
❤1
Веб-приложения
На Python есть большие фреймворки MVC, такие как весьма популярный Django. Но есть и легковесные библиотеки, с которыми можно за пару строк кода превратить любую функцию в веб-сервис.
Один из самых популярных микрофреймворков — Flask. Для демонстрации напишем сервис, который в ответ на запрос /add/x/y выдает сумму чисел x и y.
Установим Flask командой pip3 install flask и сохраним код с картинки в файл myapp.ру.
Теперь можно запустить его командой env FLASK_APP=myapp.ру flask run.
$ curl http://localhost:5000/add/3/2
5
На Python есть большие фреймворки MVC, такие как весьма популярный Django. Но есть и легковесные библиотеки, с которыми можно за пару строк кода превратить любую функцию в веб-сервис.
Один из самых популярных микрофреймворков — Flask. Для демонстрации напишем сервис, который в ответ на запрос /add/x/y выдает сумму чисел x и y.
Установим Flask командой pip3 install flask и сохраним код с картинки в файл myapp.ру.
Теперь можно запустить его командой env FLASK_APP=myapp.ру flask run.
$ curl http://localhost:5000/add/3/2
5
Приветствую всех, на связи админ! Какой контент вы бы хотели видеть на канале больше всего? Какие темы вам интересны?
Пузырьковая сортировка
Этот простой алгоритм выполняет итерации по списку, сравнивая элементы попарно и меняя их местами, пока более крупные элементы не «всплывут» в начало списка, а более мелкие не останутся на «дне».
Алгоритм
Сначала сравниваются первые два элемента списка. Если первый элемент больше, они меняются местами. Если они уже в нужном порядке, оставляем их как есть. Затем переходим к следующей паре элементов, сравниваем их значения и меняем местами при необходимости. Этот процесс продолжается до последней пары элементов в списке.
При достижении конца списка процесс повторяется заново для каждого элемента. Это крайне неэффективно, если в массиве нужно сделать, например, только один обмен. Алгоритм повторяется n² раз, даже если список уже отсортирован.
Для оптимизации алгоритма нужно знать, когда его остановить, то есть когда список отсортирован.
Чтобы остановить алгоритм по окончании сортировки, нужно ввести переменную-флаг. Когда значения меняются местами, устанавливаем флаг в значение True, чтобы повторить процесс сортировки. Если перестановок не произошло, флаг остаётся False и алгоритм останавливается.
Этот простой алгоритм выполняет итерации по списку, сравнивая элементы попарно и меняя их местами, пока более крупные элементы не «всплывут» в начало списка, а более мелкие не останутся на «дне».
Алгоритм
Сначала сравниваются первые два элемента списка. Если первый элемент больше, они меняются местами. Если они уже в нужном порядке, оставляем их как есть. Затем переходим к следующей паре элементов, сравниваем их значения и меняем местами при необходимости. Этот процесс продолжается до последней пары элементов в списке.
При достижении конца списка процесс повторяется заново для каждого элемента. Это крайне неэффективно, если в массиве нужно сделать, например, только один обмен. Алгоритм повторяется n² раз, даже если список уже отсортирован.
Для оптимизации алгоритма нужно знать, когда его остановить, то есть когда список отсортирован.
Чтобы остановить алгоритм по окончании сортировки, нужно ввести переменную-флаг. Когда значения меняются местами, устанавливаем флаг в значение True, чтобы повторить процесс сортировки. Если перестановок не произошло, флаг остаётся False и алгоритм останавливается.
Реализация
Алгоритм работает в цикле while и прерывается, когда элементы ни разу не меняются местами. Вначале присваиваем swapped значение True, чтобы алгоритм запустился хотя бы один раз.
Время сортировки
Если взять самый худший случай (изначально список отсортирован по убыванию), затраты времени будут равны O(n²), где n — количество элементов списка.
Алгоритм работает в цикле while и прерывается, когда элементы ни разу не меняются местами. Вначале присваиваем swapped значение True, чтобы алгоритм запустился хотя бы один раз.
Время сортировки
Если взять самый худший случай (изначально список отсортирован по убыванию), затраты времени будут равны O(n²), где n — количество элементов списка.
Библиотека PyAutoGUI
Библиотека обеспечивает кроссплатформенную поддержку для управления операциями с мышью и клавиатурой с помощью кода, позволяющего автоматизировать задачи.
Установка библиотеки - pip install PyAutoGUI
В этом посте мы познакомимся с функцией position(), которая сообщает нам текущее положение мыши на экране.
Библиотека обеспечивает кроссплатформенную поддержку для управления операциями с мышью и клавиатурой с помощью кода, позволяющего автоматизировать задачи.
Установка библиотеки - pip install PyAutoGUI
В этом посте мы познакомимся с функцией position(), которая сообщает нам текущее положение мыши на экране.
Функция scroll()
Продолжаем знакомиться с библиотекой PyAutoGUI.
Еще одна функция мыши, которую мы рассмотрим, – это прокрутка. Как и ожидалось, у него есть два варианта: прокрутка вверх и прокрутка вниз.
Для прокрутки вверх укажите положительное значение для параметра amount_to_scroll, а для прокрутки вниз укажите отрицательное значение.
Продолжаем знакомиться с библиотекой PyAutoGUI.
Еще одна функция мыши, которую мы рассмотрим, – это прокрутка. Как и ожидалось, у него есть два варианта: прокрутка вверх и прокрутка вниз.
Для прокрутки вверх укажите положительное значение для параметра amount_to_scroll, а для прокрутки вниз укажите отрицательное значение.
Запись текста на изображении OpenCV в Python
Чтобы написать текст на изображении с помощью библиотеки OpenCV Python, используйте метод putText(). Использование функции показано в примере выше.
Как видно из приведенного выше примера, вы можете предоставить:
• изображение, на котором можно написать текст;
• текст, который вы хотите написать на изображении;
• позиция: расстояние по горизонтальной и вертикальной осям от верхнего левого угла изображения;
• семейство шрифтов;
• размер шрифта;
• цвет шрифта;
• ширина штриха шрифта.
В приведенном выше примере мы предоставили образец изображения и написали на нем текст и записали выходное изображение в файл.
Чтобы написать текст на изображении с помощью библиотеки OpenCV Python, используйте метод putText(). Использование функции показано в примере выше.
Как видно из приведенного выше примера, вы можете предоставить:
• изображение, на котором можно написать текст;
• текст, который вы хотите написать на изображении;
• позиция: расстояние по горизонтальной и вертикальной осям от верхнего левого угла изображения;
• семейство шрифтов;
• размер шрифта;
• цвет шрифта;
• ширина штриха шрифта.
В приведенном выше примере мы предоставили образец изображения и написали на нем текст и записали выходное изображение в файл.
Какая из перечисленных инструкций выполнится быстрее всего, если n = 10**6?
Anonymous Quiz
17%
a = list(i for i in range(n))
29%
a = [i for i in range(n)]
41%
a = (i for i in range(n))
13%
a = {i for i in range(n)}
👍3
Изменение размера изображения
В следующем примере мы увидим, как можно изменить размер изображения выше с помощью cv2.resize(), сохранив при этом соотношение сторон. Мы изменим размер изображения до 50% от его фактической формы, т.е. уменьшим его высоту до 50% от оригинала и ширину до 50% от оригинала.
Ознакомиться подробнее можно здесь.
В следующем примере мы увидим, как можно изменить размер изображения выше с помощью cv2.resize(), сохранив при этом соотношение сторон. Мы изменим размер изображения до 50% от его фактической формы, т.е. уменьшим его высоту до 50% от оригинала и ширину до 50% от оригинала.
Ознакомиться подробнее можно здесь.
Создание и чтение изображения
В этом примере мы создадим новое изображение в режиме RGB с размером (400, 300). Мы не будем указывать цвет, поэтому методы new() считают значение цвета по умолчанию 0 – для каналов RGB будет черным цветом.
Ознакомиться подробнее можно здесь.
В этом примере мы создадим новое изображение в режиме RGB с размером (400, 300). Мы не будем указывать цвет, поэтому методы new() считают значение цвета по умолчанию 0 – для каналов RGB будет черным цветом.
Ознакомиться подробнее можно здесь.