2013-10-31 52 views
1

什麼是一些代碼結構/編程技術來避免這種情況:提高代碼的可讀性,給python腳本有點更優雅

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

類似想法的任何變種我不認爲這意味着你的想法。那永遠是真的 –

+1

你的代碼微妙地不正確。假設'url.netloc'不等於「www.youtube.com」,則Python將繼續執行條件的下一部分(在第一個「或」之後),並將「youtu.be」評估爲*布爾*,這將**總是**爲真。 –

回答

1

最簡單的,我想,應該是:

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

5

行之後

就像是以下幾點:

(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 ==多次。