更容易写出这个坚持pylint的方法

时间:2017-04-25 10:10:45

标签: python loops if-statement

有没有更好的方式来写这样的东西?

 if 'legal' in href_link or 'disclaimer' in href_link or 'contact' in href_link or 'faq' in href_link or 'terms' in href_link or 'log' in href_link:
        continue

最好是一行......我在哪里看?

3 个答案:

答案 0 :(得分:4)

使用内置any

items = ('legal', 'disclaimer', 'contact', 'faq', 'terms', 'log')
if any(x in href_link for x in items):
    continue

您可以直接在any中使用iterable来获得真正的单行,但这样就更具可读性。

答案 1 :(得分:1)

您可以构建正则表达式。我不确定效率,你必须与@MosesKoledoye的好答案进行比较。

要与替代品匹配,请使用管道|。你需要像legal|disclaimer|contact|faq|terms|log这样的模式。

您可以通过将字符串'|'与值:

连接来构建它
>>> values = {'legal', 'disclaimer', 'contact', 'faq', 'terms', 'log'}
>>> pattern = '|'.join(values)
>>> pattern
'terms|log|faq|legal|contact|disclaimer'

使用re(正则表达式)模块:

>>> import re
>>> href_link = 'link_to_disclaimer.html'
>>> if re.search(pattern, href_link):
...     print('matches')
matches

答案 2 :(得分:1)

@MosesKoledoye的答案可能是最适合你的答案:它确实能够将六个统一测试压缩成一个迭代的代码更好。

但你可能会问过"我如何打破长条件以适应79个字符?"。换句话说,您可能一直在询问代码格式,而不是如何编码。在这种情况下,我的首选答案是将其格式化为:

if (a in b or
    c in d or
    e not in f or
    g not in h):
    continue