Python設(shè)計(jì)模式主要分為三大類:創(chuàng)建型模式、結(jié)構(gòu)型模式、行為型模式;三 大類中又被細(xì)分為23種設(shè)計(jì)模式,以下這幾種是最常見的。
創(chuàng)新互聯(lián)建站是網(wǎng)站建設(shè)專家,致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營銷,專業(yè)領(lǐng)域包括成都網(wǎng)站制作、做網(wǎng)站、電商網(wǎng)站制作開發(fā)、小程序開發(fā)、微信營銷、系統(tǒng)平臺(tái)開發(fā),與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,我們的整合解決方案結(jié)合了恒基網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,且不斷評(píng)估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!
單例模式:是一種常用的軟件設(shè)計(jì)模式,該模式的主要目的是確保某一個(gè)類只有一個(gè)實(shí)例存在。當(dāng)你希望在整個(gè)系統(tǒng)中,某個(gè)類只能出現(xiàn)一個(gè)是實(shí)例時(shí),單例對(duì)象就能派上用場。單例對(duì)象的要點(diǎn)有三個(gè):一是某個(gè)類只能有一個(gè)實(shí)例;二是它必須自行創(chuàng)建整個(gè)實(shí)例,三是它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。
工廠模式:提供一個(gè)創(chuàng)建對(duì)象的接口,不像客戶端暴露創(chuàng)建對(duì)象的過程,使用一個(gè)公共的接口來創(chuàng)建對(duì)象,可以分為三種:簡單工廠、工廠方法、抽象工廠。一個(gè)類的行為或其算法可以在運(yùn)行時(shí)更改,這種類型的設(shè)計(jì)模式屬于行為型模式。
策略模式:是常見的設(shè)計(jì)模式之一,它是指對(duì)一系列的算法定義,并將每一個(gè)算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化。換句話來講,就是針對(duì)一個(gè)問題而定義出一個(gè)解決的模板,這個(gè)模板就是具體的策略,每個(gè)策略都是按照這個(gè)模板進(jìn)行的,這種情況下我們有新的策略時(shí)就可以直接按照模板來寫,而不會(huì)影響之前已經(jīng)定義好的策略。
門面模式:門面模式也被稱作外觀模式。定義如下:要求一個(gè)子系統(tǒng)的外部與其內(nèi)部的通信必須通過一個(gè)統(tǒng)一的對(duì)象進(jìn)行。門面模式提供一個(gè)高層次的接口,使得子系統(tǒng)更易于使用。門面模式注重統(tǒng)一的對(duì)象,也就是提供一個(gè)訪問子系統(tǒng)的接口。門面模式與模板模式有相似的地方,都是對(duì)一些需要重復(fù)方法的封裝。但本質(zhì)上是不同的,模板模式是對(duì)類本身的方法的封裝,其被封裝的方法也可以單獨(dú)使用;門面模式,是對(duì)子系統(tǒng)的封裝,其被封裝的接口理論上是不會(huì)被單獨(dú)提出來使用的。
"""?題主的問題主要有三個(gè):
1.?max_prime中的i錯(cuò)寫成了x,這是導(dǎo)致錯(cuò)誤的原因
2.?s=[]應(yīng)放在函數(shù)max_prime中,這樣才符合程序設(shè)計(jì)原則
3.?如果要求的是包含x在內(nèi)的最大質(zhì)數(shù),max_prime函數(shù)中range應(yīng)
寫成range(2,x+1),此時(shí)i的取值范圍才是2到x
此外,尋找最大質(zhì)數(shù)時(shí)max_prime中遍歷時(shí)應(yīng)該從后往前遍歷,此時(shí)遇到
的第一個(gè)質(zhì)數(shù)就是所求最大質(zhì)數(shù),而不必從前遍歷做無用功。
修改代碼如下:
"""
def?prime(x):
for?i?in?range(2,x//2+1):
if?x%i==0:
return?False
return?True
def?max_prime(x):
for?i?in?range(x,1,-1):?#?x+1以包含x本身
if?prime(i):
return?i
print(max_prime(1000))
python中沒有函數(shù)重載。
為了考慮為什么python不提供函數(shù)重載,首先我們要研究為什么需要提供函數(shù)重載。
函數(shù)重載主要是為了解決兩個(gè)問題:
可變參數(shù)類型。
可變參數(shù)個(gè)數(shù)。
另外,一個(gè)基本的設(shè)計(jì)原則是,僅僅當(dāng)兩個(gè)函數(shù)除了參數(shù)類型和參數(shù)個(gè)數(shù)不同以外,其功能是完全相同的,此時(shí)才使用函數(shù)重載,如果兩個(gè)函數(shù)的功能其實(shí)不同,那么不應(yīng)當(dāng)使用重載,而應(yīng)當(dāng)使用一個(gè)名字不同的函數(shù)。
那么對(duì)于情況 1 ,函數(shù)功能相同,但是參數(shù)類型不同,python 如何處理?
答案是根本不需要處理,因?yàn)?python 可以接受任何類型的參數(shù),如果函數(shù)的功能相同,那么不同的參數(shù)類型在 python 中很可能是相同的代碼,沒有必要做成兩個(gè)不同函數(shù)。
那么對(duì)于情況 2 ,函數(shù)功能相同,但參數(shù)個(gè)數(shù)不同,python 如何處理?
答案就是缺省參數(shù)。對(duì)那些缺少的參數(shù)設(shè)定為缺省參數(shù)即可解決問題。因?yàn)槟慵僭O(shè)函數(shù)功能相同,那么那些缺少的參數(shù)終歸是需要用的。好了,鑒于情況 1 跟 情況 2 都有了解決方案,python 自然就不需要函數(shù)重載了。
更多Python知識(shí)請(qǐng)關(guān)注Python自學(xué)網(wǎng)