在《Dive in to Python》中,我了解了andand运算符的特殊性质,以及如何通过and-oror技巧使用布尔运算符的短路求值来更简洁地表达条件,该技巧与 C 中的三元运算符非常相似。
C:
result = condition ? a : b
Run Code Online (Sandbox Code Playgroud)
Python:
result = condition and a or b
Run Code Online (Sandbox Code Playgroud)
这似乎很方便,因为 lambda 函数在 Python 中仅限于单行函数,但它使用逻辑语法来表达控制流。
自 Python 2.5 以来,inline-if似乎已经作为一种更易读的语法来拯救 and-or 技巧:
result = a if condition else b
Run Code Online (Sandbox Code Playgroud)
所以我猜想这是可读性较差的 and-or-construct 的 pythonic 替代品。即使我想嵌套多个条件,它看起来仍然相当全面:
result = a if condition1 else b if condition2 else c
Run Code Online (Sandbox Code Playgroud)
但在一个充满不确定性的世界中,我经常发现自己编写一些类似这样的代码来访问 abc :
result = a and hasattr(a, 'b') and hasattr(a.b, 'c') and a.b.c …Run Code Online (Sandbox Code Playgroud) python lambda short-circuiting inline-if conditional-statements