【问题标题】:Improve code readability, give python script bit more elegance提高代码可读性,让 python 脚本更加优雅
【发布时间】:2013-10-31 08:04:18
【问题描述】:

有哪些代码结构/编程技术可以避免这种情况:

  if url.netloc  == "www.youtube.com" or "youtu.be" or "soundcloud.com or //
  "instagram.com" or "vine.co" or ETC ETC
     do XYZ

【问题讨论】:

  • 我不认为这意味着你认为它意味着什么。这总是正确的
  • 您的代码非常不正确。假设url.netloc 不等于“www.youtube.com”,Python 将继续条件的下一部分(在第一个or 之后),并将“youtu.be”评估为 boolean i>,它将始终为真。

标签: python if-statement refactoring switch-statement


【解决方案1】:

下一行

url.netloc == "www.youtube.com" or "youtu.be" or "soundcloud.com" or "instagram.com"

如下:

(url.netloc == "www.youtube.com") or ("youtu.be") or ("soundcloud.com") or ("instagram.com")

它总是产生True,因为如果用作谓词,非空字符串将被视为真值。

如下使用in

if url.netloc in ("www.youtube.com", "youtu.be", "soundcloud.com", "instagram.com", ..):

也可以使用or,但需要多次重复or url.netloc ==

【讨论】:

    【解决方案2】:

    我猜最简单的应该是:

    xyz_targets = ('www.youtube.com', 'youtu.be', ...)
    if url.netloc in xyz_targets:
        doXYZ()
    

    甚至:

    actions = {'www.youtube.com': doXYZ,
                       'youtu.be': doXYZ,
                       ...
                       }
    actions.get(url.netloc, doNothing)()
    

    或类似想法的任何变体,它解析用于构建xyz_targetsactions的配置文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-04
      • 2014-05-01
      • 1970-01-01
      • 2010-10-07
      • 2021-07-30
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      相关资源
      最近更新 更多