2017-04-25 23 views
2

有沒有更好的方式來寫這樣的事情?更簡單的方法來寫這堅持pylint

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 

最好在一條線上......我在哪裏看?

回答

4

使用內置any

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

可以使用迭代直接any有一個真正的一行,但隨後其更具可讀性這種方式。

+0

謝謝!只要我被允許,我會立刻起來! –

+0

對不起,只是一個初學者,不能完全在網上搜索它 –

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 
1

@ MosesKoledoye的答案可能是你最好的一個:它肯定會使更好的代碼將六個統一測試集中到一個迭代中。

但是你可能會問「我怎樣才能打破長條件以適應79個字符?」。換句話說,您可能一直在詢問代碼格式,而不是如何編寫代碼。在這種情況下,我的首選答案是格式化它是這樣的:

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

謝謝... @ MosesKoledoye的答案更適合...但如果不可避免的,這是一個很好的方式來分割,以避免違反pylint –

相關問題