В одну строчку
Python гибкий язык и позволяет многое сделать в одну строчку. К примеру, матрицу из одних нулей. Или постоянно возрастающий список.
Такие методы лучше использовать когда надо сгенерировать что-то маленькое или нужное. Если использовать нужно сейчас и строго по одному, то лучше использовать итераторы. Об итераторах подробнее расскажем чуть позже.
Примеры списочных выражений на картинке. В следующий раз не придется набирать одинаковый текст несколько раз.
Python гибкий язык и позволяет многое сделать в одну строчку. К примеру, матрицу из одних нулей. Или постоянно возрастающий список.
Такие методы лучше использовать когда надо сгенерировать что-то маленькое или нужное. Если использовать нужно сейчас и строго по одному, то лучше использовать итераторы. Об итераторах подробнее расскажем чуть позже.
Примеры списочных выражений на картинке. В следующий раз не придется набирать одинаковый текст несколько раз.
🐍 Где изучать Python в 2021 году: 78 ресурсов для начинающих
Мы отобрали лучшие бесплатные курсы на русском языке, онлайн-тренажеры и телеграм-каналы, которые помогут новичку реализовать свой потенциал в Python-разработке.
https://proglib.io/sh/8yFI5qaeCb
Мы отобрали лучшие бесплатные курсы на русском языке, онлайн-тренажеры и телеграм-каналы, которые помогут новичку реализовать свой потенциал в Python-разработке.
https://proglib.io/sh/8yFI5qaeCb
Кругом только и слышно, что об искусственном интеллекте, машинном обучении, Data Science... Но как начинаешь разбираться, нужна серьёзная математическая подготовка на уровне вуза. Мы пригласили опытных преподавателей МГУ помочь нашим читателям подготовиться к карьере дата сайентиста.
В наборе всё, что нужно: мат. анализ, линейная алгебра, комбинаторика, теория вероятностей и мат. статистика. Кстати, именно такой багаж знаний требуют от абитуриентов ШАД. Каждая тема сопровождается подготовительными материалами, лекциями и практическими заданиями. Всё это с обратной связью кураторов и преподавателей.
Полная программа курса и прочая информация здесь
Специально для наших подписчиков скидка 15% по промокоду PYPROGLIB
Поспешите, осталось всего 9 мест.
В наборе всё, что нужно: мат. анализ, линейная алгебра, комбинаторика, теория вероятностей и мат. статистика. Кстати, именно такой багаж знаний требуют от абитуриентов ШАД. Каждая тема сопровождается подготовительными материалами, лекциями и практическими заданиями. Всё это с обратной связью кураторов и преподавателей.
Полная программа курса и прочая информация здесь
Специально для наших подписчиков скидка 15% по промокоду PYPROGLIB
Поспешите, осталось всего 9 мест.
Библиотека Numpy
Библиотека облегчающая работу со списками. Работает намного быстрее стандартных методов за счет написания на более быстром С и Фортран. Однако работает не со списками, а с массивами (все объекты одного типа).
При простом вычислении квадратного корня от 0 до 10^6 python затрачивает примерно 0.38 секунды, если вы выберите самый хороший способ - map. Быстро да? При худших способах способах время тоже не сильно упадет еще больше до 0.64 секунды. Но с помощью Numpy можно улучшить первый результат в 10 раз!
Из-за быстроты и огромного потенциала используют в машинном обучении и Big Data, ведь, библиотека обрабатывает данные.
Библиотека облегчающая работу со списками. Работает намного быстрее стандартных методов за счет написания на более быстром С и Фортран. Однако работает не со списками, а с массивами (все объекты одного типа).
При простом вычислении квадратного корня от 0 до 10^6 python затрачивает примерно 0.38 секунды, если вы выберите самый хороший способ - map. Быстро да? При худших способах способах время тоже не сильно упадет еще больше до 0.64 секунды. Но с помощью Numpy можно улучшить первый результат в 10 раз!
Из-за быстроты и огромного потенциала используют в машинном обучении и Big Data, ведь, библиотека обрабатывает данные.
В одну строку - итератор
Вы уже знаете, как писать многие крутые штуки в одну строчку. Но можно ускорить работу кода, используя итераторы.
Итератор - объект, который хранит начало, конец, текущий элемент и правило преобразований. В итоге мы можем получать только новые значения.
Преимущество в том, что итераторы потребляют намного меньше памяти, чем списки и кортежи.
Вы уже точно знаете один итератор и даже пользуетесь им - range().
А есть еще один очень полезный - map(). Он принимает два аргумента, функцию для задания правила преобразования и что-то, что требуется преобразовать.
Вы уже знаете, как писать многие крутые штуки в одну строчку. Но можно ускорить работу кода, используя итераторы.
Итератор - объект, который хранит начало, конец, текущий элемент и правило преобразований. В итоге мы можем получать только новые значения.
Преимущество в том, что итераторы потребляют намного меньше памяти, чем списки и кортежи.
Вы уже точно знаете один итератор и даже пользуетесь им - range().
А есть еще один очень полезный - map(). Он принимает два аргумента, функцию для задания правила преобразования и что-то, что требуется преобразовать.
«Лаборатория Касперского» открывает набор на стажировку SafeBoard. Это отличная возможность бодро начать карьеру в IT еще до окончания вуза — успей подать заявку.
Главное о стажировке:
• Проходит в московском офисе и открыта для студентов любых ВУЗов и курсов;
• Совместима с учебой — гибкий график 20 часов в неделю. Можно и больше, если есть желание и возможность: до 35 часов — в учебное время, до 40 часов — летом.
• Длится год;
• Оплачивается (а еще стажерам ежемесячно компенсируют расходы на питание, предоставляют бесплатный unlim-доступ к спортзалу и ко всем открытым мероприятиям).
Набор ведется на направления:
• Разработка (С++);
• Разработка (C#/Python/Go);
• Разработка (Scala/Java/Python/Go);
• Тестирование (Python/ручное);
• Системный анализ;
• Системное администрирование;
• Mobile;
• Data Science;
• Анализ вредоносного ПО;
• Пентест.
Лучшие участники получат приглашение на работу.
Подать заявку: https://kas.pr/cjg8
Главное о стажировке:
• Проходит в московском офисе и открыта для студентов любых ВУЗов и курсов;
• Совместима с учебой — гибкий график 20 часов в неделю. Можно и больше, если есть желание и возможность: до 35 часов — в учебное время, до 40 часов — летом.
• Длится год;
• Оплачивается (а еще стажерам ежемесячно компенсируют расходы на питание, предоставляют бесплатный unlim-доступ к спортзалу и ко всем открытым мероприятиям).
Набор ведется на направления:
• Разработка (С++);
• Разработка (C#/Python/Go);
• Разработка (Scala/Java/Python/Go);
• Тестирование (Python/ручное);
• Системный анализ;
• Системное администрирование;
• Mobile;
• Data Science;
• Анализ вредоносного ПО;
• Пентест.
Лучшие участники получат приглашение на работу.
Подать заявку: https://kas.pr/cjg8
Функции map(), filter() и reduce() используют, чтобы привнести в Python немного функционального программирования.
Все три из них являются удобными функциями, которые можно заменить на списки или циклы. Но они
обеспечивают более элегантный и краткий подход к некоторым задачам.
1. map() - функция map перебираeт все элементы в данном итеративном объекте и выполняeт функцию, которую мы передали в качестве аргумента для каждого из них.
2. filter() - Подобно map(), filter() принимает объект функции и итерацию и создает новый список. Как следует из названия, filter() формирует новый список, содержащий только элементы, удовлетворяющие определенному условию.
3. reduce() - reduce работает иначе, чем map() и filter(). Он не возвращает новый список, основанный на функции и итерации, которые мы передали.
Вместо этого он возвращает одно значение. На картинке мы приводим пример сложения чисел. Но это самое простейшее. Можно перемножать, возводить в квадрат и многое другое (и не обязательно с числами).
Все три из них являются удобными функциями, которые можно заменить на списки или циклы. Но они
обеспечивают более элегантный и краткий подход к некоторым задачам.
1. map() - функция map перебираeт все элементы в данном итеративном объекте и выполняeт функцию, которую мы передали в качестве аргумента для каждого из них.
2. filter() - Подобно map(), filter() принимает объект функции и итерацию и создает новый список. Как следует из названия, filter() формирует новый список, содержащий только элементы, удовлетворяющие определенному условию.
3. reduce() - reduce работает иначе, чем map() и filter(). Он не возвращает новый список, основанный на функции и итерации, которые мы передали.
Вместо этого он возвращает одно значение. На картинке мы приводим пример сложения чисел. Но это самое простейшее. Можно перемножать, возводить в квадрат и многое другое (и не обязательно с числами).
List Comprehensions
Удаление элемента из списка во время его итерации – это проблема, которая хорошо известна любому опытному разработчику.
К счастью, Python включает в себя ряд элегантных парадигм программирования, которые при правильном использовании могут привести к значительному упрощению и оптимизации кода.
Одна из таких парадигм – list comprehensions. Генераторы списков часто используют именно для решения подобных проблем, что и показывает реализация кода.
Заметьте, что в примере "забывается" старый список и на его месте появляется новый.
Удаление элемента из списка во время его итерации – это проблема, которая хорошо известна любому опытному разработчику.
К счастью, Python включает в себя ряд элегантных парадигм программирования, которые при правильном использовании могут привести к значительному упрощению и оптимизации кода.
Одна из таких парадигм – list comprehensions. Генераторы списков часто используют именно для решения подобных проблем, что и показывает реализация кода.
Заметьте, что в примере "забывается" старый список и на его месте появляется новый.
Mодуль cmath
Функции в математическом модуле стандартной библиотеки Python обрабатывают числа с плавающей запятой. Для комплексных чисел библиотека Python содержит модуль cmath.
📌Функция polar():
Эта функция возвращает полярное представление декартовой записи комплексного числа. Возвращаемое значение - это кортеж, состоящий из модуля и фазы.
📌Функция phase():
Эта функция возвращает угол против часовой стрелки между осью x и сегментом, соединяющим точку с исходной точкой. Угол представлен в радианах и находится между π и -π.
📌Функция rect():
Эта функция возвращает декартово представление комплексного числа, представленного в полярной форме, то есть по модулю и фазе.
📌Функция sin():
Эта функция возвращает тригонометрическое соотношение синуса фазового угла, представленного в радианах.
Функции в математическом модуле стандартной библиотеки Python обрабатывают числа с плавающей запятой. Для комплексных чисел библиотека Python содержит модуль cmath.
📌Функция polar():
Эта функция возвращает полярное представление декартовой записи комплексного числа. Возвращаемое значение - это кортеж, состоящий из модуля и фазы.
📌Функция phase():
Эта функция возвращает угол против часовой стрелки между осью x и сегментом, соединяющим точку с исходной точкой. Угол представлен в радианах и находится между π и -π.
📌Функция rect():
Эта функция возвращает декартово представление комплексного числа, представленного в полярной форме, то есть по модулю и фазе.
📌Функция sin():
Эта функция возвращает тригонометрическое соотношение синуса фазового угла, представленного в радианах.
Методов списков list
Напоминаю, списки в Python – упорядоченные последовательности элементов различных типов данных. Списки можно изменять, например, добавлять новые элементы.
1. list.append(x) – добавляет элемент, переданный в качестве аргумента, в конец списка. Этот метод является самым простым и распространённым в коде.
2. list.insert(i, x) – вставляет элемент в переданную позицию. Первый аргумент означает индекс элемента, перед которым будет добавлено новое значения.
Таким образом, list.insert(0, x) вставит элемент в начало списка, а list.insert(len(list), x) эквивалентно записи list.append(x).
3. list.extend(iterable) – расширяет список, добавляя все элементы другой коллекции.
Напоминаю, списки в Python – упорядоченные последовательности элементов различных типов данных. Списки можно изменять, например, добавлять новые элементы.
1. list.append(x) – добавляет элемент, переданный в качестве аргумента, в конец списка. Этот метод является самым простым и распространённым в коде.
2. list.insert(i, x) – вставляет элемент в переданную позицию. Первый аргумент означает индекс элемента, перед которым будет добавлено новое значения.
Таким образом, list.insert(0, x) вставит элемент в начало списка, а list.insert(len(list), x) эквивалентно записи list.append(x).
3. list.extend(iterable) – расширяет список, добавляя все элементы другой коллекции.
Библиотека Numpy "Базовые операции"
В Numpy очень просто реализованы простейшие операции: сложение, вычитание, умножение и деление. Единственное — для этого массивы должны быть одинаковыми.
Даже фильтрация возможна простейшим знаком. В массивах можно не перебирать через итератор filters, а просто поставить нужный знак.
Доступны так же математические операции: синус, косинус и подобные.
В Numpy очень просто реализованы простейшие операции: сложение, вычитание, умножение и деление. Единственное — для этого массивы должны быть одинаковыми.
Даже фильтрация возможна простейшим знаком. В массивах можно не перебирать через итератор filters, а просто поставить нужный знак.
Доступны так же математические операции: синус, косинус и подобные.
Стеки
Стек — абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).
Методы встроенного списка в Python позволяют очень легко использовать список в виде стека. Чтобы добавить элемент на вершину стека, используйте append(). Чтобы извлечь элемент из верхней части стека, используйте pop() без явного индекса.
Кажется, что это не пригодится, но многие задачи хорошо решаются через pop, а главное, junior обязан знать такой простой способ и его применение. На собеседовании может встретится.
Стек — абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).
Методы встроенного списка в Python позволяют очень легко использовать список в виде стека. Чтобы добавить элемент на вершину стека, используйте append(). Чтобы извлечь элемент из верхней части стека, используйте pop() без явного индекса.
Кажется, что это не пригодится, но многие задачи хорошо решаются через pop, а главное, junior обязан знать такой простой способ и его применение. На собеседовании может встретится.
Библиотека Numpy
При создании массивом мы получаем тип ndarray.
Рассмотрим наиболее часты атрибуты (не методы!) применимые к массивам:
ndim - число измерений (чаще их называют "оси") массива.
shape - размеры массива, его форма. Это кортеж натуральных чисел, показывающий длину массива по каждой оси. Для матрицы из n строк и m столбов, shape будет (n,m). Число элементов кортежа shape равно ndim.
size - количество элементов массива. Очевидно, равно произведению всех элементов атрибута shape.
dtype - объект, описывающий тип элементов массива
itemsize - размер каждого элемента массива в байтах.
data - буфер, содержащий фактические элементы массива. Обычно мы этот атрибут не используем, так как обращаться к элементам массива проще всего с помощью индексов.
При создании массивом мы получаем тип ndarray.
Рассмотрим наиболее часты атрибуты (не методы!) применимые к массивам:
ndim - число измерений (чаще их называют "оси") массива.
shape - размеры массива, его форма. Это кортеж натуральных чисел, показывающий длину массива по каждой оси. Для матрицы из n строк и m столбов, shape будет (n,m). Число элементов кортежа shape равно ndim.
size - количество элементов массива. Очевидно, равно произведению всех элементов атрибута shape.
dtype - объект, описывающий тип элементов массива
itemsize - размер каждого элемента массива в байтах.
data - буфер, содержащий фактические элементы массива. Обычно мы этот атрибут не используем, так как обращаться к элементам массива проще всего с помощью индексов.
Функция sum()
Как бы вы решили задачу получения суммы элементов списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции sum().
Параметры sum():
iterable - итерируемые типы (list ,dict, tuple, и.т.д.)
start - (необязательно) значение этого параметра прибавляется к уже готовой сумме элементов iterable. По умолчанию значение этого параметра 0.
Возвращаемое значение из sum():
sum() возвращает сумму start и элементов всех последующих элементов.
Как бы вы решили задачу получения суммы элементов списка без обхода элементов в цикле?
Это можно сделать с помощью стандартной функции sum().
Параметры sum():
iterable - итерируемые типы (list ,dict, tuple, и.т.д.)
start - (необязательно) значение этого параметра прибавляется к уже готовой сумме элементов iterable. По умолчанию значение этого параметра 0.
Возвращаемое значение из sum():
sum() возвращает сумму start и элементов всех последующих элементов.
High Performance Python (2020)
Автор: Micha Gorelick, Ian Ozsvald
Количество страниц: 468
В книге описывается, как отыскивать проблемные места в проектах на Python и грамотно улучшать производительность, устраняя их. Изучив фундаментальную теорию, лежащую в основе выбора дизайна, вы сможете правильнее реализовывать свои идеи.
Скачать книгу
Автор: Micha Gorelick, Ian Ozsvald
Количество страниц: 468
В книге описывается, как отыскивать проблемные места в проектах на Python и грамотно улучшать производительность, устраняя их. Изучив фундаментальную теорию, лежащую в основе выбора дизайна, вы сможете правильнее реализовывать свои идеи.
Скачать книгу
Telegram
Книги для программистов (reserved)
High Performance Python (2020)
Автор: Micha Gorelick, Ian Ozsvald
Автор: Micha Gorelick, Ian Ozsvald
Перечисления
Python3 поддерживает простой механизм работы с перечислениями. Спасибо классу Enum.
Перечисления удобно использовать для хранения списков констант. Иначе константы беспорядочно расположены в коде.
Из документации по Python 3 можно узнать о том, что перечисление — это набор символических имён, привязанных к уникальным, неизменным значениям. Члены одного перечисления можно сравнивать на идентичность. Перечисления можно перебирать (итерировать).
Элементы перечисления хэшируемые. То есть программист может использовать их в словарях и множествах. Вспомним, что хэш позволяет создавать высокопроизводительные структуры. Используйте хэш-функции для сокращения объема данных.
#enum
Python3 поддерживает простой механизм работы с перечислениями. Спасибо классу Enum.
Перечисления удобно использовать для хранения списков констант. Иначе константы беспорядочно расположены в коде.
Из документации по Python 3 можно узнать о том, что перечисление — это набор символических имён, привязанных к уникальным, неизменным значениям. Члены одного перечисления можно сравнивать на идентичность. Перечисления можно перебирать (итерировать).
Элементы перечисления хэшируемые. То есть программист может использовать их в словарях и множествах. Вспомним, что хэш позволяет создавать высокопроизводительные структуры. Используйте хэш-функции для сокращения объема данных.
#enum
Проверка версии в python
Сколько раз уже была такая ситуация: даёшь код знакомому, но версии не совпадают. У кого-то новее, у кого-то старше. И чтобы в такую ситуацию не попасть, можно проверить текущую версию языка и отменить запуск в случае чего. Поможет в этом значение version_info, из библиотеки sys.
Хороший способ узнать нужную версию, особенно если на ПК их несколько.
Сколько раз уже была такая ситуация: даёшь код знакомому, но версии не совпадают. У кого-то новее, у кого-то старше. И чтобы в такую ситуацию не попасть, можно проверить текущую версию языка и отменить запуск в случае чего. Поможет в этом значение version_info, из библиотеки sys.
Хороший способ узнать нужную версию, особенно если на ПК их несколько.
Прояви свои цифровые таланты на новом хакатоне Цифрового Прорыва по теме "Медицина, здравоохранение, наука".
Регистрируйся сейчас по ссылке: https://proglib.io/w/69d15edc
⠀
18 - 20 июня у тебя будет шанс:
⠀
💊 Разработать решение для Ростелекома, СБЕР AI, Университета Лобачевского & EPAM, iHerb, Правительства ЯНАО, МИАЦ и других.
💊 Познакомиться с признанными экспертами IT-отрасли.
💊 Поучаствовать онлайн или на оффлайн-хакаточках в Москве, Санкт-Петербурге, Нижнем Новгороде, Волгограде, Саратове, Новороссийске, Курске, Черкесске, Дубне и др.
💊 Выиграть хакатон и попасть в финал конкурса.
⠀
Общий призовой фонд до 4,5 млн. ₽, по 3 призовых места на каждый из 6 кейсов.
Приглашаем программистов, дизайнеров, аналитиков, тестировщиков, продактов, питчеров и других желающих развиваться в IT. Актуально как для новичков, так и для профи!
⠀
Участвуй в главном хакатоне июня 2021 года!
Регистрируйся сейчас по ссылке: https://proglib.io/w/69d15edc
⠀
18 - 20 июня у тебя будет шанс:
⠀
💊 Разработать решение для Ростелекома, СБЕР AI, Университета Лобачевского & EPAM, iHerb, Правительства ЯНАО, МИАЦ и других.
💊 Познакомиться с признанными экспертами IT-отрасли.
💊 Поучаствовать онлайн или на оффлайн-хакаточках в Москве, Санкт-Петербурге, Нижнем Новгороде, Волгограде, Саратове, Новороссийске, Курске, Черкесске, Дубне и др.
💊 Выиграть хакатон и попасть в финал конкурса.
⠀
Общий призовой фонд до 4,5 млн. ₽, по 3 призовых места на каждый из 6 кейсов.
Приглашаем программистов, дизайнеров, аналитиков, тестировщиков, продактов, питчеров и других желающих развиваться в IT. Актуально как для новичков, так и для профи!
⠀
Участвуй в главном хакатоне июня 2021 года!
👍1
Библиотека JmesPath
Как вы уже заметили работать с json файлами в python очень удобно, ведь они отлично конвертируется в словарь. Также мы разобрали полезную библиотеку json, поэтому еще раз говорить о ней не будем.
Но вот нам надо получить данные из файла. А формат json, как правило имеет множество вложений. Искать что-то нужное можно, но не всегда это удобно и красиво (а дзен Python говорит, что красота имеет значение)
JmesPath облегчает работу в несколько раз. Вместо file['a']['b']['c'] можно написать jmespath.search('a.b.c', file). Кажется стало длиннее, но это потому что мы взяли мало элементов, и согласитесь a.b.c выглядит лучше. Даже отредактировать в случае чего будет проще.
Еще больше возможностей можно узнать в документации (да, её стоит читать).
Как вы уже заметили работать с json файлами в python очень удобно, ведь они отлично конвертируется в словарь. Также мы разобрали полезную библиотеку json, поэтому еще раз говорить о ней не будем.
Но вот нам надо получить данные из файла. А формат json, как правило имеет множество вложений. Искать что-то нужное можно, но не всегда это удобно и красиво (а дзен Python говорит, что красота имеет значение)
JmesPath облегчает работу в несколько раз. Вместо file['a']['b']['c'] можно написать jmespath.search('a.b.c', file). Кажется стало длиннее, но это потому что мы взяли мало элементов, и согласитесь a.b.c выглядит лучше. Даже отредактировать в случае чего будет проще.
Еще больше возможностей можно узнать в документации (да, её стоит читать).