Использование для и если в Python - PullRequest
2 голосов
/ 14 мая 2011

Не могли бы вы взглянуть на код ниже:

def search(self, filter):
        return [note for note in self.notes if note.match(filter)]

Я думал, что для операторов for и if требуется двоеточие. Выше нет двоеточия после for и if. И этот вид, если и для использования не похож на то, что я читаю в учебниках. То, что я обычно читаю, выглядит так:

for note in self.notes:
    some code

или

if note.match(filter):
    some code

Не могли бы вы объяснить этот вид использования if и for, он не включает двоеточия и представляет собой однострочный оператор. Предложение Anf if находится в конце оператора. Действительно сбивает с толку.

Ответы [ 3 ]

9 голосов
/ 14 мая 2011

Это не просто цикл / if, а понимание списка

В частности, этот кусок кода:

return [note for note in self.notes if note.match(filter)]

для каждой заметки в self.notes возвращает только те заметки, которые соответствуют условию фильтра.

По сути, это фильтр, но в целом вы можете использовать списочные выражения также для «преобразования» элементов списка, например ::

[1000 * x for x in myNumbers if x < 2]
3 голосов
/ 14 мая 2011

Вы в замешательстве, потому что смотрите на понимание списка.

Подробнее здесь

1 голос
/ 14 мая 2011

Это не совсем так, не в смысле языка Си. Это Python список понимания .

...