Почему список генераторов меняет генераторы? [Дубликат]

Если у вас есть несколько операторов после 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
2
задан prongs 24 May 2012 в 09:23
поделиться

2 ответа

http://docs.python.org/reference/expressions.html#generator-expressions

Переменные, используемые в выражении генератора, оцениваются лениво, когда Метод __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))
6
ответ дан Janne Karila 24 August 2018 в 00:50
поделиться

Ну, это одна из странных особенностей выражения генератора. Посмотрите на this . В вашем случае используется поздняя привязка, поэтому вы получите два одинаковых результата.

2
ответ дан Marii 24 August 2018 в 00:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: