2013-02-26 114 views
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更改,我怎樣才能使循環調用它們?

回答

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)) 

其中**格式適用字典爲一組關鍵字參數;使用.format(**urlvalues)基本上翻譯爲.format(cat=urlvalues['cat'], uid=urlvalues['uid'])

+0

我試過的東西,但我沒有找到神奇的解決方案。你能給我一個循環的例子嗎? – 2013-02-26 15:52:13

+0

@MikeThunder:已完成。 :-) – 2013-02-26 15:53:38

3

基本上這是一個偉大的使用情況爲map內置功能:

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()