Коробка с питоном
Заметки от Python-разработчика: сниппеты, обзоры пакетов, новости и другая полезная информация. Автор: @kiriharu
Ko'proq ko'rsatish- Kanalning o'sishi
- Post qamrovi
- ER - jalb qilish nisbati
Ma'lumot yuklanmoqda...
Ma'lumot yuklanmoqda...
def test():
try:
return 1
finally:
return 2
Вопрос - что вернется при вызове test()
? Все и так на этом моменте понимают, что вернётся 2 (ну не просто так же мы собрались, верно?), но почему?
Ответ, как обычно, есть в документации. Возвращаемое функцией значение определяется последним выполненным return.
Вторым важным аспектом является то, что finally исполняется всегда
, поэтому мы и получаем его return.
raise
, кстати, тоже работать не будет:
def test():
try:
raise ValueError()
finally:
return 3
test() # 3
#std #задачкиUntil now error messages haven’t been more than mentioned, but if you have tried out the examples you have probably seen some. There are (at least) two distinguishable kinds of errors: syntax error...
>>> a = 256
>>> b = 256
>>> a is b
True # ???
>>> a = 257
>>> b = 257
>>> a is b
False # ???
Вопрос в том, что здесь творится с ссылками. Разберём самую первую часть. Пробуем получить id объектов:
>>> a = 256
>>> b = 256
>>> id(a), id(b)
(2214170730704, 2214170730704)
На вопрос, почему у них одинаковые идентификаторы ответит деталь реализации PyLong_FromLong (для искушенных читать можно читать отсюда), которая указывает, что интерпретатор хранит массив целочисленных объектов для всех чисел в диапазоне от -5 до 256. Поэтому, когда мы создаем переменную с числом в этом диапазоне он просто отдает ссылку на уже существующий объект.
Микрооптимизация, при чём очень важная - так уж получилось что числа из этого диапазона используются чаще всего.
В Java есть похожая оптимизация, там такой диапазон составляет от -128 до 127, но есть нюансы.
Второй вопрос отпадает сам собой (будут разные ссылки), но что будет если мы создадим файл с следующим содержимым и запустим его:
a = 257
b = 257
print(a is b) # True
А вот это уже нюанс работы нашего REPL.
Каждая написанная нами строка в нём разбирается отдельно. Но при запуске через файл Python имеет возможность применить дополнительные оптимизации для констант, так как он видит сразу весь код - в этом и различие.
#std #задачкиAll integers are implemented as “long” integer objects of arbitrary size. On error, most PyLong_As* APIs return(return type)-1 which cannot be distinguished from a number. Use PyErr_Occurred() to d...
— Кандидаты часто спрашивают на собеседованиях, принято ли в команде писать тесты. И ответ в духе «да, мы пишем тесты» дает некоторую надежду, что с культурой разработки в команде все хорошо. Но бывает так, что в команде пишут тесты, но их качество оставляет желать лучшего: долго, больно и чуть что, приходится много рефакторить. Почему так происходит? Может быть, тесты не нужны? Или, может, их нужно продумывать, как и основной код приложения? В докладе говорим о том: — Как жить, когда количество тестов переваливает за пару тысяч. — Как замечать «дурные запахи» в тестах и почему это важно. — Какие плагины pytest помогут в упрощении написания тестов и их поддержке. — Какие метрики можно собирать с тестов и зачем это может пригодиться. #backend #pytest
The official Python Developers Survey 2023. Join and contribute to the community knowledge!
Implementation of Redis in python without having a Redis server running. Fully compatible with using redis-py. - GitHub - cunla/fakeredis-py: Implementation of Redis in python without having a Redi...
more_itertools
.
1) map_if
работает как обычный map
, но применяет функцию на элемент только если оно попадает под условие. Например, вот так мы можем возвести в квадрат только те числа, которые делятся на 2 нацело:
example = [1, 2, 3, 4, 5, 6, 7, 8]
list(map_if(example, lambda x: x % 2 == 0, lambda x: x * x)) # [1, 4, 3, 16, 5, 36, 7, 64]
2) Получить последний элемент можно при помощи last
. Возникает вопрос а зачем он существует, если можно указать iterable[-1]
? Ответом является то, что last
позволяет указать, что ему возвращать, если элементов в итерируемом объекте нет:
last([1, 2, 3]) # Очевидно получим 3
last([], 0) # Список пустой, но получим 0
[][-1] # Получим IndexError
Ещё есть first
- как понятно из названия, он получает первый элемент.
3) map_except
тоже работает как map
, но умеет игнорировать ошибки. Например, мы хотим получить только те элементы, которые получилось привести к целому числу:
example = [1, "1", "2", "test", "three", object, 4.0]
list(map_except(int, example, ValueError, TypeError)) # [1, 1, 2, 4]
4) Ну и в конце про take
- он просто берет N элементов из итерируемого объекта:
example = range(10)
take(3, example) # [0, 1, 2]
take(20, example) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] - если больше, возьмет доступные
#itertools #more_itertools #библиотека(Posted for the whole Steering Council.) As we’ve announced before, the Steering Council has decided to accept PEP 703 (Making the Global Interpreter Lock Optional in CPython) . We want to make it clear why, and under what expectations we’re doing so. It is clear to the Steering Council that theoretically, a no-GIL (or free-threaded) Python would be of great benefit, and the majority of the community seems in agreement. Threads have significant downsides and caveats, but they are widely adopte...
class JiraRenderer(BaseRenderer): def render_strong(self, token): template = '*{}*' return template.format(self.render_inner(token)) def render_emphasis(self, token): template = '_{}_' return template.format(self.render_inner(token))Ещё mistletoe можно использовать как утилиту. Например, вот так markdown-файл можно перевести в тот же формат Jira:
mistletoe foo.md --renderer mistletoe.contrib.jira_renderer.JiraRendererПоэтому, если вам нужна небольшая, но расширяемая библиотека для работы с markdown - берите её, не прогадаете. #библиотека
«Окей, Никита, что нового в Python?» Еще одни спикер #GPDays2023 Никита Соболев – Open Source разработчик и любитель Python рассказал о чистке stdlib, PEP 695, новом синтаксисе для типизации, а также uops из Python 3.13: 01:19 Что нового в новом Python 05:33 PEP 695 16:11 Байткод 19:10 Функции 22:45 Классы 27:44 Про всякое (о чем еще стоит рассказать) 36:37 Python 3.13 40:50 Выводы Все доклады секции в плейлисте
https://youtube.com/playlist?list=PLhM4a2xbfIdbjSPvJrVjKZDlbX5duEQca&si=qnc7Qe7ZXw93YGpfFastStream is a powerful and easy-to-use Python library for building asynchronous services that interact with event streams. - GitHub - airtai/faststream: FastStream is a powerful and easy-to-use P...
Joriy rejangiz faqat 5 ta kanal uchun analitika imkoniyatini beradi. Ko'proq olish uchun, iltimos, boshqa reja tanlang.