2013-10-13 80 views
4

我試圖避免if/elif/else語句的複雜網絡。Python/if語句的替代方案

我可以用什麼pythonic方法來實現我的目標。

這是我想達到的目標:

我的腳本將獲得不同的URL轉換,

youtube.com,hulu.com,netflix.com,instagram.com,imgur.com等等可能有1000多個不同的域名。

我將爲每個不同的站點調用一個函數/一組不同的指令。

左右....

if urlParsed.netloc == "www.youtube.com": 
     youtube() 
    if urlParsed.netloc == "hulu.com": 
     hulu() 
    and so on for 100s of lines.... 

反正是有避免這種行動......如果某某網站做FuncA的,如果某某網站做funcB。

我想用這個作爲一個真實世界的教訓,學習一些我的python代碼的先進結構。 所以請隨時引導我走向一些基本的Python或編程。

回答

11

使用調度字典映射域到功能:

def default_handler(parsed_url): 
    pass 

def youtube_handler(parsed_url): 
    pass 

def hulu_handler(parsed_url): 
    pass 

handlers = { 
    'www.youtube.com': youtube_handler, 
    'hulu.com':  hulu_handler, 
} 

handler = handlers.get(urlParsed.netloc, default_handler) 
handler(urlParsed) 

Python函數是第一類對象,並且可以被存儲爲在就像任何其他對象的字典值。

3

您可以使用dict

myDict = {"www.youtube.com": youtube, "hulu.com": hulu} 

... 
... 

if urlParsed.netloc in myDict: 
    myDict[urlParsed.netloc]() 
else: 
    print "Unknown URL"