if / else语句的Pythonic替代品

时间:2013-10-13 08:56:58

标签: python optimization if-statement data-structures

我正在尝试避免复杂的if / elif / else语句。

我可以用什么pythonic方法来实现我的目标。

这就是我想要实现的目标:

我的脚本将收到大量不同的网址,

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

无论如何都要避免这种做法...如果xyz网站执行funcA,如果xyz网站执行funcB。

我想用这个作为真实世界的课程来学习我的python代码的一些高级结构。 因此,请随时指导我学习Python或编程的基本知识。

2 个答案:

答案 0 :(得分:12)

使用调度字典映射域来运行:

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函数是第一类对象,可以像任何其他对象一样作为值存储在字典中。

答案 1 :(得分:4)

您可以使用dict

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

...
...

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