2017-04-22 45 views
0

假設我將一個變量傳遞給一個函數,並且我想確保它的格式適合我的最終用途,同時考慮了幾種潛在的不需要的格式。Python可變突變最佳實踐

示例;我只想存儲url地址的小寫形式,而不使用http://或https://。

def standardize(url): 
    # Lowercase 
    temp_url = url 
    url = temp_url.lower() 

    # Remove 'http://' 
    if 'http://' in url: 
     temp_url = url 
     url = temp_url.replace('http://', '') 

    if 'https://' in url: 
     temp_url = url 
     url = temp_url.replace('https://', '') 

    return url 

我纔剛剛蠶食新手的稱號,並想知道是否有更Python的方法來實現這一類型的過程?

最終目標是一個URL的改造中這樣https://myurl.com/RANDoM - >myurl.com/random

URL字符串格式化的應用程序的任何特別的重要性不是。

+0

你不需要'temp_url'。除此之外,這看起來很典型。 –

+0

所以只需'url.lower()'而不是'url = temp_url.lower()'? – theeastcoastwest

+0

你仍然需要將它分配回'url',所以'url = url.lower()'但是我不確定你的問題是什麼......你能描述一下你特別想知道什麼嗎? –

回答

1
def standardize(url): 
    return url.lower().replace("https://","").replace("http://","") 

這就像我可以做到這一點一樣簡單,但鏈接有點難看。

如果你想導入的正則表達式,也可以做這樣的事情:

import re 

def standardize(url): 
    return re.sub("^https?://", "", url.lower()) 
+0

這就是我想知道的,當然。對於我能夠直接格式化一個變量,我有點困惑。 – theeastcoastwest

+0

@Darkstarone現在,這正是我的答案(正則表達式部分)....並且你知道這是不允許的:( – abccd

+0

這是我感興趣的非正則表達式答案 – theeastcoastwest

3

一個簡單的re.sub將這樣的伎倆:

import re 
def standardize(url): 
    return re.sub("^https?://",'',url.lower()) 

# with 'https' 
print(standardize('https://myurl.com/RANDoM')) # prints 'myurl.com/random' 
# with 'http' 
print(standardize('http://myurl.com/RANDoM')) # prints 'myurl.com/random' 
# both works