为什么这个代码
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)
不是?
这是因为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因为他们引入更深的缩进级别.
希望有所帮助
究其原因,为什么你不能,是因为语言根本不支持它:
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)
这比列表理解的优点是它在迭代之前不会生成整个列表.