Python開發(fā)中的Nonetype類型詳解
問題
今天解決一位網(wǎng)友的問題,內(nèi)容如下:請教代碼問題
def calc_prod(lst): def ff(): print map(lambda x:x*x,lst) return ff f = calc_prod([1, 2, 3, 4]) print f()
結(jié)果:
[1, 4, 9, 16]
None
這樣寫輸出為什么有 None?針對這一問題,自己在 IDEA 中進(jìn)行了調(diào)試,發(fā)現(xiàn)果然多輸出了一行 None。出現(xiàn)這一現(xiàn)象確實很令人費解。
自己寫了簡單的測試語句,如下:
b = print(5) print(b)
通過斷點調(diào)試,內(nèi)容如下:
發(fā)現(xiàn) b 的值確實為 None,且其類型為 NoneType。
什么是 Nonetype?
要理解這個,首先要理解Python對象,python對象具有三個特性:身份、類型、值。
這三個特性在對象創(chuàng)建時被賦值。只有值可以改變,其他只讀。類型本身也是對象。
Null與None是Python的特殊類型,Null對象或者是None Type,它只有一個值None。
它不支持任何運算也沒有任何內(nèi)建方法。None和任何其他的數(shù)據(jù)類型比較永遠(yuǎn)返回False。
None有自己的數(shù)據(jù)類型NoneType。你可以將None復(fù)制給任何變量,但是你不能創(chuàng)建其他NoneType對象。
一句話總結(jié):Null對象是python對象,又叫做NoneType,None是這個對象的值。
看過了NoneType的解釋,之所以出現(xiàn)None就很好理解了。
NoneType之所以出現(xiàn)是因為定義了一個變量或函數(shù),卻沒有值或者返回值,因此會默認(rèn)值為None。
而在上面的程序中,雖然高階函數(shù) calc_prod()有返回值 ff,但是 ff()卻沒有返回值,則傳遞到外層函數(shù) calc_prod()同樣沒有返回值,故輸出了None。 若代碼改為如下所示,則可以完美實現(xiàn)列表的輸出。
def calc_prod(lst): def ff(): return map(lambda x:x*x,lst) return ff f = calc_prod([1, 2, 3, 4]) print(f())
注意:一個實例的私有屬性就是以__開頭的屬性,無法被外部訪問。
這些屬性定義有什么用?
雖然私有屬性無法從外部訪問,但是,從類的內(nèi)部是可以訪問的。除了可以定義實例的屬性外,還可以定義實例的方法。
實例的方法就是在類中定義的函數(shù),它的第一個參數(shù)永遠(yuǎn)是 self,指向調(diào)用該方法的實例本身,其他參數(shù)和一個普通函數(shù)是完全一樣的。
class Person(object): def __init__(self, name): self.__name = name def get_name(self): return self.__name
get_name(self) 就是一個實例方法,它的第一個參數(shù)是 self。__init__(self, name)其實也可看做是一個特殊的實例方法。
調(diào)用實例方法必須在實例上調(diào)用:
p1 = Person('Bob') print p1.get_name() # self不需要顯式傳入 # => Bob
在實例方法內(nèi)部,可以訪問所有實例屬性,這樣,如果外部需要訪問私有屬性,可以通過方法調(diào)用獲得,這種數(shù)據(jù)封裝的形式除了能保護(hù)內(nèi)部數(shù)據(jù)一致性外,還可以簡化外部調(diào)用的難度。
請給 Person 類增加一個私有屬性 __score,表示分?jǐn)?shù),再增加一個實例方法 get_grade(),能根據(jù) __score 的值分別返回 A-優(yōu)秀, B-及格, C-不及格三檔。
注意 get_grade()是實例方法,第一個參數(shù)為 self。
參考代碼:
class Person(object): def __init__(self, name, score): self.__name = name self.__score = score def get_grade(self): if self.__score >= 80: return 'A' if self.__score >= 60: return 'B' return 'C' p1 = Person('Bob', 90) p2 = Person('Alice', 65) p3 = Person('Tim', 48) print p1.get_grade() print p2.get_grade() print p3.get_grade()
運行結(jié)果
到此這篇關(guān)于Python開發(fā)中的Nonetype類型詳解的文章就介紹到這了,更多相關(guān)Python中的Nonetype內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章

Python PIL讀取的圖像發(fā)生自動旋轉(zhuǎn)的實現(xiàn)方法

python中__slots__節(jié)約內(nèi)存的具體做法

Python中生成一個指定長度的隨機(jī)字符串實現(xiàn)示例