0

ボリュームを得るために開始するため、最適化したいこのコードがあります:( .私が今やっているように各オブジェクトのコードを作成する代わりに、配列を作成して彼から値を呼び出したいです:

post_data_groups = {'profile': '46', 'clear': 'Remove+Avatar'}
post_data_documents = {'folder1': '30', 'remove': 'Delete+Documents'}

urlAdmin_groups = 'http://site.com/management.php?Category=6&uid=196'
urlModerator_groups = 'http://site.com/management.php?Category=6&uid=197'
..........

次に、ドキュメントの場合:

urlAdmin_documents = 'http://site.com/management.php?Category=3&uid=196'
urlModerator_documents = 'http://site.com/management.php?Category=3&suid=197'
.... and so on
data_groups= urllib.urlencode(post_data_groups)
data_documents= urllib.urlencode(post_data_documents)

次に、次のように呼び出します。

response = opener.open(urlAdmin_groups, data_groups)
response = opener.open(urlAdmin_documents, data_documents)
........... and so on
the_page = response.read()

カテゴリとuidのみが変更されるため、それらを呼び出す際にループを作成するにはどうすればよいですか?

4

2 に答える 2

3

基本的に、マップ組み込み関数の優れた使用例です。

url = 'http://site.com/management.php?Category={cat}&uid={uid}'
cat_uids = [ (3,196), (3,197), ... ] # read thos from config file or...
urls = [ url%cat_uid for cat_uid in cat_uids ]
responses = map(opener.open, urls)
pages = map(response_class.read,responses) # where response_class is the class returned by open() 
于 2013-02-26T15:55:32.483 に答える
2

テンプレートとして文字列を使用します。

url = 'http://site.com/management.php?Category={cat}&uid={uid}'

次に.format()、文字列のメソッドを使用してスロットを埋めることができます。

response = opener.open(url.format(cat=3, uid=196), data))
the_page = response.read()

これをループを使用して拡張する必要があります。ループでは、カテゴリと UID を提供する何かを反復処理しますが、アイデアは得られます。おそらくマッピングが機能するでしょう:

groups = {
    Admin: {'cat': 3, 'uid': 196},
    ...
}

for groupname, urlvalues in groups.iteritems():
    response = opener.open(url.format(**urlvalues), data_groups))

ここで、**フォーマットは一連のキーワード引数として辞書を適用します。using は.format(**urlvalues)本質的に に変換され.format(cat=urlvalues['cat'], uid=urlvalues['uid'])ます。

于 2013-02-26T15:49:19.923 に答える