冷凝代码的技巧

时间:2014-03-06 13:35:23

标签: python python-3.x

据我所知,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 个答案:

答案 0 :(得分:3)

首先,我应该说我同意这些技巧可能会有所帮助。但不是经常。一个很好的例子是doctests中的代码。它通常很清晰,即使在压缩时也是可读的,并且使其紧凑通常比使其“尽可能可读”的问题少。但是,对于常规代码连接线通常不是一个好习惯。当您无法在iffor语句中创建断点时,它通常比额外的行更大的问题。如果你不练习这些技巧,覆盖工具也会提供更多信息。

然而,回答你的问题,似乎没有办法做你想要的。使用;有许多限制。 Compound statements不能与;一起使用。通常这些限制是合理的,但有时我也很遗憾他们是如此严格。

UPD:但是如果你非常专注于让它成为一个单行,那就有很多技巧。例如,生成器和列表推导(而不是for),reduce()等等,以及Python 3甚至print()都可以在其中使用。

答案 1 :(得分:2)

我没有参加为什么你会想要在Python上这样做,但不,你不能这样做。

Python中有两种类型的语句:simple statements跨越一行,compund statements跨越多行。你可以将几个简单的语句放在一行中,用分号分隔它们,但你不能在一个简单的语句之后放一个复合语句。

即(直接来自Python Language Reference):

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

答案 2 :(得分:1)

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

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

正如其他答案所说......

你可以(如果你真的想要的话)做这样的事情,尽管你不会。

通常采用“功能”方法可以缩短代码(或至少允许更清晰地重复使用代码)在functools library

中查看pythons'partial'函数和其他函数