新聞中心
python中的函數(shù)數(shù)不勝數(shù),是我們學(xué)習(xí)python重要的模塊之一。類作為python的另一個(gè)模塊,與函數(shù)相比絲毫不遜色。兩者平分春秋,具體選擇哪個(gè)還是要看各位小伙伴們的使用。為了讓大家體會(huì)兩者用法的不同,小編特意找了一個(gè)例子,讓大家在對比中選擇更合適的用法。下面我們一起看看示例吧。

在金水等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需求定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),全網(wǎng)整合營銷推廣,外貿(mào)網(wǎng)站建設(shè),金水網(wǎng)站建設(shè)費(fèi)用合理。
假設(shè)我們需要編寫一個(gè)音樂播放器。在這個(gè)播放器中,我們有關(guān)于不同類型數(shù)據(jù)的信息,如歌曲、專輯、藝術(shù)家和播放列表。還有一些可以播放歌曲、播放專輯、播放藝術(shù)家或播放播放列表的功能。我們將每種數(shù)據(jù)存儲(chǔ)在字典中,不同類型的數(shù)據(jù)有不同的字段名,因?yàn)槊總€(gè)play函數(shù)需要做不同的事情,所以我們就有四個(gè)不同的函數(shù):
some_song = {
"title": "Yellow Submarine",
"artist": the_beatles, # 指向到包含該藝術(shù)家的詞典
"album": yellow_submarine_album, # 指向包含此相冊的dict的鏈接
"duration": insert_time_object_here,
"filepath": "path/to/file/on/disk"
}
# 其他數(shù)據(jù)類型的結(jié)構(gòu)也類似
# 一些函數(shù)
def play_song(song):
# 獲取歌的路徑
path = song["filepath"]
# 播放路徑
call_some_library_function(path)
def play_album(album):
# 找到專輯里所有的歌曲
# 分別調(diào)用play_song
def play_artist(artist):
# 找到這位藝術(shù)家所有的專輯
# 分別調(diào)用play_album
def play_playlist(playlist):
# 找到播放列表中的所有歌曲
# 分別調(diào)用play_song
這樣寫有什么不好?我們有四個(gè)非常相似的函數(shù),每個(gè)函數(shù)都與特定類型的數(shù)據(jù)相關(guān)。你必須把它們叫做不同的東西,而不僅僅是play,你必須確保你把正確的數(shù)據(jù)傳遞給它們。雖然這四種不同的類型都可以“播放”,但是沒有一種通用的方法可以在不知道它是什么的情況下播放任何東西。那么在OOP下,怎么實(shí)現(xiàn)呢:
class Song: def __init__(self, title, artist, album, duration, filepath): self.title = title self.artist = artist self.album = album self.duration = duration self.filepath = filepath def play(self): path = self.filepath call_some_library_function(path)
這樣就定義了如何創(chuàng)建一個(gè)新的Song對象。該方法將字段值作為參數(shù),并將它們作為對象的屬性賦值。self是一個(gè)特殊參數(shù)(名稱不保留;它可以被稱為任何東西),它是對對象本身的引用。是一種從同一對象的其他方法內(nèi)部訪問屬性和方法的方法。當(dāng)我們從對象外部訪問它們時(shí)(要使用play方法時(shí)將執(zhí)行此操作),則可以使用在該范圍內(nèi)為對象指定的任何名稱。
那么在之前:
# some_song是上面定義的歌
play_song(some_song)
在使用class之后:
# self參數(shù)沒有在這里傳遞;它會(huì)自動(dòng)添加
some_song = Song("Yellow Submarine",
the_beatles,
yellow_submarine_album,
insert_time_object_here,
"path/to/file/on/disk"
)
some_song.play()
為什么這樣更好?如果我們有一個(gè)對象,則不必知道它是什么就可以播放,因?yàn)楝F(xiàn)在播放任何內(nèi)容的語法都是相同的:anyobject.play()即對象“知道”如何使用“自己的”數(shù)據(jù)進(jìn)行處理的設(shè)計(jì)思想。無需從外部檢查對象是否具有某些字段并決定如何處理這些內(nèi)部字段,而是調(diào)用play對象提供的方法,并在每個(gè)類內(nèi)部定義該類型的對象應(yīng)如何實(shí)現(xiàn)此功能。
以上就是類跟函數(shù)的使用對比,有的小伙伴們肯定說小編偏向于類了。其實(shí)這只是一個(gè)應(yīng)用場景的選擇,大家也不用糾結(jié)于這一點(diǎn),選擇合適的使用才是最重要的。
當(dāng)前名稱:創(chuàng)新互聯(lián)Python教程:python3類比函數(shù)好用嗎?該如何選擇?
網(wǎng)站網(wǎng)址:http://m.fisionsoft.com.cn/article/cdeiisi.html


咨詢
建站咨詢
