Что я обнаружил:
В Погружение в Python Я читал об особой природе операторов and
и or
и о том, как можно использовать оценку булевых операторов в короткой цепивыразить условные выражения более кратко с помощью и / или трюка , который очень похож на троичный оператор в C.
C:
result = condition ? a : b
Python:
result = condition and a or b
Это кажется полезным, поскольку лямбда-функции в Python ограничены однострочными, но для выражения потока управления используется логический синтаксис.
Начиная с Python 2.5, встроенный if
, похоже, пришел на помощь в качестве более читабельного синтаксиса для трюка и / или:
result = a if condition else b
Так что я предполагаю, что это замена на Python дляменее читабельный и / или конструктивный.Даже если я хочу вложить несколько условий, все равно это выглядит довольно всеобъемлющим образом:
result = a if condition1 else b if condition2 else c
Но в мире неопределенности я часто нахожу, что пишу такой код для доступа к abc:
result = a and hasattr(a, 'b') and hasattr(a.b, 'c') and a.b.c or None
Таким образом, с помощью inline-if я мог бы, вероятно, избавиться от некоторых и и или , что привело бы к вполне читабельному коду:
result = a.b.c if hasattr(a, 'b') and hasattr(a.b, 'c') else None
В этом рецепте 1044 *
result = (a, b)[condition]
я также обнаружил несколько загадочный подход к условным условиям, но это не приводит к короткому замыканию и приведет к всевозможным ошибкамесли результат условия не возвращает логическое значение, 0 или 1.
Что я хотел бы знать:
Теперь мне интересно, считается ли предпочтительным / более питоническим использованиеinline- if
настолько, насколько это возможно, если совместимость с нисходящим потоком не является проблемой, или это всего лишь вопрос вкуса и того, как чувствуешь себя как дома в мире оценки короткого замыкания?
Обновление
Я только что понял, чтоif - это больше, чем синтаксический сахар для трюка and-or-trick, поскольку он не завершится ошибкой, если a
равно false в логическом контексте.Так что это, вероятно, более надежно.