我发现python可以很容易地用lisp风格编写代码。在
正常方式:
if a:
do_something()
“功能”方式:
^{pr2}$正常方式:
if not a:
do_somthing()
elif b:
do_otherthing()
“功能”方式
((not a and do_something()) or (b and do_otherthing()))
正常方式:
a = bla.get_a()
if a is None:
a = A()
“功能”方式:
a = (bla.get_a() or A())
我必须用这种方式写几行代码。在
但我不知道是“Python”还是比平时更糟。在
谷歌编码风格也没有定义哪个更符合规则。在
如果你所说的“函数方式”是指“这看起来有点像LISP”,那当然,你已经用括号包围了代码,去掉了冒号。但这并没有使这成为一种“函数式”编程风格,正如它使附加语句成为一个列表一样。本质上,您是在利用逻辑运算符的短路特性使代码更难阅读。在
另外,第二个示例中的代码示例实际上在逻辑上并不相同。如果}不会实际短路,如果{}为真,则{}也将执行。在
a
为false,do_something()
返回一个false值(包括None
,如果没有显式的返回语句,则自动返回的值),则{((not a and do_something()) or (b and do_otherthing()))
不同于通过以下方式:
如果
do_something()
返回一个假值,则第二个表达式(b and do_otherthing())
也将被计算。在像这样工作的表达式应该使用Python 2.5中引入的^{} syntax :
^{pr2}$但是,由于您不需要结果,所以应该避免这样做,最好使用带有
:
的语句语法。在当然
第二个(
a and do_somthing())
)是可怕的和骇人的。正如@limelights所说,Python的Zen说,显式优于隐式,可读性计数。如果您还没有读过PEP-8,那么您可能应该阅读PEP-8。在相关问题 更多 >
编程相关推荐