一行的'if'/'for'语句算是好的Python风格吗?
我时不时在这里看到有人写的代码,看起来像是一个“单行代码”,也就是用一行代码实现传统的“if”语句或“for”循环的功能。
我在网上查了查,但没找到可以用来做这种单行代码的具体例子。有没有人能给点建议,最好能举几个例子?
比如,我能用一行代码这样写吗:
example = "example"
if "exam" in example:
print "yes!"
或者:
for a in someList:
list.append(splitColon.split(a))
10 个回答
20
更一般来说,下面所有这些在语法上都是有效的:
if condition:
do_something()
if condition: do_something()
if condition:
do_something()
do_something_else()
if condition: do_something(); do_something_else()
...等等。
43
我发现大多数情况下,把代码块写在一行上并不是个好主意。
这样做通常会降低代码的可读性。高质量的代码格式在Python中非常重要。
当然,在某些情况下,Python确实提供了一些可以一行完成的写法,这些写法更符合Python的风格。例如,Nick D提到的列表推导:
newlist = [splitColon.split(a) for a in someList]
不过,除非你需要一个可以重复使用的列表,否则你可能想考虑使用生成器。
listgen = (splitColon.split(a) for a in someList)
注意这两者之间最大的区别是,生成器不能被重复使用,但使用生成器会更高效。
现代版本的Python中还有一个内置的三元运算符,可以让你像这样写:
string_to_print = "yes!" if "exam" in "example" else ""
print string_to_print
或者
iterator = max_value if iterator > max_value else iterator
有些人可能觉得这些写法比类似的 if (condition):
代码块更易读和实用。
归根结底,这关乎代码风格和你所在团队的标准。这是最重要的。不过一般来说,我建议不要使用一行的代码块,因为在Python中,代码的格式非常重要。
56
好吧,
if "exam" in "example": print "yes!"
这样做算是改进吗? 不算。你甚至可以在if
语句的主体中添加更多的语句,用分号把它们分开。不过,我不推荐这样做。