Deque: следующий шаг питониста при обращении со списками
deque (double-ended queue – «двусторонняя очередь») - это структура данных в Python, представляющая собой двустороннюю очередь. Она позволяет эффективно добавлять и удалять элементы как с начала, так и с конца очереди. Реализована в модуле collections.
Вот другие операции, которые можно выполнять с двусторонней очередью:
— вставка элементов на определенную позицию (
— удаление первого вхождения элемента (
— проверка наличия элемента (
— переворот элементов (
— получение срезов (
— сортировка (
deque исполняет все за константное время и потому является эффективным выбором для работы с большими объёмами данных.
#лучшиепрактики
deque (double-ended queue – «двусторонняя очередь») - это структура данных в Python, представляющая собой двустороннюю очередь. Она позволяет эффективно добавлять и удалять элементы как с начала, так и с конца очереди. Реализована в модуле collections.
my_deque.append(4) # в конец очереди
my_deque.appendleft(0) # в начало очереди
Вот другие операции, которые можно выполнять с двусторонней очередью:
— вставка элементов на определенную позицию (
insert()
);— удаление первого вхождения элемента (
remove()
);— проверка наличия элемента (
in
);— переворот элементов (
reverse()
);— получение срезов (
slice
);— сортировка (
sort()
).deque исполняет все за константное время и потому является эффективным выбором для работы с большими объёмами данных.
#лучшиепрактики
👍18
map(): чего мы о ней не знали
Функция используется обычно для преобразования элементов одной последовательности в другую. Вашему вниманию необычный нюанс: она может быть комбинирована с другими функциями, чтобы выполнить комплексные операции над последовательностями. Например:
В этом примере map() используется совместно с zip() для сложения соответствующих элементов из двух списков, а затем результаты суммируются с помощью функции reduce().
А какие необычные применения map() вы знаете? Поделитесь в комментариях.
#лучшиепрактики
Функция используется обычно для преобразования элементов одной последовательности в другую. Вашему вниманию необычный нюанс: она может быть комбинирована с другими функциями, чтобы выполнить комплексные операции над последовательностями. Например:
from functools import reduce
def add(x, y):
return x + y
numbers1 = [1, 2, 3, 4, 5]
numbers2 = [10, 20, 30, 40, 50]
result = map(lambda x: x[0] + x[1], zip(numbers1, numbers2))
sum = reduce(add, result)
print(sum) # 165
В этом примере map() используется совместно с zip() для сложения соответствующих элементов из двух списков, а затем результаты суммируются с помощью функции reduce().
А какие необычные применения map() вы знаете? Поделитесь в комментариях.
#лучшиепрактики
👍11👎2🔥1
На каком языке написана chatGPT
Шах и мат, все, кто пытался переплюнуть Python то скоростью, то простотой! По данным канала AI Insights,
нашумевшая нейросеть OpenAI написана на PyTorch — библиотеке Python.
#факты
Шах и мат, все, кто пытался переплюнуть Python то скоростью, то простотой! По данным канала AI Insights,
нашумевшая нейросеть OpenAI написана на PyTorch — библиотеке Python.
#факты
👍21💩8🤡6🔥1🥰1
Интерпретатор теперь указывает на причину ошибки точнее
В новой версии Python 3.11.4 при отображении пути ошибки (Traceback) вы легче сможете обнаружить причину ошибки, потому что символами ^ теперь выделяется конкретный объект, а не вся строка:
Подробнее о релизе здесь.
#лучшиепрактики
В новой версии Python 3.11.4 при отображении пути ошибки (Traceback) вы легче сможете обнаружить причину ошибки, потому что символами ^ теперь выделяется конкретный объект, а не вся строка:
Traceback (most recent call last):
File "distance.py", line 11, in <module>
print(manhattan_distance(p1, p2))
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "distance.py", line 6, in manhattan_distance
return abs(point_1.x - point_2.x) + abs(point_1.y)
^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'x'
Подробнее о релизе здесь.
#лучшиепрактики
👍21❤1
Достойный конкурент менеджеру pip
В своей статье Егор Егоров показывает, как использовать opensource-альтернативу дефолтному менеджеру пакетов pip. Вы узнаете:
— как установить этот менеджер;
— как быстрее создать виртуальное окружение;
— как собирать приложения и публиковать их (в контексте репозитория);
— как решается проблема унификации версий библиотек.
#poetry
В своей статье Егор Егоров показывает, как использовать opensource-альтернативу дефолтному менеджеру пакетов pip. Вы узнаете:
— как установить этот менеджер;
— как быстрее создать виртуальное окружение;
— как собирать приложения и публиковать их (в контексте репозитория);
— как решается проблема унификации версий библиотек.
#poetry
👍9
Модуль uuid как способ сгенерировать уникальные ID
UUID (Universally Unique IDentifier) — уникальный идентификатор. Для гарантии неповторяемости он состоит из большого количества цифр и букв.
К примеру, при подключении данных к BI-системе, автоматически удаляющей дубликаты, UUID помогают избежать искажения статистических показателей. В сниппете ниже мы добавляем столбец ID к датафрейму df:
А в каких ситуациях вам пригождается UUID? Напишите в комментариях.
#лучшиепрактики
UUID (Universally Unique IDentifier) — уникальный идентификатор. Для гарантии неповторяемости он состоит из большого количества цифр и букв.
К примеру, при подключении данных к BI-системе, автоматически удаляющей дубликаты, UUID помогают избежать искажения статистических показателей. В сниппете ниже мы добавляем столбец ID к датафрейму df:
import uuid
for i in df.index:
df.at[i, 'ID'] = uuid.uuid4()
А в каких ситуациях вам пригождается UUID? Напишите в комментариях.
#лучшиепрактики
👍10👏1
Мы думали о слове «останова» неправильно
Многие из нас помнят, что точка останова — это преднамеренное прерывание выполнения программы, при котором выполняется вызов отладчика.
Оказывается, в термине «точка останова» второе слово мужского рода и в исходной форме звучит так: останов. Это просто синоним слова «остановка».
Статья на Викисловаре
#факты
Многие из нас помнят, что точка останова — это преднамеренное прерывание выполнения программы, при котором выполняется вызов отладчика.
Оказывается, в термине «точка останова» второе слово мужского рода и в исходной форме звучит так: останов. Это просто синоним слова «остановка».
Статья на Викисловаре
#факты
👎15👍5
Рисовать черепашкой, но на Python? Легко!
Первые уроки информатики у многих из нас ассоциируются с рисующей фигуры черепашкой на PASCAL. Забавно было вращать головой, чтобы понять, куда же зверушку повернуть для рисования сложной фигуры.
У Python тоже есть своя библиотека для рисования, и называется она turtle (документация).
Код ниже нарисует звезду:
А с какими языками программирования вы впервые столкнулись на уроках информатики? Поделитесь в комментариях.
#обучение
Первые уроки информатики у многих из нас ассоциируются с рисующей фигуры черепашкой на PASCAL. Забавно было вращать головой, чтобы понять, куда же зверушку повернуть для рисования сложной фигуры.
У Python тоже есть своя библиотека для рисования, и называется она turtle (документация).
Код ниже нарисует звезду:
from turtle import *
color('red', 'yellow')
begin_fill()
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
end_fill()
done()
А с какими языками программирования вы впервые столкнулись на уроках информатики? Поделитесь в комментариях.
#обучение
👍9
yield: понять и полюбить
yield — это «сводный брат» return. Каждый раз, когда в коде для генератора встречается этот оператор, выполнение приостанавливается, и значение, указанное после yield, возвращается генератору. Затем выполнение возобновляется с того же места и продолжается до встречи следующего yield.
Для примера, посмотрим на простой генератор, который возвращает числа от 1 до 10:
Этот код создает функцию-генератор infinite_sequence(), которая возвращает числа. Каждый раз, когда выполняется оператор yield, значение i возвращается генератору как текущее, и выполняется приостановка до следующей итерации.
Вызвав эту функцию, мы получим:
И так, пока не остановим выполнение кода.
Yield очень полезен при работе с большими объемами данных, когда недостаточно памяти для загрузки всего набора данных в память. Генератор сможет вернуть список значений по одному, не занимая много памяти.
#лучшиепрактики
yield — это «сводный брат» return. Каждый раз, когда в коде для генератора встречается этот оператор, выполнение приостанавливается, и значение, указанное после yield, возвращается генератору. Затем выполнение возобновляется с того же места и продолжается до встречи следующего yield.
Для примера, посмотрим на простой генератор, который возвращает числа от 1 до 10:
def infinite_sequence():
num = 0
while True:
yield num
num += 1
Этот код создает функцию-генератор infinite_sequence(), которая возвращает числа. Каждый раз, когда выполняется оператор yield, значение i возвращается генератору как текущее, и выполняется приостановка до следующей итерации.
Вызвав эту функцию, мы получим:
for i in infinite_sequence():
print(i, end=" ")
>>> 0 1 2 3 4 5 6
И так, пока не остановим выполнение кода.
Yield очень полезен при работе с большими объемами данных, когда недостаточно памяти для загрузки всего набора данных в память. Генератор сможет вернуть список значений по одному, не занимая много памяти.
#лучшиепрактики
👍30
Подборка актуальных вакансий
— Data Scientist
Где: Москва, можно удалённо
Опыт: от 2 лет
— Python-разработчик
Где: удалённо
Опыт: от 3 лет
— Тестировщик
Где: удалённо
Опыт: от 3 лет
— Data Engineer
Где: Москва
Опыт: от 3 лет
— Senior Python-разработчик
Где: Москва, можно удалённо
Опыт: от 4 лет
— Team Lead Python-разработчик
Где: удалённо
Опыт: от 5 лет
#вакансии #работа
— Data Scientist
Где: Москва, можно удалённо
Опыт: от 2 лет
— Python-разработчик
Где: удалённо
Опыт: от 3 лет
— Тестировщик
Где: удалённо
Опыт: от 3 лет
— Data Engineer
Где: Москва
Опыт: от 3 лет
— Senior Python-разработчик
Где: Москва, можно удалённо
Опыт: от 4 лет
— Team Lead Python-разработчик
Где: удалённо
Опыт: от 5 лет
#вакансии #работа
👎4👍3💩3🔥1😁1
ТОП-5 мобильных приложений для изучения Python
Если срочно потребовалось — или просто захотелось — изучить, закрепить новую тему, а ноутбука под рукой нет, выход — мобильные приложения для изучения Python. В статье собрали пять вариантов: простых, удобных и условно бесплатных. Описанные плюсы и минусы — собственный опыт и отзывы на App Store.
#обучение
Если срочно потребовалось — или просто захотелось — изучить, закрепить новую тему, а ноутбука под рукой нет, выход — мобильные приложения для изучения Python. В статье собрали пять вариантов: простых, удобных и условно бесплатных. Описанные плюсы и минусы — собственный опыт и отзывы на App Store.
#обучение
🤣8💩3👍2❤1
Открываем цикл статей об ETL для зоопарка чат-ботов
Эксклюзивно для читателей TProger мы открываем цикл статей, посвященный развитию ETL (extract, transform, load) – группе процессов, выполняющих выгрузку, подготовку и загрузку данных в BI-системы. Вы познакомитесь с общепринятыми и не очень системами хранения логов и различными способами их выгрузки в хранилища.
Список технологий, для которых будут налаживаться потоки данных
Эксклюзивно для читателей TProger мы открываем цикл статей, посвященный развитию ETL (extract, transform, load) – группе процессов, выполняющих выгрузку, подготовку и загрузку данных в BI-системы. Вы познакомитесь с общепринятыми и не очень системами хранения логов и различными способами их выгрузки в хранилища.
Список технологий, для которых будут налаживаться потоки данных
❤6👍1
Оператор xor
В Python оператор xor (исключающее ИЛИ) обозначается как ^. Он применяется к двум булевым операндам и возвращает True, если только один из них имеет значение True, а остальные — False. Если оба операнда имеют одинаковые значения (True или False), то результатом будет False.
Пример использования оператора xor в Python:
В этом примере переменная a имеет значение True, а переменная b имеет значение False. Оператор xor применяется к этим операндам, и результатом будет True.
Если оба операнда имеют одинаковые значения, например, оба True или оба False, результат будет False:
В этом примере оба операнда (c и d) имеют значение True, поэтому результатом будет False.
Таким образом, оператор xor возвращает True, только если только один из операндов имеет значение True, а остальные операнды имеют значение False.
#начинающим
В Python оператор xor (исключающее ИЛИ) обозначается как ^. Он применяется к двум булевым операндам и возвращает True, если только один из них имеет значение True, а остальные — False. Если оба операнда имеют одинаковые значения (True или False), то результатом будет False.
Пример использования оператора xor в Python:
a = True
b = False
result = a ^ b
print(result) # Выводит: True
В этом примере переменная a имеет значение True, а переменная b имеет значение False. Оператор xor применяется к этим операндам, и результатом будет True.
Если оба операнда имеют одинаковые значения, например, оба True или оба False, результат будет False:
c = True
d = True
result = c ^ d
print(result) # Выводит: False
В этом примере оба операнда (c и d) имеют значение True, поэтому результатом будет False.
Таким образом, оператор xor возвращает True, только если только один из операндов имеет значение True, а остальные операнды имеют значение False.
#начинающим
👍17👎4❤1
Обработку исключений теперь можно сопроводить заметкой
В свежем релизе Python 3.11.4 добавили add_note() в стандартный класс исключений BaseException. Его можно использовать для обогащения контекстной информацией. Добавленные заметки появляются в трассировке по умолчанию.
Невероятно полезно при множестве блоков try-except.
Подробнее о релизе здесь.
#лучшиепрактики
В свежем релизе Python 3.11.4 добавили add_note() в стандартный класс исключений BaseException. Его можно использовать для обогащения контекстной информацией. Добавленные заметки появляются в трассировке по умолчанию.
try:
raise TypeError("unsupported operand")
except Exception as exc:
exc.add_note("Пояснение...")
raise
Невероятно полезно при множестве блоков try-except.
Подробнее о релизе здесь.
#лучшиепрактики
👍20❤1
Что такое Dython?
Мы продолжаем серию статей, посвященных всяческим производным слова Python, и на сей раз познакомим вас с Dython. Вы узнаете:
— как ускорить инжиниринг фичей в несколько раз;
— как очищать и готовить данные.
#лучшиепрактики
Мы продолжаем серию статей, посвященных всяческим производным слова Python, и на сей раз познакомим вас с Dython. Вы узнаете:
— как ускорить инжиниринг фичей в несколько раз;
— как очищать и готовить данные.
#лучшиепрактики
😁4😐2👍1👎1🤡1
Дешевые хостинги: какие используете вы?
Согласно рейтингу hostinghub.ru, в первую тройку лучших VPS (виртуальных частных серверов) входят:
— timeweb.cloud;
— aesa.net;
— vdsina.ru.
А какими серверами пользуетесь вы? Что в них для вас самое важное? Поделитесь в комментариях.
#VPS
Согласно рейтингу hostinghub.ru, в первую тройку лучших VPS (виртуальных частных серверов) входят:
— timeweb.cloud;
— aesa.net;
— vdsina.ru.
А какими серверами пользуетесь вы? Что в них для вас самое важное? Поделитесь в комментариях.
#VPS
👍6🔥2👎1
Как объединить два списка
В Python встроенная функция zip() используется для объединения нескольких элементов в кортежи с соответствующими элементами других объектов. Например, для объединения элементов двух списков можно использовать zip().
Вот пример:
Результат выполнения этого кода будет следующий:
zip() создает кортежи из соответствующих элементов list1 и list2. Каждый кортеж содержит элементы с одинаковыми индексами.
#факты
В Python встроенная функция zip() используется для объединения нескольких элементов в кортежи с соответствующими элементами других объектов. Например, для объединения элементов двух списков можно использовать zip().
Вот пример:
list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]
result = zip(list1, list2)
print(list(result))
Результат выполнения этого кода будет следующий:
[('a', 1), ('b', 2), ('c', 3)]
zip() создает кортежи из соответствующих элементов list1 и list2. Каждый кортеж содержит элементы с одинаковыми индексами.
#факты
👍11🤨4❤1😐1
requests: вложенные параметры
Возможно, вы сталкивались с ситуацией, кода тестовый HTTP-запрос в Postman работает корректно, а при переходе в requests часть параметров игнорируется. Дело в синтаксисе вложенных параметров. Порой в объект params кладутся многоуровневые объекты.
Пример ниже — вложенные параметры для выгрузки логов конструктора Aimylogic за день:
Несмотря на кажущуюся бессмысленность двойных скобок (квадратные + фигурные), именно в таком виде подаются фильтры «Логи чат-бота за 18 июня 2023». Вероятно, подразумевалось добавление соседей.
#requests
Возможно, вы сталкивались с ситуацией, кода тестовый HTTP-запрос в Postman работает корректно, а при переходе в requests часть параметров игнорируется. Дело в синтаксисе вложенных параметров. Порой в объект params кладутся многоуровневые объекты.
Пример ниже — вложенные параметры для выгрузки логов конструктора Aimylogic за день:
import requests
payload = {"filters": [
{"key": "MESSAGE_TIME", "type": "DATE_TIME_RANGE",
"from": f"2023-06-18T20:59:59.999Z", "to": f"2023-06-18T20:59:59.999Z"}]}
r = requests.post('https://app.jaicp.com/api/reporter/p/[TOKEN]/messages/filter', params=params)
Несмотря на кажущуюся бессмысленность двойных скобок (квадратные + фигурные), именно в таком виде подаются фильтры «Логи чат-бота за 18 июня 2023». Вероятно, подразумевалось добавление соседей.
#requests
👍9❤1🤔1💩1
Почему не везде есть if __name__ == "__main__"
Это выражение в Python используется для определения точки входа программы. Этот код будет выполнен только тогда, когда файл запускается напрямую, а не импортируется как модуль в другой файл.
Поэтому эту строку легко встретить при создании проекта на почти любом фреймворке, к примеру, aiogram.
На самом деле, это выражение автоматически подставляется при запуске скрипта в вашу программу.py.
Вы можете поместить основную логику программы, вызовы функций или другой исполняемый код внутри этого условного оператора. Это позволяет избежать выполнения вспомогательных участков кода без нужды.
#факты
Это выражение в Python используется для определения точки входа программы. Этот код будет выполнен только тогда, когда файл запускается напрямую, а не импортируется как модуль в другой файл.
Поэтому эту строку легко встретить при создании проекта на почти любом фреймворке, к примеру, aiogram.
На самом деле, это выражение автоматически подставляется при запуске скрипта в вашу программу.py.
Вы можете поместить основную логику программы, вызовы функций или другой исполняемый код внутри этого условного оператора. Это позволяет избежать выполнения вспомогательных участков кода без нужды.
#факты
👍15❤1
Кватернион: вы много раз его видели, но не знали названия
Quaternion (кватернион) — это структура данных, которая используется для представления и манипулирования ориентацией в трёхмерном пространстве. Он состоит из четырех компонентов: одного скаляра и трех векторов.
Кватернионы широко используются в анимации для описания плавных переходов (интерполяция).
#факты
Quaternion (кватернион) — это структура данных, которая используется для представления и манипулирования ориентацией в трёхмерном пространстве. Он состоит из четырех компонентов: одного скаляра и трех векторов.
from pyquaternion import Quaternion
my_quaternion = Quaternion(axis=[1, 0, 0], angle=3.14159265)
Кватернионы широко используются в анимации для описания плавных переходов (интерполяция).
#факты
👍18