2012-07-26 3 views
1

В следующем коде:Пытаясь понять Python код с выражением генератора

chars = set('AEIOU') 
... 
if any((cc in chars) for cc in name[ii]): 
    print 'Found' 

Что такое «(куб.см символов)» часть? Я знаю, что он применяется к каждому cc, который генерируется циклом for. Но является ли «(cc in chars») конструкцией выражения генератора?

Спасибо.

+0

вы пытаетесь получить, какие символы в слове гласные? – FRD

ответ

3

Нет, (cc in chars) часть является булевым выражением; in is a sequence operator, который тестирует, если cc является участником последовательности chars. Скобки на самом деле там избыточны и могут быть опущены.

+0

Удивительно, попробовал это без круглых скобок, и вы правы, они не нужны. Спасибо. – Sabuncu

3

(cc in chars) просто проверяет, если строка cc содержится в chars и возвращает логическое false или true.

В соответствии с Python Language Reference нечто среднее между скобками не является выражением генератора, если оно не содержит по меньшей мере одного предложения for i in iterable.

+0

Спасибо, объяснение выражения генератора МНОГО оценили. – Sabuncu

1

Нет, (cc in chars) - это просто логическое выражение, возвращающее True, если cc находится в символах, а False - в противном случае.

В самом деле, код может фактически быть написаны

chars = set('AEIOU') 
... 
if [cc for cc in name[ii] if cc in chars]: 
    print 'Found' 

В том случае, если в списке есть какие-либо элементы (что делает его передать предложение, если-), это потому, что некоторые куб.смы в гольцах. Я бы на самом деле нашел это более читабельным и простым. Cheers.

EDIT:

Чтобы прояснить мой ответ, [cc for cc in name[ii] if cc in chars] генерирует список всех символов в имени [II], что в 'символов' (в этом случае, гласные). Если в этом списке есть какие-либо элементы, он будет проходить if-test.

[cc for cc in name[ii] if cc in chars] говорит «для каждого элемента/символа в имени [б], добавьте его, только если он находится в гольцов. Проверьте this ответ разъяснений.

+0

FRD, я проверил ваш код, да, это работает, но я не знаю 't понять, как. :( – Sabuncu

+0

Sabuncu, вы понимаете, что такое понимание списка? – FRD

+0

ОК, я вижу это сейчас. Это понимание списка с квадратными скобками. Спасибо за редактирование и подсказку. – Sabuncu

Смежные вопросы