在一行中运行multiline for循环

时间:2015-06-04 12:25:34

标签: python python-2.7 multiline

>>> query=""
>>> for var in xrange(9): query+=str(var)
... 
>>> query
'012345678'
>>> 

为什么上述代码不起作用?但以下作品

COALESCE()

4 个答案:

答案 0 :(得分:4)

;只允许合并“小语句”。这些是表达式,印刷品等。另一方面,for循环是复合语句。请参阅Full Grammar Specification

simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
small_stmt: (expr_stmt | print_stmt  | del_stmt | pass_stmt | flow_stmt |
             import_stmt | global_stmt | exec_stmt | assert_stmt)
...
compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated

在您的示例中,如果这不仅仅是为了说明您的问题,您可以将其重写为

query = ''.join(str(var) for var in xrange(9))

或者如果你真的真的需要exec多行语句,你可以在作业和\n循环之间添加for(因为你已经在另一个地方做过):

>>> exec("query=''\nfor var in xrange(9):\n\tquery+=str(var)\nprint query")
012345678

但请注意,这只适用于exec,而不能直接在交互式shell中使用:

>>> query=''\nfor var in xrange(9):\n\tquery+=str(var)\nprint query
SyntaxError: unexpected character after line continuation character

答案 1 :(得分:3)

也许你想要一个生成器表达式:

>>> query  = "".join(str(var) for var in xrange(9))
>>> query
'012345678'

答案 2 :(得分:2)

for语句是一个复合语句,根据定义,它不能遵循分号

引用python文档

Compound statements

  

复合语句由一个或多个'子句组成。'子句由标题和'套件组成。'特定复合语句的子句标题都在相同的缩进级别。每个子句头以唯一标识关键字开头,以冒号结束。套件是由子句控制的一组语句。 套件可以是与标题位于同一行的一个或多个以分号分隔的简单语句,位于标题的冒号后面,也可以是后续行中的一个或多个缩进语句。只有后一种形式的套件才能包含嵌套的复合语句;以下是非法的,主要是因为不清楚以下其他条款属于哪个if子句:

并且碰巧for语句是Python中的复合语句

compound_stmt ::=  if_stmt
                    | while_stmt
                    | for_stmt
                    | try_stmt
                    | with_stmt
                    | funcdef
                    | classdef
                    | decorated

因此无法使用分号

答案 3 :(得分:0)

绝大多数Python程序员只使用换行符来分隔语句,我怀疑大多数人甚至不知道分号是否有可能。

并且(正如Abhijit所说)这个功能是有限的:它只适用于简单的语句,如变量赋值和函数调用,而不适用于控制语句,如" if"," for", "而"等等