python的類和函數(shù)的區(qū)別主要在于類可以有變量和各種方法,而函數(shù)沒有。函數(shù)只能被運(yùn)行,返回或者不返回值都可以。
成都創(chuàng)新互聯(lián)長期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為同心企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),同心網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
模塊如果沒有把類聲明為私有,其他模塊就可以使用這個(gè)類,方法是import這個(gè)模塊,然后用"模塊名.類名"來調(diào)用。
method
A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).
中文大概就是method相當(dāng)于類函數(shù),其第一個(gè)參數(shù)是self
這是官方文檔里的。要多看文檔啊
對(duì)的 python3.1和python2.x有一些區(qū)別的
最主要的,就是你發(fā)現(xiàn)的
print()函數(shù)
input()函數(shù),相當(dāng)于python2.x里的raw_input()
此外還有 range()函數(shù)相當(dāng)于python2.x里的xrange()
其實(shí)并沒有太多區(qū)別的
不過如果你剛接觸還是建議直接看python3的教程
一、主體不同
1、類:是面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)現(xiàn)信息封裝的基礎(chǔ)。
2、函數(shù):是指一段在一起的、可以做某一件事兒的程序。也叫做子程序、(OOP中)方法。
二、特點(diǎn)不同
1、類:是一種用戶定義的引用數(shù)據(jù)類型,也稱類類型。每個(gè)類包含數(shù)據(jù)說明和一組操作數(shù)據(jù)或傳遞消息的函數(shù)。類的實(shí)例稱為對(duì)象。
2、函數(shù):分為全局函數(shù)、全局靜態(tài)函數(shù);在類中還可以定義構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、成員函數(shù)、友元函數(shù)、運(yùn)算符重載函數(shù)、內(nèi)聯(lián)函數(shù)等。
三、規(guī)則不同
1、類:實(shí)質(zhì)是一種引用數(shù)據(jù)類型,類似于byte、short、int(char)、long、float、double等基本數(shù)據(jù)類型,不同的是它是一種復(fù)雜的數(shù)據(jù)類型。
2、函數(shù):函數(shù)必須聲明后才可以被調(diào)用。調(diào)用格式為:函數(shù)名(實(shí)參)調(diào)用時(shí)函數(shù)名后的小括號(hào)中的實(shí)參必須和聲明函數(shù)時(shí)的函數(shù)括號(hào)中的形參個(gè)數(shù)相同。
參考資料來源:百度百科-函數(shù)
參考資料來源:百度百科-類
python中函數(shù)和方法的區(qū)別:
首先,從分類的角度來分析。
(1)函數(shù)的分類:
內(nèi)置函數(shù):python內(nèi)嵌的一些函數(shù)。
匿名函數(shù):一行代碼實(shí)現(xiàn)一個(gè)函數(shù)功能。
遞歸函數(shù)
自定義函數(shù):根據(jù)自己的需求,來進(jìn)行定義函數(shù)。
(2)方法的分類:
普通方法:直接用self調(diào)用的方法。
私有方法:__函數(shù)名,只能在類中被調(diào)用的方法。
屬性方法:@property,將方法偽裝成為屬性,讓代碼看起來更合理。
特殊方法(雙下劃線方法):以__init__為例,是用來封裝實(shí)例化對(duì)象的屬性,只要是實(shí)例化對(duì)象就一定會(huì)執(zhí)行__init方法,如果對(duì)象子類中沒有則會(huì)尋找父類(超類),如果父類(超類)也沒有,則直接繼承object(python 3.x)類,執(zhí)行類中的__init__方法。
類方法:通過類名的調(diào)用去操作公共模板中的屬性和方法。
靜態(tài)方法:不用傳入類空間、對(duì)象的方法, 作用是保證代碼的一致性,規(guī)范性,可以完全獨(dú)立類外的一個(gè)方法,但是為了代碼的一致性統(tǒng)一的放到某個(gè)模塊(py文件)中。
其次,從作用域的角度來分析:
(1)函數(shù)作用域:從函數(shù)調(diào)用開始至函數(shù)執(zhí)行完成,返回給調(diào)用者后,在執(zhí)行過程中開辟的空間會(huì)自動(dòng)釋放,也就是說函數(shù)執(zhí)行完成后,函數(shù)體內(nèi)部通過賦值等方式修改變量的值不會(huì)保留,會(huì)隨著返回給調(diào)用者后,開辟的空間會(huì)自動(dòng)釋放。
(2)方法作用域:通過實(shí)例化的對(duì)象進(jìn)行方法的調(diào)用,調(diào)用后開辟的空間不會(huì)釋放,也就是說調(diào)用方法中對(duì)變量的修改值會(huì)一直保留。
最后,調(diào)用的方式不同。
(1)函數(shù):通過“函數(shù)名()”的方式進(jìn)行調(diào)用。
(2)方法:通過“對(duì)象.方法名”的方式進(jìn)行調(diào)用。
class Foo(object): ? ?def func(self): ? ? ? ?pass#實(shí)例化obj = Foo()# 執(zhí)行方式一:調(diào)用的func是方法obj.func() #func 方法# 執(zhí)行方式二:調(diào)用的func是函數(shù)Foo.func(123) # 函數(shù)
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave','B', 10)]
print(sorted(students,key=lambda s: s[0]))
key指定一個(gè)接收一個(gè)參數(shù)的函數(shù),這個(gè)函數(shù)用于從每個(gè)元素中提取一個(gè)用于比較的關(guān)鍵字。默認(rèn)值為None
例子
為啥會(huì)這樣呢?默認(rèn)不是應(yīng)該按升序排列。
仔細(xì)看 我們lambda返回的是一個(gè)元祖,(布爾,布爾,絕對(duì)值)
由于key函數(shù)主要作用是根據(jù)我們自己的要求,取出指定的元素來進(jìn)行排序,不過我們現(xiàn)在返回的是一個(gè)元祖,所以我們首先按布爾進(jìn)行排序,當(dāng)有相同的我們?cè)谕竺嬉粋€(gè)元素找,然后進(jìn)行排序,所以就變成這樣了。