压缩代码的技巧

1 投票
3 回答
1024 浏览
提问于 2025-04-17 21:07

根据我的理解,Python 这门语言特别要求大家使用缩进来组织代码,但有没有办法打破这个规则呢?举个例子:

y=[1,2,3]

print('ListY:')
    for x in y:
        print(x)

现在,我可以把最后两行合并成这样:

for x in y:print(x)

但是我不能这样写:

print('ListY');for x in y:print(x)

不过,有没有办法做到呢?

3 个回答

1
def f(g,xs):
    for x in xs:
        g(x)

print('ListY');f(print,[1,2,3])

正如其他回答所说...

你可以(如果你真的想的话)做一些这样的事情,虽然你可能不会这么做。

通常采用“函数式”的方法可以让代码更简洁(或者至少能让代码更容易重复使用)。可以看看Python里的‘partial’函数,以及在functools库中的其他内容。

2

我不打算解释为什么你会想在Python中这样做,但答案是,不可以。

在Python中,有两种类型的语句:一种是简单语句,它们只占一行;另一种是复合语句,它们可以占多行。你可以把多个简单语句放在一行中,用分号隔开,但不能在简单语句后面放复合语句。

具体来说(直接引用自Python语言参考):

statement     ::=  stmt_list NEWLINE | compound_stmt
stmt_list     ::=  simple_stmt (";" simple_stmt)* [";"]
3

首先,我想说我同意这些技巧有时候可能会有点用,但并不常见。一个好的例子就是在文档测试中的代码。通常这些代码即使被压缩了,依然很清晰,压缩代码有时比让它“尽可能可读”更少出问题。不过,对于普通代码来说,把多行合并成一行通常不是个好主意。当你无法在 iffor 语句中设置断点时,这通常比多一行代码要麻烦得多。而且,覆盖率工具在你不使用这些技巧时会提供更多的信息。

不过,回答你的问题,似乎没有办法做到你想要的效果。使用 ; 有很多限制。复合语句不能和 ; 一起使用。通常这些限制是合理的,但有时候我也会觉得它们太严格了。

更新:但是如果你非常想把代码写成一行,有很多技巧可以用。例如,可以使用生成器和列表推导(代替 for),还有 reduce() 等等,在 Python 3 中甚至可以在这些里面使用 print()

撰写回答