鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ 小白提問:python 在什么時候用函數(shù),什么時候用類?

小白提問:python 在什么時候用函數(shù),什么時候用類?

半路自學(xué)的編程小透明,剛剛接觸python這門語言?,F(xiàn)在有個疑問想請教大家。

我想問的是,大家是如何判斷、以及用什么標(biāo)準(zhǔn)來決定什么時候使用函數(shù)?什么時候使用類?

函數(shù)還好說,一段代碼需要重復(fù)使用的時候用函數(shù)會減少代碼量。
但是我遇到了這樣一個實例,由于目前思想上更習(xí)慣使用面向過程編程,所以在編寫下面這個小小爬蟲程序的時候就寫成了這樣的形式:

# 任務(wù)目標(biāo)是爬取特定網(wǎng)頁上圖片列表頁面的所有圖片。
# 由于是列表頁面所以有一個總頁數(shù),就使用了 for 循環(huán)遍歷所有頁面,然后下載個頁面圖片的思路。
# 大致如下

base_url = 'xxx/page='    # 網(wǎng)址忽略了
pages = 90                # 假設(shè)一共有 90 頁

for page in range(1, pages + 1):          # 首先使用 for 遍歷列表的每一頁,獲取所有的 img 標(biāo)簽
    url = base_url + str(page)
    rq = requests.get(url)
    soup = BeautifulSoup(rq.text)
    all_tag_img = soup.find_all('img')
    
    for tag in all_tag_img:              # 然后在通過 for 遍歷所有標(biāo)簽獲取下載地址,下載后保存
        img_url = tag.get('src')
        img = requests.get(img_url)
        # 下面就是獲取圖片的名稱,然后保存什么的了
        

這樣下來的話,流程上面感覺比較接近普通瀏覽的順序,
但這是這里用不到函數(shù),更用不到類,但是見到過很多爬蟲教程,大家會把例如下載圖片、獲取名稱、保存這些東西封裝成函數(shù)。有些直接就是創(chuàng)建一個爬蟲的類,然后增加各種功能。

所有,問題就是,這樣一個任務(wù),你們回去用函數(shù)或類么?為什么?
我覺得編程最難的是思想,所有我特別想知道你們是怎么考慮的
萬分感謝

回答
編輯回答
櫻花霓

個人覺得,其實這個跟你需要完成的任務(wù)有關(guān)。打個比方,你只是自己想寫一個程序,方便自己工作,那你就可以寫函數(shù)為主,反正自己知道這些函數(shù)什么意思,有時候換地方使用直接copy一下,修修改改就好了。
而如果是完成某個大的項目,項目要分很多塊,那么就必須寫類了。有人說我寫個函數(shù),最終實現(xiàn)起來還不是一樣?實現(xiàn)起來是一樣,那么后期維護(hù)呢?你是更喜歡看一個模塊,這個模塊有幾個類,還是說喜歡看幾十個函數(shù)呢?顯而易見,一般稍微有點樣子的項目都是分成幾個模塊,每個模塊會分出幾個類來各自實現(xiàn)某個特定的任務(wù)。到代碼層的時候,才會需要看函數(shù)的代碼。
如果一個項目是由按照某些順序,直接調(diào)用幾十個函數(shù)完成的,相信后期維護(hù)的人會瘋吧?好氣啊,全是函數(shù),雖然有說明,也很費事的吧?

2017年7月1日 01:46
編輯回答
懶洋洋

用函數(shù)的話 代碼量少很多 比如你發(fā)出來的代碼 一行就夠了

2017年6月28日 09:04
編輯回答
放開她

首要目標(biāo):完成任務(wù)。
次要目標(biāo):快速完成任務(wù)。

不使用類和對象的話,函數(shù)所有的輸入輸出都要在一個空間里管理,如果功能較多函數(shù)較多,管理上可能就比較有難度了。這時候就可以考慮讓類對象來自己管理它需要的資源,對外只提供必要的輸入輸出和管理接口就行了。

寫的多了就慢慢明白了。一切視需求而定,既不過渡設(shè)計用牛刀殺雞,也不能代碼一團(tuán)糟難以理解。

2017年7月9日 18:29