Forwarded from Хитрый Питон
Вышел релиз SQLAlchemy 2.0, получается довольно интересно:
- Полная поддержка типов: ORM-модели теперь можно делать полностью типизированные, результаты запросов тоже типизированы
- Теперь ORM-модели можно объявлять как MappedAsDataclass и в этом случае на выходе получатся полноценные датаклассы
- Для массовых добавлений/изменений вместо bulk_* методов теперь можно использовать insert-ы и update-ы, которые стали достаточно умными, чтобы делать это одним запросом и поддерживать .returning()
- C-расширения переписали на Cython и обещают повышение их производительности
- Поддержка нового psycopg3 (aka "просто psycopg")
Резюмируя - очень здорово, что в довольно "олдскульный" SQLAlchemy затащили поддержку всяких современных фич языка. Будет интересно попробовать это все.
Статья про изменения в 2.0 https://docs.sqlalchemy.org/en/20/changelog/whatsnew_20.html
QuickStart, в котором показан новый подход к объявлению моделей https://docs.sqlalchemy.org/en/20/orm/quickstart.html
- Полная поддержка типов: ORM-модели теперь можно делать полностью типизированные, результаты запросов тоже типизированы
- Теперь ORM-модели можно объявлять как MappedAsDataclass и в этом случае на выходе получатся полноценные датаклассы
- Для массовых добавлений/изменений вместо bulk_* методов теперь можно использовать insert-ы и update-ы, которые стали достаточно умными, чтобы делать это одним запросом и поддерживать .returning()
- C-расширения переписали на Cython и обещают повышение их производительности
- Поддержка нового psycopg3 (aka "просто psycopg")
Резюмируя - очень здорово, что в довольно "олдскульный" SQLAlchemy затащили поддержку всяких современных фич языка. Будет интересно попробовать это все.
Статья про изменения в 2.0 https://docs.sqlalchemy.org/en/20/changelog/whatsnew_20.html
QuickStart, в котором показан новый подход к объявлению моделей https://docs.sqlalchemy.org/en/20/orm/quickstart.html
Forwarded from Хитрый Питон
YAML
в последние годы набрал огромную популярность, но наверное самая большая проблема с ним в том, что он выглядит просто, но на самом деле формат очень замороченный. Спецификация состоит из 10-и глав https://yaml.org/spec/1.2.2/. Честно признаюсь - я не осилил прочитать ее полностью, думаю, как и большинство людей, активно использующих yaml
.И вот тут мы подходим к теме сегодняшней статьи. Из-за того, что формат сложный, но с ним пытаются работать как с простым, есть много неочевидных способов поломать
yaml-документ. Например, ключи словаря в `yaml
` могут быть любого типа, не только строками. Если это совместить с тем, что yaml
считает, что on
— это True
, а off
— это False
, то вот этот пример из Quickstart-а Github Actions:
on: [push]
будет прочитан как:
True: ['push']
Интересно, в Github Actions свой, пропатченый парсер или они
on
и True
в ключах считают одним и тем же?В общем вот хорошая статья, в которой разбирается этот и многие другие неочевидные ловушки формата. Очень рекомендую всем, кто сталкивается с необходимостью писать/править YAML https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell
Ruudvanasseldonk
The yaml document from hell
As a data format, yaml is extremely complicated and it has many footguns. In this post I explain some of those pitfalls by means of an example, and I suggest a few simpler and safer yaml alternatives.
Forwarded from Хитрый Питон
Кстати, в эту пятницу в 14:00 МСК будет новый стрим python-подкаста. В этот раз мы пробуем новый формат, вместе с Ильей Лебедевым обсудим, что интересного произошло в python-экосистеме за месяц. В темах:
- что интересного происходит в разработке веб-фреймворков
- обсудим выход SQLAlchemy 2.0
- свежие PEP и особенно возможность собирать python без GIL (и другие новые pep-ы)
и другие новости, связанные с python. Приходите на стрим на ютуб и задавайте вопросы в комментариях! https://www.youtube.com/live/wZ8PMWtRCe4?feature=share
- что интересного происходит в разработке веб-фреймворков
- обсудим выход SQLAlchemy 2.0
- свежие PEP и особенно возможность собирать python без GIL (и другие новые pep-ы)
и другие новости, связанные с python. Приходите на стрим на ютуб и задавайте вопросы в комментариях! https://www.youtube.com/live/wZ8PMWtRCe4?feature=share
YouTube
Выход SQLAlchemy 2.0 / сборка Python без GIL / топ Python библиотек 2022 и другие новости Python
0:00 - интро
1:03 - фреймворк Robin c Rust-рантаймом и его связь с искусством
6:31 - PEP 703 или Python без GIL
10:43 - запуск SQLAlchemy 2.0 или алхимия для дедов
13:48 - ответ на вопрос, перспективно ли учить FastAPI или углубляться в Django
14:00 - ответ…
1:03 - фреймворк Robin c Rust-рантаймом и его связь с искусством
6:31 - PEP 703 или Python без GIL
10:43 - запуск SQLAlchemy 2.0 или алхимия для дедов
13:48 - ответ на вопрос, перспективно ли учить FastAPI или углубляться в Django
14:00 - ответ…
Forwarded from Хитрый Питон
Вышел MyPy 1.0.0, из интересных изменений:
- На 40% быстрее, я очень рад, потому что на более-менее большой кодовой базе он раньше тормозил как не в себя
- Добавили сообщения о undefined variables, использовании переменной до ее объявления. Кажется, тот же flake8 нормально это отлавливает, но все равно выглядит небесполезно
- Добавили поддержку типа Self (есть в 3.11, для более ранних версий надо использовать typing_extensions)
- Реализовали поддержку ParamSpec, но я если честно еще ни разу ParamSpec не использовал в реальном коде, но если интересно, это PEP 612
И еще из интересного, они на конец перешли на semver и теперь будет проще по номерам версий понимать, будут ли подводные камни при обновлении 🙂
Подробнее вот тут https://mypy-lang.blogspot.com/2023/02/mypy-10-released.html
- На 40% быстрее, я очень рад, потому что на более-менее большой кодовой базе он раньше тормозил как не в себя
- Добавили сообщения о undefined variables, использовании переменной до ее объявления. Кажется, тот же flake8 нормально это отлавливает, но все равно выглядит небесполезно
- Добавили поддержку типа Self (есть в 3.11, для более ранних версий надо использовать typing_extensions)
- Реализовали поддержку ParamSpec, но я если честно еще ни разу ParamSpec не использовал в реальном коде, но если интересно, это PEP 612
И еще из интересного, они на конец перешли на semver и теперь будет проще по номерам версий понимать, будут ли подводные камни при обновлении 🙂
Подробнее вот тут https://mypy-lang.blogspot.com/2023/02/mypy-10-released.html
Python Enhancement Proposals (PEPs)
PEP 612 – Parameter Specification Variables | peps.python.org
There currently are two ways to specify the type of a callable, the Callable[[int, str], bool] syntax defined in PEP 484, and callback protocols from PEP 544. Neither of these support forwarding the parameter types of one callable over to another calla...
Hacking The Python For Loop | Hackaday
https://hackaday.com/2023/02/05/hacking-the-python-for-loop/
https://hackaday.com/2023/02/05/hacking-the-python-for-loop/
Hackaday
Hacking The Python For Loop
In the early days of C, you’d occasionally see someone — probably a former Pascal programmer — write something like this: #define BEGIN { #define END } This would usually initiate…
#SBJ
#linters in #PyCharm
#googling
#ChatGPT_answer:
PyCharm provides built-in support for several linters, including #Pylint, #Flake8, and #mypy. Here's how to use each of these linters:
Pylint: Pylint is a popular linter for Python that checks for programming errors, code style, and code complexity. To use Pylint in PyCharm, follow these steps:
Go to Settings/Preferences > Editor > Inspections.
Search for "Pylint" and check the box to enable it.
Click "Configure" to customize the Pylint settings, such as the severity of the issues and the Pylint executable path.
Flake8: Flake8 is another popular linter that combines several other linters, including Pylint, PyFlakes, and McCabe. To use Flake8 in PyCharm, follow these steps:
Go to Settings/Preferences > Editor > Inspections.
Search for "Flake8" and check the box to enable it.
Click "Configure" to customize the Flake8 settings, such as the severity of the issues and the Flake8 executable path.
mypy: mypy is a static type checker for Python that can help catch type-related bugs before runtime. To use mypy in PyCharm, follow these steps:
Go to Settings/Preferences > Editor > Inspections.
Search for "mypy" and check the box to enable it.
Click "Configure" to customize the mypy settings, such as the severity of the issues and the mypy executable path.
In general, it's a good idea to use multiple linters to catch as many issues as possible. You can enable and configure multiple linters in PyCharm and see the results in the editor and the #inspection #tool window.
#linters in #PyCharm
#googling
#ChatGPT_answer:
PyCharm provides built-in support for several linters, including #Pylint, #Flake8, and #mypy. Here's how to use each of these linters:
Pylint: Pylint is a popular linter for Python that checks for programming errors, code style, and code complexity. To use Pylint in PyCharm, follow these steps:
Go to Settings/Preferences > Editor > Inspections.
Search for "Pylint" and check the box to enable it.
Click "Configure" to customize the Pylint settings, such as the severity of the issues and the Pylint executable path.
Flake8: Flake8 is another popular linter that combines several other linters, including Pylint, PyFlakes, and McCabe. To use Flake8 in PyCharm, follow these steps:
Go to Settings/Preferences > Editor > Inspections.
Search for "Flake8" and check the box to enable it.
Click "Configure" to customize the Flake8 settings, such as the severity of the issues and the Flake8 executable path.
mypy: mypy is a static type checker for Python that can help catch type-related bugs before runtime. To use mypy in PyCharm, follow these steps:
Go to Settings/Preferences > Editor > Inspections.
Search for "mypy" and check the box to enable it.
Click "Configure" to customize the mypy settings, such as the severity of the issues and the mypy executable path.
In general, it's a good idea to use multiple linters to catch as many issues as possible. You can enable and configure multiple linters in PyCharm and see the results in the editor and the #inspection #tool window.
Каким же образом можно свободно передавать, в некоторых случаях даже хранить данные, не переживая о потенциальных утечках? Именно здесь в игру вступает анонимизация данных путём маскирования.
Проще говоря, анонимизация данных – это процесс перестановки данных таким образом, после которого будет невозможно понять, кому принадлежат данные. В зависимости от цели может так же возникнуть потребность в том, чтобы сохранить смысл и такие свойства как однородность, целостность, взаимозависимость и вариативность исходных данных. Чтобы решить возможную проблему, необходимо понять, как и какие данные необходимо маскировать, а какие нужно сохранить.
Anonympy – простая, но богатая своим функционалом библиотека, обладающая набором инструментов и функций для анонимизации и маскировки данных. На текущий момент проходит бета-тестирование функционала по анонимизации изображений и цензурированию текста в PDF-документах, но об этом в другой раз.
pip install anonympy
- Читать дальше
- Зеркало
- Anonympy
@data_analysis_ml
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Python и 1000 уязвимостей
Конвертируем строку в словарь
Использование метода
Еще одна функция, которую применяют для преобразования строк в словари, —
Использование метода
ast.literal.eval()
Сегодня продолжим конвертировать строку в словарь. Смотреть прошлый гайд: Использование метода json.loads()Еще одна функция, которую применяют для преобразования строк в словари, —
ast.literal.eval()
. Чтобы ее использовать, нужно импортировать библиотеку ast
.Forwarded from Python и 1000 уязвимостей
🐼 По маршруту SQLite - Pandas: 7 основных операций
💬 Когда я занимался разработкой iOS, еще не было устоявшихся решений для работы с базами данных мобильных приложений, так что мне пришлось реализовывать свою собственную БД.
Выбор пал на SQLite, упрощенный механизм для управления реляционными базами данных.
Важно отметить, что pandas, ведущая библиотека для обработки данных, предоставляет соответствующие функциональности для взаимодействия с разными базами данных, в том числе и SQLite. В данной статье мы рассмотрим ряд основных операций.
Читать статью
💬 Когда я занимался разработкой iOS, еще не было устоявшихся решений для работы с базами данных мобильных приложений, так что мне пришлось реализовывать свою собственную БД.
Выбор пал на SQLite, упрощенный механизм для управления реляционными базами данных.
Важно отметить, что pandas, ведущая библиотека для обработки данных, предоставляет соответствующие функциональности для взаимодействия с разными базами данных, в том числе и SQLite. В данной статье мы рассмотрим ряд основных операций.
Читать статью
Forwarded from Python и 1000 уязвимостей
Конвертируем строку в словарь
Использование метода
Мы можем преобразовать строку в словарь с помощью функции
Использование метода
json.loads()
Программистам постоянно приходится преобразовывать различные типы данных, и очень важно делать это правильно.Мы можем преобразовать строку в словарь с помощью функции
json.loads()
. Чтобы ее использовать, нужно импортировать модуль json
.Forwarded from Инжиниринг Данных (Dmitry)
Наконец-то я закончил замечательную книгу, наверно лучшую в своем роде - Python Crash Course (3rd edition).
Книга состоит из 2х частей:
1) теория + упражнения про обычные питоновские вещи, но все объяснено очень понятным языком (наверно за это очень любят эту книгу). Я давным-давно закончил часть1.
2) а вот 2ю часть все откладывалась. Это набор разных проектов на питоне.
Я загрузил свой код к себе в репо. Так же там есть популярные cheetsheets от автора.
Проекты:
- сделать игру на PyGame, используется много файлов и классов
- визуализация данных с помощью Matplotlib, Plotly, генерация данных
- работа с API на примере GitHub, HackerRank
- достаточно большой проект на Django, в котором будет много HTML.
PyGame и Django мне вряд ли понадобятся, но моя задача просто чаще использовать питон, и эти проекты отлично подошли. Даже промелькнула мысль сделать английскую версию datalearn на django, но быстро ее отбросил.
Следующая книгу по Python - Fluent Python. В ней много базовых вещей, но это как вода, которая должна заполнить пустоты в стакане с песком:)
Что вам еще по питону нравится?
Книга состоит из 2х частей:
1) теория + упражнения про обычные питоновские вещи, но все объяснено очень понятным языком (наверно за это очень любят эту книгу). Я давным-давно закончил часть1.
2) а вот 2ю часть все откладывалась. Это набор разных проектов на питоне.
Я загрузил свой код к себе в репо. Так же там есть популярные cheetsheets от автора.
Проекты:
- сделать игру на PyGame, используется много файлов и классов
- визуализация данных с помощью Matplotlib, Plotly, генерация данных
- работа с API на примере GitHub, HackerRank
- достаточно большой проект на Django, в котором будет много HTML.
PyGame и Django мне вряд ли понадобятся, но моя задача просто чаще использовать питон, и эти проекты отлично подошли. Даже промелькнула мысль сделать английскую версию datalearn на django, но быстро ее отбросил.
Следующая книгу по Python - Fluent Python. В ней много базовых вещей, но это как вода, которая должна заполнить пустоты в стакане с песком:)
Что вам еще по питону нравится?
O’Reilly Online Learning
Python Crash Course, 3rd Edition
Python Crash Course is the world's best-selling guide to the Python guide programming language, with over 1,500,000 copies sold to date! This fast-paced, thorough introduction to programming with Python will … - Selection from Python Crash Course, 3rd Edition…
Forwarded from Data Асы 🧩🖧🐉🐘🐧❄️📊
📆🕰 Работаем с датой и временем
С помощью следующего фрагмента кода вы сможете с легкостью узнать год/месяц/день/час/минуту/секунду настоящего времени.
#python
С помощью следующего фрагмента кода вы сможете с легкостью узнать год/месяц/день/час/минуту/секунду настоящего времени.
#python
Forwarded from Data Асы 🧩🖧🐉🐘🐧❄️📊
Forwarded from Data Асы 🧩🖧🐉🐘🐧❄️📊
Forwarded from Data Асы 🧩🖧🐉🐘🐧❄️📊
6️⃣📛 6 неявных ошибок новичков в Pandas
Все мы привыкли к ярким и заметным сообщениям об ошибках, которые маячат у нас перед глазами, пока мы пишем код.
Но что делать с теми ошибками, что не видны сразу?
👆🏻Читать
#python
Все мы привыкли к ярким и заметным сообщениям об ошибках, которые маячат у нас перед глазами, пока мы пишем код.
Но что делать с теми ошибками, что не видны сразу?
👆🏻Читать
#python
itProger - Сообщество программистов
6 неявных ошибок новичков в Pandas - статья на itProger
Все мы привыкли к ярким и заметным сообщениям об ошибках, которые маячат у нас перед глазами, пока мы пишем код. Но что делать с теми ошибками, что не видны сразу? ⚡ Информационные статьи и интересные новости из мира IT на сайте школы программирования itProger
Forwarded from Data Асы 🧩🖧🐉🐘🐧❄️📊
🦕🧑🏻🌾 Курс по Django 3
▪️1. Что такое Django. Курс по изучению Django 3
▪️2. Установка django 3. How install django 3
▪️3. Введение в командную строку. Начало работы с терминалом Django
▪️4. Создание проекта на Django.
Django start project
▪️5. Состав проекта Django
▪️6. Запускаем локальный сервер разработки Django. Run server django
📺 Просмотр
#python
▪️1. Что такое Django. Курс по изучению Django 3
▪️2. Установка django 3. How install django 3
▪️3. Введение в командную строку. Начало работы с терминалом Django
▪️4. Создание проекта на Django.
Django start project
▪️5. Состав проекта Django
▪️6. Запускаем локальный сервер разработки Django. Run server django
📺 Просмотр
#python
YouTube
Курс по Django 3
Share your videos with friends, family, and the world
Forwarded from Data Асы 🧩🖧🐉🐘🐧❄️📊
Стандартная_библиотека_Python_3_Справочник_с_примерами.pdf
47 MB
📙 Даг Хеллман «Стандартная библиотека Python 3. Справочник с примерами»
В книге имеются готовые примеры кода, предназначенного для работы с текстом, структурами данных, значениями даты и времени, файловой системой, процессами, потоками, электронной почтой, пакетами и другими ресурсами.
Каждому модулю посвящен отдельный раздел, содержащий ссылки на дополнительные ресурсы, что делает эту книгу идеальным учебным и справочным руководством.
#python
В книге имеются готовые примеры кода, предназначенного для работы с текстом, структурами данных, значениями даты и времени, файловой системой, процессами, потоками, электронной почтой, пакетами и другими ресурсами.
Каждому модулю посвящен отдельный раздел, содержащий ссылки на дополнительные ресурсы, что делает эту книгу идеальным учебным и справочным руководством.
#python
Forwarded from Data Асы 🧩🖧🐉🐘🐧❄️📊
📊📝Шпаргалка по Pandas
Эта библиотека для анализа данных прекрасно себя зарекомендовала в Data Science.
Такая шпаргалка поможет в построении различных диаграмм с использованием pandas.
#python
Эта библиотека для анализа данных прекрасно себя зарекомендовала в Data Science.
Такая шпаргалка поможет в построении различных диаграмм с использованием pandas.
#python
Forwarded from Data Асы 🧩🖧🐉🐘🐧❄️📊
🔁🔄 Фишки и лайфхаки для циклов
Python является одновременно традиционным и нетрадиционным, когда речь идет о синтаксисе циклов.
В этом языке нет традиционной структуры
Тем не менее, написать хороший цикл – не всегда простая задача, но есть несколько фишек и лайфхаков, о которых надо знать.
#python
Python является одновременно традиционным и нетрадиционным, когда речь идет о синтаксисе циклов.
В этом языке нет традиционной структуры
for(init; condition; incrment)
из трех частей, и потому циклы тут выглядят проще. Тем не менее, написать хороший цикл – не всегда простая задача, но есть несколько фишек и лайфхаков, о которых надо знать.
#python
Forwarded from Data Асы 🧩🖧🐉🐘🐧❄️📊
🅾️🆖 Про О-нотацию
Про логарифмическую сложность, квадратичную, экспоненциальную и другие типы.
🟢 Сложность O(n log n)
Фактически, все эффективные алгоритмы сортировки представляют собой O(n log n) сложность: сортировка слиянием (merge), пирамидальная сортировка (heap), быстрая сортировка, а еще Timsort (изобретенный Тимом Питерсом алгоритм, который используется методом
Например, отсортировать
🔵 Сложность O(n^2)
Если требуется найти повторяющиеся книги на несортированной полке, это уже квадратичная сложность. Например, на полке стоят 100 несортированных книг, мы берем одну и ищем дубли среди остальных 99, потом берём другую и снова проверяем оставшиеся. Очень затратно: проверка 100 книг займёт 100 × 100, или 10 000 шагов, причем проверка 200 займёт уже 40 000 шагов - в четыре раза больше.
В реальном мире, именно для этого нам необходимо знание
Итак, остались те, чьи имена нельзя произносить: экспоненциальная
🟣 Сложность O(2^n)
Допустим, на полке 2 книги, и мы будем собирать все возможные комбинации книг: первая комбинация - пустая полка, вторая - книга A, третья - книга B и последняя - обе книги на полке. Для 3 книг получим уже 8 комбинаций. Так вот, это - экспоненциальный алгоритм. Причем, обратите внимание, нас интересуют не перестановки, а только комбинации.
🔴 Сложность O(n!)
Перестановки, как раз, будут отвечать за факториальную сложность: если у нас на полке
И оба этих алгоритма крайне плохо масштабируются: даже для малых
💡 Наконец переходим от теории к практике!
Что из себя представляет каждый из алгоритмов мы рассмотрели, практически, под лупой. Мы также понимаем, как увеличение входных данных (количества книг) повлияет на каждый из них. Давайте скорее посмотрим как это применить к настоящему коду, а не книгам.
Грубо говоря, существует несколько «контрольных» точек, которые могут нам помочь определить большую
1. Если код не оперирует входными данными, это
2. Если код итерируется по данным, это
3. Два вложенных цикла, каждый из которых проходит по входным данным, дают сложность
4. Простой вызов функции не считается отдельным шагом, считаем только шаги внутри функции.
5. Если в коде есть конструкция «разделяй и властвуй», это
6. Если «разделяй и властвуй» выполняется для каждого элемента во входных данных, это
7. Если код проходит по каждой возможной комбинации значений в
8. Если рассматриваются все возможные перестановки значений в данных, это
9. Если код предполагает сортировку данных, это будет как минимум
В целом, это хорошие ориентиры, но они не заменяют фактический анализ кода (чем мы, кстати, и займемся в заключительном посте по сложности алгоритмов). И, конечно же, напоминаем,
❓Уже зная некоторые флаги, как вы думаете, какая сложность у этих методов python?
- .append()
- .insert()
- .remove()
- .sort()
- цикл for
#python
Про логарифмическую сложность, квадратичную, экспоненциальную и другие типы.
🟢 Сложность O(n log n)
Фактически, все эффективные алгоритмы сортировки представляют собой O(n log n) сложность: сортировка слиянием (merge), пирамидальная сортировка (heap), быстрая сортировка, а еще Timsort (изобретенный Тимом Питерсом алгоритм, который используется методом
sort()
в Python). Например, отсортировать
n
книг в алфавитном порядке, как раз, представляет O(n log n)
сложность.🔵 Сложность O(n^2)
Если требуется найти повторяющиеся книги на несортированной полке, это уже квадратичная сложность. Например, на полке стоят 100 несортированных книг, мы берем одну и ищем дубли среди остальных 99, потом берём другую и снова проверяем оставшиеся. Очень затратно: проверка 100 книг займёт 100 × 100, или 10 000 шагов, причем проверка 200 займёт уже 40 000 шагов - в четыре раза больше.
В реальном мире, именно для этого нам необходимо знание
BIG O
. Чтобы не писать алгоритм O(n^2), когда можно было написать O(n log n) или O(n).Итак, остались те, чьи имена нельзя произносить: экспоненциальная
O(2^n)
и факториальная сложность O(n!)
. 🟣 Сложность O(2^n)
Допустим, на полке 2 книги, и мы будем собирать все возможные комбинации книг: первая комбинация - пустая полка, вторая - книга A, третья - книга B и последняя - обе книги на полке. Для 3 книг получим уже 8 комбинаций. Так вот, это - экспоненциальный алгоритм. Причем, обратите внимание, нас интересуют не перестановки, а только комбинации.
🔴 Сложность O(n!)
Перестановки, как раз, будут отвечать за факториальную сложность: если у нас на полке
3
книги, все варианты перестановок - 3!
. И оба этих алгоритма крайне плохо масштабируются: даже для малых
n
они быстро становятся невыполнимыми за разумное время.💡 Наконец переходим от теории к практике!
Что из себя представляет каждый из алгоритмов мы рассмотрели, практически, под лупой. Мы также понимаем, как увеличение входных данных (количества книг) повлияет на каждый из них. Давайте скорее посмотрим как это применить к настоящему коду, а не книгам.
Грубо говоря, существует несколько «контрольных» точек, которые могут нам помочь определить большую
О
. Учитывая, что n
- это размер входных данных, можно сказать:1. Если код не оперирует входными данными, это
O(1)
.2. Если код итерируется по данным, это
O(n)
.3. Два вложенных цикла, каждый из которых проходит по входным данным, дают сложность
O(n^2)
.4. Простой вызов функции не считается отдельным шагом, считаем только шаги внутри функции.
5. Если в коде есть конструкция «разделяй и властвуй», это
O(log n)
.6. Если «разделяй и властвуй» выполняется для каждого элемента во входных данных, это
O(nlog n)
.7. Если код проходит по каждой возможной комбинации значений в
n
данных, это O(2^n)
или другая экспоненциальная сложность (3^n, 4^n…)
.8. Если рассматриваются все возможные перестановки значений в данных, это
O(n!)
.9. Если код предполагает сортировку данных, это будет как минимум
O(nlog n)
.В целом, это хорошие ориентиры, но они не заменяют фактический анализ кода (чем мы, кстати, и займемся в заключительном посте по сложности алгоритмов). И, конечно же, напоминаем,
О - нотация
сообщает нам о том, насколько сильно усложняется процесс вычисления при увеличении входных данных. И ни в коем случае не выносит заключений о том, является ли код быстрым или медленным, эффективным или нет.❓Уже зная некоторые флаги, как вы думаете, какая сложность у этих методов python?
- .append()
- .insert()
- .remove()
- .sort()
- цикл for
#python