В этот раз мы решили пойти по базовым задачам с Leetcode, поэтому взяли на разбор задачку Two sum, которая идет под номером 1 и имеет более 19 тысяч решений. Альбина разобрала на видео два варианта решения алгоритма — один, который первым приходит в голову, и второй, который более оптимален по скорости.

Python *
Высокоуровневый язык программирования
Сейчас разрабатываем большую платформу для планирования и прогнозирования спроса и продаж в ритейле. Под капотом платформы более 10 микросервисов: от серверов очередей, которые координируют взаимодействие различных частей системы, до непосредственно ML-движков, которые на основе больших входящих датасетов с историей продаж строят прогнозы на будущее.
По мотивам одной из задач проекта опубликовали хорошую статью со сравнением скорости работы двух гигантов аналитики данных в Python: Pandas и Polars. Там подробно рассмотрели вопрос быстродействия этих двух решений в части работы с файлами больших объемов.
Один из интересных графиков:

Полная версия статьи — Битва медведей: Pandas против Polars
Чтобы проходить собеседования на «Ура» нужно уметь решать алгоритмы. А научиться решать их можно на сайте Leetcode, например. Ведущая Python-разработчица «Технократии» Альбина Альмухаметова показывает, как решить задачу Merge Two Sorted Lists, которую она дает на собеседованиях. Приятного просмотра!
Может плохо искал, но ничего про Anvil на Хабре не нашёл, а ведь это
типа Delphi, но на Python и в облаке
облако можно и своё
бесплатно мало, но достаточно интересно, навсегда и внешне безлимитно
платно много, без сомнений в способности содержать бесплатное
можно хостить статический сайт
только стандартная библиотека, но можно общаться с локальным кодом на Python в обе стороны
может бесплатно получать e-mail
встроенная регистрация пользователей
интеграция с Google, Facebook, Tableau, Stripe, платно Microsoft и SAML
Вроде как вот он - способ изучить Python легко и интересно.
В очередной раз столкнулся с "новички не умеют пользоваться global", поэтому для них написал 8 примеров для проверки понимания global, ну и mutable/immutable заодно.
# ok
foo = 1
def bar():
print('in bar', foo)
bar()
print('out bar', foo)
# ok
foo = 1
def bar():
foo = 2
print('in bar', foo)
bar()
print('out bar', foo)
# UnboundLocalError
foo = 1
def bar():
print('1, in bar', foo)
foo = 2
print('2, in bar', foo)
bar()
print('out bar', foo)
# ok
foo = 1
def bar():
global foo
print('1, in bar', foo)
foo = 2
print('in bar', foo)
bar()
print('out bar', foo)
# UnboundLocalError
foo = [1]
def bar():
print('1, in bar', foo)
foo = [2]
print('2, in bar', foo)
bar()
print('out bar', foo)
# ok
foo = [1]
def bar():
global foo
print('1, in bar', foo)
foo = [2]
print('2, in bar', foo)
bar()
print('out bar', foo)
# ok ;)
foo = [1]
def bar():
print('1, in bar', foo)
foo.append(2)
print('2, in bar', foo)
bar()
print('out bar', foo)
# ok ;)
foo = [1]
def bar():
print('1, in bar', foo)
foo[:] = [2]
print('2, in bar', foo)
bar()
print('out bar', foo)
Всем привет!
В этом туториале писал о том, как собрать свою обëртку для ChatGPT, используя Streamlit и API OpenAI.
Рассказываю, что случилось нового ?
Добавлен функционал для подсчёта токенов, стоимости сообщения и беседы. Реализовано с помощью функции:
import streamlit as st
def calc_cost(usage: dict) -> None:
total_tokens = usage.get("total_tokens")
prompt_tokens = usage.get("prompt_tokens")
completion_tokens = usage.get("completion_tokens")
st.session_state.total_tokens.append(total_tokens)
# pricing logic: https://openai.com/pricing#language-models
if st.session_state.model == "gpt-3.5-turbo":
cost = total_tokens * 0.002 / 1000
else:
cost = (prompt_tokens * 0.03 + completion_tokens * 0.06) / 1000
st.session_state.costs.append(cost)

Проверить работу нового функционала можно на сайте AI Talks. Репозиторий с кодом ожидающий ваших issue, pr и звёзд ⭐
Успехов! ?
Интересные встроенные библиотеки питона:
Создаёт временный файл как в linux папка tmp:
import tempfile
with tempfile.NamedTemporaryFile() as tmp:
print(tmp.name)
tmp.write(...)
Чтобы не использовать временные файлы, можно использовать временный буфер сразу в программе:
from io import BytesIO
imagefile = BytesIO()
animage.save(imagefile, format='PNG')
imagedata = imagefile.getvalue()
Позволяет создавать бинарные структуры и парсить их. Может ускорить передачу между клиентом и сервером:
>> from struct import *
>> pack(">bhl", 1, 2, 3)
b'\x01\x00\x02\x00\x00\x00\x03'
>> unpack('>bhl', b'\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>> calcsize('>bhl')
7
С помощью этой библиотеки можно создать полноценный tui:
Welcome to the turtle shell. Type help or ? to list commands.
(turtle) ?
Documented commands (type help <topic>):
========================================
bye color goto home playback record right
circle forward heading left position reset undo
(turtle) help forward
Move the turtle forward by the specified distance: FORWARD 10
(turtle) record spiral.cmd
(turtle) position
Current position is 0 0
Удивительно что такие полезные пакеты находятся в стандартной комплектации питона.
И не нужно скачивать кучу пакетов из pip.
Вклад авторов
kesn 2695.0DmitrySpb79 1664.0badcasedaily1 1287.4ru_vds 1279.6ph_piter 1157.4pushtaev 1058.0alizar 1024.4grigoryvp 1006.0Firemoon 985.0homm 969.0