6

我试图避免复杂的 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 或一般编程的基础知识。

4

2 回答 2

14

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

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

于 2013-10-13T08:58:36.610 回答
4

你可以使用一个dict

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

...
...

if urlParsed.netloc in myDict:
    myDict[urlParsed.netloc]()
else:
    print "Unknown URL"
于 2013-10-13T08:59:22.230 回答