
ジェネレータ関数はすごい
関数を定義する
requests
ジェネレータを関数に変換したいとします。小さなモジュールにジェネレータを
入れて、ジェネレータを知らない他のプログラマでも使えるようにします。
ジェネレータのコードを再度示します。
import requests
urls = ('http://headfirstlabs.com', 'http://oreilly.com', 'http://twitter.com')
for resp in (requests.get(url) for url in urls):
print(len(resp.content), '->', resp.status_code, '->', resp.url)
このコードをカプセル化する関数
gen_from_urls
を作成しましょう。この関数は
1
つの引
数(
URL
のタプル)を取り、各
URL
の結果のタプルを返します。このタプルは
3
つの値を持って
います。
URL
のコンテンツの長さ、
HTTP
ステータスコード、レスポンスの送信元の
URL
です。
gen_from_urls
があると仮定し、次のように他のプログラマが
for
ループの一部として関
数を実行
できるようにします。
from url_utils import gen_from_urls
urls = ('http://headfirstlabs.com', 'http://oreilly.com', 'http://twitter.com')
for resp_len, ...