【问题标题】:Pythonic alternatives to if/else statementsif/else 语句的 Pythonic 替代方案
【发布时间】:2013-10-13 08:56:58
【问题描述】:

我试图避免复杂的 if/elif/else 语句网络。

我可以使用哪些 Python 方法来实现我的目标。

这是我想要实现的目标:

我的脚本会收到大量不同的 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....

有没有办法避免这种行为...如果 xyz 站点执行 funcA,如果 xyz 站点执行 funcB。

我想将此作为现实世界的课程来学习我的 python 代码的一些高级结构。 因此,请随时指导我了解 Python 或一般编程的基础知识。

【问题讨论】:

    标签: python optimization if-statement data-structures


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以使用dict

      myDict = {"www.youtube.com": youtube, "hulu.com": hulu}
      
      ...
      ...
      
      if urlParsed.netloc in myDict:
          myDict[urlParsed.netloc]()
      else:
          print "Unknown URL"
      

      【讨论】:

        猜你喜欢
        • 2014-05-22
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-29
        • 2012-04-19
        • 2012-10-10
        • 1970-01-01
        相关资源
        最近更新 更多