一行的'if'/'for'语句算是好的Python风格吗?

44 投票
10 回答
107228 浏览
提问于 2025-04-15 15:58

我时不时在这里看到有人写的代码,看起来像是一个“单行代码”,也就是用一行代码实现传统的“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语句的主体中添加更多的语句,用分号把它们分开。不过,我不推荐这样做。

撰写回答