为什么Python不允许在同一行上放置一个for后跟一个if?

Fra*_*urt 3 python

为什么这个代码

for i in range(10):
    if i == 5: print i
Run Code Online (Sandbox Code Playgroud)

复合语句时有效(我知道PEP 8不鼓励这样的编码风格)

for i in range(10): if i == 5: print i
Run Code Online (Sandbox Code Playgroud)

不是?

ssh*_*124 7

这是因为python有关于缩进的严格规则用于表示代码块,并且通过for后跟a if,你创建了模糊的缩进解释,因此python不允许它.

对于python,您可以在if语句后添加任意数量的行:

if 1==1: print 'Y'; print 'E'; print 'S'; print '!';
Run Code Online (Sandbox Code Playgroud)

只要它们都具有相同的缩进级别,也就是说,不if,while,for因为他们引入更深的缩进级别.

希望有所帮助


Mat*_*vor 6

究其原因,为什么你不能,是因为语言根本不支持它:

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]
Run Code Online (Sandbox Code Playgroud)

在Python邮件列表上已多次提出建议,但从未真正获得牵引力,因为已经可以使用现有机制...

如过滤后的生成器表达式:

for i in (i for i in range(10) if i == 5):
    ...
Run Code Online (Sandbox Code Playgroud)

这比列表理解的优点是它在迭代之前不会生成整个列表.