Комментарии 15
Правда, чаще всего их используют в форме, предусматривающей наличие единственного цикла
for
и, возможно, одного условияif
. И это всё.
Потому что уже два уровня циклов требуют вчитывания, а что-то более сложное становится почти нечитаемым. Во всяком случае, на мой взгляд.
Плюсовики пишут на питоне =)
За такие штуки[y for y in (func(x) for x in values) if y]
коллеги могут не просто косо посмотреть, но и что-нибудь в кофе подсыпать.
print([func(x) for x in values if func(x)]) # хреново
print([y for y in (func(x) for x in values) if y]) # так себе
print([y for x in values if (y := func(x))]) # получше
print(list(filter(None, map(func, values)))) # вот так нормально
как же утомил Martin Heinz своим недалеким видением. ну серьезно. Уже писал про это и вот опять.
Да есть брейки в листах или однострочниках, есть. Но ему похоже не дано.
[n for n in range(10) if n != 4 or next([])], кстати чет не работает. видать пофиксили
Сапрессер ошибок есть:
supress(f(*args, **kwargs)) or handle(*args, **kwargs), хотя в его примере там обработчик ошибки а не значния.
Ну и листы, листы, кругом листы. Эк меня на листы триггерит.
Эх... Люди старались, match в других языках подсматривали придумывали:
for v in values:
match v:
case True:
result.append('yes')
case False:
result.append('no')
case _:
result.append('unknown')
Хотя можно сделать коротко и без списковых включений:
a = {True:'yes', False:'no', None:'unknown'}
for v in values:
result.append(a[v])
А case _: равнозначно None разве?
Нет. Но у автора там тоже просто else.
Тут, скорее, вопросы к моему второму варианту. Который не совсем идентичен авторскому. Если возможные значения входных данных ограничены показанным набором - будет работать одинаково. Но если на вход придёт, например, 10 - будет ай-яй-яй.
Лично мне очень нравится реализация перечислений БД в Tortoise ORM через генераторы.
имхо, "списочные выражения" как-то лучше звучит
"Однострочники Python: лаконичный и содержательный код [2022] Кристиан Майер"
Хорошая книга на эту тему.
Спасибо.
Ну я так понимаю, что все примеры - это именно что "глядите, как можно", как в конце замечает сам автор.
Тогда нормально, забавно почитать. Главное, чтобы такое на работе не писали, а то на ревью вас всем отделом оттарабанят за тройные ифы в генераторах со всякими душными проверками какой-нибудь бизнес-логики.
Код должен не "занимать как можно меньше строк", а легко читаться, быть простым и понятным. Потому во всём надо знать меру и не перебарщивать
Спасибо за статью
Главное джунам не показывать эту статью.. а то они решать эти хаки и фичи в прод запустить )))
Списковые включения в Python мощнее, чем можно подумать