受信トレイを読み込んで添付ファイルを処理するコードを記述しようとしています。私はこれが、特定のテーマを持つすべてのメッセージを処理したいときに発電機がどのように動作するかを知る良い機会になると判断しました。私はすべての添付ファイルとの関連科目を取得することができますポイントに得ているが、私は一種の私はメールを生成してメッセージを処理するジェネレータを作成する
def read_email_from_gmail():
try:
print 'got here'
mail = imaplib.IMAP4_SSL(SMTP_SERVER)
mail.login(FROM_EMAIL,FROM_PWD)
mail.select('inbox')
type, data = mail.search(None, 'ALL')
mail_ids = data[0]
id_list = mail_ids.split()
first_email_id = int(id_list[0])
latest_email_id = int(id_list[-1])
print latest_email_id
while True:
for i in range(latest_email_id,first_email_id - 1, -1):
latest_email_id -= 1
#do stuff to get attachment and subject
yield attachment_data, subject
except Exception, e:
print str(e)
for attachment, subject in read_email_from_gmail():
x = process_attachment(attachment)
y = process_subject(subject)
がされたループにlatest_email_id
を進めています進めていなかったfor i in range . . .
でイテレータとして偽のそれに持っていましたインボックスに状態を保持するためにジェネレータを使用して私のインボックスを進めるためには、もっとpythonicな方法がありますか?
コードを[e-satis '](https://stackoverflow.com/a/642988/190597)と比較したい場合があります。彼は、 'for i in range(...) 'ループなしでメッセージを反復処理する別の方法を示しています。 – unutbu
私はそのアプローチから始めて、ジェネレータについて疑問を抱かせたので、コードをよりよくカプセル化することができました。それぞれのメールメッセージに加えなければならないことは、非常に広範で、ジェネレータ – PyNEwbie