Если у вас есть несколько операторов после IF
, вы должны использовать begin
и end
(например, по сравнению с accolades в c #).
IF ((SELECT COUNT(*) FROM table WHERE table.Date > '2016-03-20') > 10)
BEGIN
SET @test1 = 'test1'
SET @test2 = 'test2'
END
ELSE
BEGIN
SET @test1 = 'testelse'
SET @test2 = 'testelse'
END
http://docs.python.org/reference/expressions.html#generator-expressions
Переменные, используемые в выражении генератора, оцениваются лениво, когда Метод
blockquote>__next__()
вызывается для объекта генератора (таким же образом, как и обычные генераторы). Тем не менее, крайнее левое предложение немедленно оценивается, так что полученная им ошибка может быть видна перед любой другой возможной ошибкой в коде, который обрабатывает выражение генератора. Последующие предложения не могут быть сразу оценены, так как они могут зависеть от предыдущего цикла цикла.
S[i:j+1]
оценивается при выполнении генератора и в этой точкеS
имеет последнее значение .Вместо этого вы можете использовать обычный генератор. Теперь
ss
является локальным дляsubgen
:import itertools def subgen(ss): l=len(ss) for i in xrange(l): for j in xrange(i,l): yield ss[i:j+1] subs=[] for i in xrange(int(raw_input())): S=raw_input() subs.append(subgen(S))
Ну, это одна из странных особенностей выражения генератора. Посмотрите на this . В вашем случае используется поздняя привязка, поэтому вы получите два одинаковых результата.