Замкнутые циклы и синтаксис Python - PullRequest
0 голосов
/ 25 мая 2018

В настоящее время я изучаю NLP в Python и у меня возникают проблемы с синтаксисом Python.

cfd = nltk.ConditionalFreqDist( #create conditional freq dist
    (target, fileid[:4]) #create target (Y) and years (X)
    for fileid in inaugural.fileids() #loop through all fileids
    for w in inaugural.words(fileid) #loop through each word of each fileids 
    for target in ['america','citizen'] #loop through target
    if w.lower().startswith(target)) #if w.lower() starts with target words
cfd.plot() # plot it

Я не понимаю цели строки 2. Более того, я не понимаю, почему каждый цикл не выполняется.не заканчиваются на ":", как любые циклы в Python.

Может кто-нибудь объяснить мне этот код?Код работает, но я не до конца понимаю его синтаксис.

Спасибо

1 Ответ

0 голосов
/ 25 мая 2018

Аргумент nltk.ConditionalFreqDist является генератором выражения .

Синтаксис похож на синтаксис понимания списка: мы могли бы создать список с

[(target, fileid[:4])  for fileid in inaugural.fileids()
                       for w in inaugural.words(fileid) 
                       for target in ['america','citizen'] 
                       if w.lower().startswith(target) ]

и передать его в функцию, но использование генератора позволяет повысить эффективность использования памяти, так как нам не нужно составлять весь список перед его итерацией.Вместо этого кортежи (target, ...) генерируются один за другим, пока мы выполняем итерацию на объекте генератора.

Вы также можете взглянуть на Как именно работает понимание генератора? для получения дополнительной информации о выражениях генератора.

...