Python 压缩代码的技术

Python 压缩代码的技术,python,python-3.x,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) 但是你有办法吗?首先,我应该说,我同意这样的把戏可能有一些用处。不过不太经常。doctests中的代码就是一个很好的例子。

据我所知,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)

但是你有办法吗?

首先,我应该说,我同意这样的把戏可能有一些用处。不过不太经常。doctests中的代码就是一个很好的例子。它通常足够清晰,即使在压缩时也可以阅读,并且使其紧凑通常比使其“尽可能可读”带来的问题更少。然而,对于常规代码,连接行通常不是一种好的做法。当您无法在
if
for
语句中创建断点时,这通常是一个比额外一行更大的问题。此外,如果您不练习此类技巧,覆盖工具还会提供更多信息

然而,回答你的问题,似乎没有办法做你想做的事。使用
有很多限制。不能与
一起使用。通常,这些限制是合理的,但有时我也后悔它们如此严格


UPD:但是如果你非常专注于使它成为一个单行程序,那么有很多技巧。例如,生成器和列表理解(而不是
For
)、
reduce()
等等,在Python 3中,甚至可以在它们内部使用
print()

首先,我同意这样的技巧可能有一些用处。不过不太经常。doctests中的代码就是一个很好的例子。它通常足够清晰,即使在压缩时也可以阅读,并且使其紧凑通常比使其“尽可能可读”带来的问题更少。然而,对于常规代码,连接行通常不是一种好的做法。当您无法在
if
for
语句中创建断点时,这通常是一个比额外一行更大的问题。此外,如果您不练习此类技巧,覆盖工具还会提供更多信息

然而,回答你的问题,似乎没有办法做你想做的事。使用
有很多限制。不能与
一起使用。通常,这些限制是合理的,但有时我也后悔它们如此严格


UPD:但是如果你非常专注于使它成为一个单行程序,那么有很多技巧。例如,生成器和列表理解(而不是
For
)、
reduce()
等等,在Python 3中,甚至可以在它们内部使用
print()

我不想在Python上输入为什么要这样做,但不,你不能这样做

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

即(直接从下表中):


我不想讨论为什么你会想在Python上这么做,但不,你不能这么做

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

即(直接从下表中):

正如其他答案所说

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

通常,采用“功能性”方法可以缩短代码(或者至少允许更干净地重用代码),看看pythons的部分功能和其他功能

正如其他答案所说

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


通常,采用“功能性”方法可以缩短代码(或至少允许更干净地重复使用代码),请查看pythons的部分功能和['ListY:']+y:print(x)
中的其他功能。顺便说一句,这样做的目的是什么?python是专门设计用来强迫人们编写其他人可以阅读的代码的。如果您想要最短的行数,请尝试使用perl。如果您的兴趣是,比如说,学术性的,您可以尝试在上查看答案。如果您试图对生产代码执行这些技巧,应该立即停止。
对于['ListY:']+y:print(x)
。顺便说一句,这样做的目的是什么?python是专门设计用来强迫人们编写其他人可以阅读的代码的。如果您想要最短的行数,请尝试使用perl。如果您的兴趣是,比如说,学术性的,您可以尝试在上查看答案。如果您试图对生产代码执行这些技巧,您应该立即停止。非常感谢您的描述非常感谢您的描述
statement     ::=  stmt_list NEWLINE | compound_stmt
stmt_list     ::=  simple_stmt (";" simple_stmt)* [";"]
def f(g,xs):
    for x in xs:
        g(x)

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