Модуль warnings для кастомных предупреждений
Встроенная утилита позволяет тонко настраивать всевозможные ворнинги под ваш код:
Документация
#факты
  
  
  
  
  
Встроенная утилита позволяет тонко настраивать всевозможные ворнинги под ваш код:
def deprecation(message):    warnings.warn(message, DeprecationWarning, stacklevel=2)Документация
#факты
👍8❤2
  Упрощённый оператор if
Порой вместо множественных сравнений с использованием or:
Эффективнее использовать in:
#лучшиепрактики
  
  
  
  
  
Порой вместо множественных сравнений с использованием or:
m = 3if m == 1 or m == 2 or m == 3 or m == 4: print("m равен 1 / 2 / 3 / 4")Эффективнее использовать in:
if m in [1, 2, 3, 4]: print("m входит в диапазон [1, 4]")#лучшиепрактики
💩13👍12❤🔥6❤2🥰1
  Перенос GPT-проекта на Python
На связи админ канала. Из тех, кто прикручивал к GPT API собственный датасет, как вы решали эту задачу?
Нашел решение на JavaScript (БД Pinecone, коэффициент Отиаи, связка нескольких API на Pipedream), но теперь нужно переписать проект на Python. Fine-Tuning модели, то есть подгрузка по документации OpenAI, обходится значительно дороже, чем своя БД.
На каком фреймворке лучше развернуть аналогичный проект? Подскажите в комментариях.
#GPT
  
  
  
  
  
На связи админ канала. Из тех, кто прикручивал к GPT API собственный датасет, как вы решали эту задачу?
Нашел решение на JavaScript (БД Pinecone, коэффициент Отиаи, связка нескольких API на Pipedream), но теперь нужно переписать проект на Python. Fine-Tuning модели, то есть подгрузка по документации OpenAI, обходится значительно дороже, чем своя БД.
На каком фреймворке лучше развернуть аналогичный проект? Подскажите в комментариях.
#GPT
💩6🤔4👍2🍌1🙈1
  Задача о заменах хвостов
Уровень: средний
Список A состоит из четырех элементов, каждый из которых содержит ровно одно двоеточие (не в начале и не в конце). Длина подстрок до и после двоеточия является случайной:
Ваша задача — преобразовать список таким образом, чтобы поменять местами подстроки после каждого двоеточия.
Результат:
Напишите решение задачи в комментариях.
#задача
  
  
  
  
  
Уровень: средний
Список A состоит из четырех элементов, каждый из которых содержит ровно одно двоеточие (не в начале и не в конце). Длина подстрок до и после двоеточия является случайной:
A = ["abc:123", "cde:456", "a:12345", "777:xyz"] Ваша задача — преобразовать список таким образом, чтобы поменять местами подстроки после каждого двоеточия.
Результат:
B = ["abc:456", "cde:123", "a:xyz", "777:12345"]Напишите решение задачи в комментариях.
#задача
👍5
  faulthandler: запись логов в файл
К примеру, для записи логов каждые 5 секунд к основной программе потребуется добавить следующий код:
Документация
#лучшиепрактики
К примеру, для записи логов каждые 5 секунд к основной программе потребуется добавить следующий код:
import faulthandlerfrom time import sleepfaulthandler.dump_traceback_later(  timeout=2,  repeat=True,)for i in range(5):  print(f"iteration {i}")  sleep(5)Документация
#лучшиепрактики
👍3👎2❤1
  Машинное обучение прямо в PostgreSQL
PostgresML — это расширение, позволяющее создавать модели машинного обучения и выводить их результаты с помощью SQL-запросов.
Анализ тональности:
Репозиторий на GitHub
#postgresql
  
  
  
  
  
PostgresML — это расширение, позволяющее создавать модели машинного обучения и выводить их результаты с помощью SQL-запросов.
Анализ тональности:
SELECT pgml.transform(    task   => 'text-classification',    inputs => ARRAY[        'I love how amazingly simple ML has become!',         'I hate doing mundane and thankless tasks. ☹️'    ]) AS positivity;Репозиторий на GitHub
#postgresql
👍4❤1
  Typing Self: интуитивно понятный способ аннотирования методов, возвращающих экземпляр своего класса
Ведёт себя так же, как TypeVar, но более краток и прост:
Допустим, мы создали метод get_scale(), который возвращает экземпляр того же класса Scale с помощью self:
Один из способов обозначить тип возвращаемого значения — указать его как текущий класс Shape. Использование этого метода заставляет средство проверки типов выводить тип Shape, как и ожидалось:
PEP-673
#pep
  
  
  
  
  
Ведёт себя так же, как TypeVar, но более краток и прост:
Допустим, мы создали метод get_scale(), который возвращает экземпляр того же класса Scale с помощью self:
class Shape:    def set_scale(self, scale: float):        self.scale = scale        return selfShape().set_scale(0.5)  # => Экземпляр класса ShapeОдин из способов обозначить тип возвращаемого значения — указать его как текущий класс Shape. Использование этого метода заставляет средство проверки типов выводить тип Shape, как и ожидалось:
class Shape:    def set_scale(self, scale: float) -> Shape:        self.scale = scale        return selfShape().set_scale(0.5)  # => Shape    ...PEP-673
#pep
👍6👎5
  Нужна ли вам Kafka?
В статье Selectel разобрались, чем Kafka отличается от традиционных СУБД типа MySQL, почему именно этот продукт в резюме так повышает целевой оффер и как настроить простейший проект.
#kafka
  
  
  
  
  
В статье Selectel разобрались, чем Kafka отличается от традиционных СУБД типа MySQL, почему именно этот продукт в резюме так повышает целевой оффер и как настроить простейший проект.
#kafka
👍4❤1
  Newsi: API для новостей
Инструмент полезен в трейдинге и позволяет автоматизировать подгрузку англоязычных мировых новостей. В дальнейшем на результаты запроса можно навесить показатели эмоциональной окраски и в зависимости от этого упростить принятие инвестиционного решения.
Документация
#API
  
  
  
  
  
Инструмент полезен в трейдинге и позволяет автоматизировать подгрузку англоязычных мировых новостей. В дальнейшем на результаты запроса можно навесить показатели эмоциональной окраски и в зависимости от этого упростить принятие инвестиционного решения.
Документация
#API
💩2❤1
  1secmail: анонимная почта на Python
Автор видео описывает, как обратиться к API 1secmail.com на Python. В 13-минутном ролике вы узнаете:
— как создать ящик с нужным именем;
— как читать почту в командной строке;
— как настроить регулярную перепроверку ящика.
#api
  
  
  
  
  
Автор видео описывает, как обратиться к API 1secmail.com на Python. В 13-минутном ролике вы узнаете:
— как создать ящик с нужным именем;
— как читать почту в командной строке;
— как настроить регулярную перепроверку ящика.
#api
👍10💩2
  beautifulsoup4 vs. Scrapy
Лаконичное десятиминутное видео, с помощью которого можно сравнить парсинговые библиотеки на примере паука. Автор стягивает список банков в файл с помощью этих инструментов и сравнивает код обоих парсеров. Отличный способ зайти в парсинг. Бонусом можно потренироваться в написании xpath.
#bs4 #scrapy
  
  
  
  
  
Лаконичное десятиминутное видео, с помощью которого можно сравнить парсинговые библиотеки на примере паука. Автор стягивает список банков в файл с помощью этих инструментов и сравнивает код обоих парсеров. Отличный способ зайти в парсинг. Бонусом можно потренироваться в написании xpath.
#bs4 #scrapy
👍10💩4❤1🔥1
  String Template: ещё один способ интерполировать
Класс Template модуля string позволяет использовать знак доллара для подстановки:
Доводилось ли вам использовать Template? Поделитесь в комментариях, в каких ситуациях он работает лучше f-строк.
Документация
#факты
  
  
  
  
  
Класс Template модуля string позволяет использовать знак доллара для подстановки:
from string import Templatet = Template('Привет, $channel!')t.substitute(dict(channel='@zen_of_python'))# 'Hello, @zen_of_python'Доводилось ли вам использовать Template? Поделитесь в комментариях, в каких ситуациях он работает лучше f-строк.
Документация
#факты
👍13❤2💩1🤡1
  pyvis: визуализация графов
Утилита позволяет создавать графы, настраивать размер нодов, их цвет и прочие характеристики:
Репозиторий на GitHub
#факты
  
  
  
  
  
Утилита позволяет создавать графы, настраивать размер нодов, их цвет и прочие характеристики:
>>> from pyvis.network import Network>>> import networkx as nx>>> nx_graph = nx.cycle_graph(10)>>> nx_graph.nodes[1]['title'] = 'Number 1'>>> nx_graph.nodes[1]['group'] = 1>>> nx_graph.nodes[3]['title'] = 'I belong to a different group!'>>> nt.show('nx.html')Репозиторий на GitHub
#факты
🔥13👍2
  LookupError: родительский класс KeyError, IndexError
Основная цель этого промежуточного исключения — упростить отладку при возникновении любого из этих двух исключений:
#лучшиепрактики
Основная цель этого промежуточного исключения — упростить отладку при возникновении любого из этих двух исключений:
try:    username = resp['posts'][-1]['authors'][0]['name']except LookupError:    username = None#лучшиепрактики
👍15
  Субботний Win Share
Что хорошего получилось у вас в сфере Python и IT в целом за неделю?
Поделитесь в комментариях.
  
  
  
  
  
  Что хорошего получилось у вас в сфере Python и IT в целом за неделю?
Поделитесь в комментариях.
Отложенная оценка аннотаций типов
PEP-563 представил отложенную оценку аннотаций типов. Это означает, что все ваши аннотации типов во время выполнения рассматриваются лишь как строки. Но это помешало работе pydantic и typeguard.
Однако если такое поведение вам все таки нужно, используйте annotations из модуля __future__:
#факты
  
  
  
  
  
  PEP-563 представил отложенную оценку аннотаций типов. Это означает, что все ваши аннотации типов во время выполнения рассматриваются лишь как строки. Но это помешало работе pydantic и typeguard.
Однако если такое поведение вам все таки нужно, используйте annotations из модуля __future__:
def class_decorator(cls):    annotations = get_type_hints(cls)  # raises NameError on 'C'    print(f'Annotations for {cls}: {annotations}')    return cls@class_decoratorclass C:    singleton: 'C' = None#факты
Задача на сложение матриц
Уровень: новичок
Напишите функцию (без использования numpy.matrix.sum()), которая складывает две квадратные матрицы и возвращает их сумму. Все элементы матриц — целочисленные значения.
#задача
Уровень: новичок
Напишите функцию (без использования numpy.matrix.sum()), которая складывает две квадратные матрицы и возвращает их сумму. Все элементы матриц — целочисленные значения.
matrixAddition(  [ [1, 2, 3],    [3, 2, 1],    [1, 1, 1] ],//      +  [ [2, 2, 1],    [3, 2, 3],    [1, 1, 3] ] )// returns:  [ [3, 4, 4],    [6, 4, 4],    [2, 2, 4] ]#задача
💩11❤1👍1
  Продвинутая логика именования в Python
Разобрали на примерах, как и почему лучше называть различные объекты в Python. Там уже наметился небольшой спор, присоединяйтесь, если интересно. Будем рады вашим техникам именования.
Статья
#лучшиепрактики
  
  Разобрали на примерах, как и почему лучше называть различные объекты в Python. Там уже наметился небольшой спор, присоединяйтесь, если интересно. Будем рады вашим техникам именования.
Статья
#лучшиепрактики
Tproger
  
  Продвинутая логика именования в Python
  Разобрали на примерах, как и почему лучше называть различные объекты в Python.
😁1
  