>>> query=""
>>> for var in xrange(9): query+=str(var)
...
>>> query
'012345678'
>>>
为什么上述代码不起作用?但以下作品
COALESCE()
答案 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文档
复合语句由一个或多个'子句组成。'子句由标题和'套件组成。'特定复合语句的子句标题都在相同的缩进级别。每个子句头以唯一标识关键字开头,以冒号结束。套件是由子句控制的一组语句。 套件可以是与标题位于同一行的一个或多个以分号分隔的简单语句,位于标题的冒号后面,也可以是后续行中的一个或多个缩进语句。只有后一种形式的套件才能包含嵌套的复合语句;以下是非法的,主要是因为不清楚以下其他条款属于哪个if子句:
并且碰巧for语句是Python中的复合语句
compound_stmt ::= if_stmt
| while_stmt
| for_stmt
| try_stmt
| with_stmt
| funcdef
| classdef
| decorated
因此无法使用分号
答案 3 :(得分:0)
绝大多数Python程序员只使用换行符来分隔语句,我怀疑大多数人甚至不知道分号是否有可能。
并且(正如Abhijit所说)这个功能是有限的:它只适用于简单的语句,如变量赋值和函数调用,而不适用于控制语句,如" if"," for", "而"等等