一內(nèi)建屬性和內(nèi)建函數(shù)
1

子類沒有實(shí)現(xiàn)__init__方法時,默認(rèn)自動調(diào)用父類的。如定義__init__方法時,需自己手動調(diào)用父類的__init__方法



當(dāng)t.b執(zhí)行時,會調(diào)用Person類中定義的__getattribute__方法,但是在這個方法的執(zhí)行過程中,if條件不滿足,所以 程序執(zhí)行else里面的代碼,即return self.test問題就在這,因?yàn)閞eturn需要把self.test的值返回,那么首先要獲取self.test的值,因?yàn)閟elf此時就是t這個對象,所以self.test就是t.test此時要獲取t這個對象的test屬性,那么就會跳轉(zhuǎn)到__getattribute__方法去執(zhí)行,即此時產(chǎn)生了遞歸調(diào)用,由于這個遞歸過程中 沒有判斷什么時候推出,所以這個程序會永無休止的運(yùn)行下去,又因?yàn)槊看握{(diào)用函數(shù),就需要保存一些數(shù)據(jù),那么隨著調(diào)用的次數(shù)越來越多,最終內(nèi)存吃光,所以程序 崩潰
注意:不要在__getattribute__方法中調(diào)用self.xxx
二內(nèi)建函數(shù)
Build-in Function,啟動python解釋器,輸入dir(__builtins__),可以看到很多python解釋器啟動后默認(rèn)加載的屬性和函數(shù),這些函數(shù)稱之為內(nèi)建函數(shù)
help(function),查看如何使用
1range
range(a)從0開始計數(shù),到a-1。例如a等于5,計數(shù)為0,1,2,3,4
range(a,b,c)從a開始計數(shù)到b-1結(jié)束,每次跳躍c。例如range(1,11,2)為1,3,5,7,9
通過range函數(shù)可生成一個列表:


2 map函數(shù)
map函數(shù)會根據(jù)提供的函數(shù)對指定序列做映射
map(...)
? ? ? ? ? ? ?map(function,sequence[,sequence,...])->list
funtion是一個函數(shù)
sequence是一個或多個序列,取決于function需要幾個參數(shù)
返回值是一個map

3 filter函數(shù)
filter函數(shù)會對指定序列執(zhí)行過濾操作
filter()

function:可以接受一個參數(shù),返回布爾值True或False
·sequence:序列可以是str,tuple,list
下面是兩個例子,第一個是選出列表中的奇數(shù),第二個是選出列表中平方根為整數(shù)的數(shù)。

4 reduce函數(shù)
reduce函數(shù)會對參數(shù)序列中元素進(jìn)行累積。
函數(shù)將一個數(shù)據(jù)集合(鏈表,元組等)中的所有數(shù)據(jù)進(jìn)行下列操作:用傳給reduce中的函數(shù) function(有兩個參數(shù))先對集合中的第 1、2 個元素進(jìn)行操作,得到的結(jié)果再與第三個數(shù)據(jù)用 function 函數(shù)運(yùn)算,最后得到一個結(jié)果。
reduce() 函數(shù)語法:
reduce(function,iterable[,initializer])
function -- 函數(shù),有兩個參數(shù)
iterable -- 可迭代對象
initializer -- 可選,初始參數(shù)
在Python3里,reduce函數(shù)已經(jīng)被從全局名字空間里移除了,它現(xiàn)在被放置在fucntools模塊里用的話要先引入:from functools import reduce
例子:

5 sorted函數(shù)
sorted(...)
sorted(iterable, key=None, reverse=False) --> new sorted list
將一個可迭代的對象進(jìn)行排序,不設(shè)定reverse或reverse等于false時按從小到大排序,排序后生產(chǎn)一個新列表,將reverse設(shè)定為1后,按從大到小的順序排序。
例子:

三 functools
1functools
functools是python2.5被引人的,一些工具函數(shù)放在此包里。
在python3.5中

python中增加了很多工具函數(shù),做業(yè)務(wù)開發(fā)的時候大多情況用不到,這里介紹使用頻率比較高的2個函數(shù)
2 partial 函數(shù)(偏函數(shù))
把一個函數(shù)的某些參數(shù)設(shè)置默認(rèn)值,返回一個新的函數(shù),調(diào)用這個新函數(shù)會更簡單。

3 wraps 函數(shù)
使用裝飾器時,有一些細(xì)節(jié)需要被注意。例如,被裝飾后的函數(shù)其實(shí)已經(jīng)是另外一個函數(shù)了(函數(shù)名等函數(shù)屬性會發(fā)生改變)。
添加后由于函數(shù)名和函數(shù)的doc發(fā)生了改變,對測試結(jié)果有一些影響,例如:

所以,Python的functools包中提供了一個叫wraps的裝飾器來消除這樣的副作用。例如:

四 模塊進(jìn)階
Python有一套很有用的標(biāo)準(zhǔn)庫(standard library)。標(biāo)準(zhǔn)庫會隨著Python解釋器,一起安裝在你的電腦中的。 它是Python的一個組成部分。這些標(biāo)準(zhǔn)庫是Python為你準(zhǔn)備好的利器,可以讓編程事半功倍。
1 常用標(biāo)準(zhǔn)庫

2 time
1.help(time)之后可以知道time有2種時間表示形式:
1、時間戳表示法,即以整型或浮點(diǎn)型表示的是一個以秒為單位的時間間隔。這個時間的基礎(chǔ)值是從1970年的1月1號零點(diǎn)開始算起。
2、元組格式表示法,即一種Python的數(shù)據(jù)結(jié)構(gòu)表示。這個元組有9個整型內(nèi)容。分別表示不同的時間含義。
2、名詞解釋:
UTC(Coordinated Universal Time,世界協(xié)調(diào)時)亦即格林威治天文時間,世界標(biāo)準(zhǔn)時間。在中國為UTC+8。
DST(Daylight Saving Time)即夏令時。是一種為節(jié)約能源而人為規(guī)定地方時間的制度,一般在天亮早的夏季人為將時間提前一小時。
3、包含的變量:
timezone --當(dāng)?shù)貢r間與標(biāo)準(zhǔn)UTC時間的誤差,以秒計
altzone --當(dāng)?shù)叵牧顣r時間與標(biāo)準(zhǔn)UTC時間的誤差,以秒計
daylight --當(dāng)?shù)貢r間是否反映夏令時,默認(rèn)為0
zname --關(guān)于(標(biāo)準(zhǔn)時區(qū)名稱,夏令時時區(qū)名稱)的元組
4、包含的函數(shù):
time() --返回當(dāng)前時間戳,浮點(diǎn)數(shù)形式。不接受參數(shù)
clock() --返回當(dāng)前程序的cpu執(zhí)行時間。unix系統(tǒng)始終返回全部運(yùn)行時間;而windows從第二次開始都是以第一次調(diào)用此函數(shù)時的時間戳作為基準(zhǔn),而不是程序開始時間為基準(zhǔn)。不接受參數(shù)。
sleep() --延遲一個時間段,接受整型、浮點(diǎn)型。
gmtime() --將時間戳轉(zhuǎn)換為UTC時間元組格式。接受一個浮點(diǎn)型時間戳參數(shù),其默認(rèn)值為當(dāng)前時間戳。
localtime() --將時間戳轉(zhuǎn)換為本地時間元組格式。接受一個浮點(diǎn)型時間戳參數(shù),其默認(rèn)值為當(dāng)前時間戳。
asctime() --將時間元組格式轉(zhuǎn)換為字符串形式。接受一個時間元組,其默認(rèn)值為localtime()返回值
ctime() --將時間戳轉(zhuǎn)換為字符串。接受一個時間戳,其默認(rèn)值為當(dāng)前時間戳。等價于asctime(localtime(seconds))
mktime() --將本地時間元組轉(zhuǎn)換為時間戳。接受一個時間元組,必選。
strftime() --將時間元組以指定的格式轉(zhuǎn)換為字符串形式。接受字符串格式化串、時間元組。時間元組為可選,默認(rèn)為localtime()
strptime() --將指定格式的時間字符串解析為時間元組,strftime()的逆向過程。接受字符串,時間格式2個參數(shù),都是必選。
tzset() --改變本地時區(qū)。
5、時間字符串支持的格式符號:
格式含義備注
%a本地(locale)簡化星期名稱
%A本地完整星期名稱
%b本地簡化月份名稱
%B本地完整月份名稱
%c本地相應(yīng)的日期和時間表示
%d一個月中的第幾天(01 - 31)
%H一天中的第幾個小時(24小時制,00 - 23)
%I第幾個小時(12小時制,01 - 12)
%j一年中的第幾天(001 - 366)
%m月份(01 - 12)
%M分鐘數(shù)(00 - 59)
%p本地am或者pm的相應(yīng)符
%S秒(01 - 61)
%U一年中的星期數(shù)。(00 - 53星期天是一個星期的開始。)第一個星期天之前的所有天數(shù)都放在第0周。
%w一個星期中的第幾天(0 - 6,0是星期天)
%W和%U基本相同,不同的是%W以星期一為一個星期的開始。
%x本地相應(yīng)日期
%X本地相應(yīng)時間
%y去掉世紀(jì)的年份(00 - 99)
%Y完整的年份
%Z時區(qū)的名字(如果不存在為空字符)
%%‘%’字符
3 hashlib
importhashlib
m = hashlib.md5()#創(chuàng)建hash對象,md5:(message-Digest Algorithm 5)消息摘要算法,得出一個128位的密文
print m#
m.update('test')#更新哈希對象以字符串參數(shù)
print m.hexdigest()#返回十六進(jìn)制數(shù)字字符串

4?常用擴(kuò)展庫

5?SimpleHTTPServer
就可以運(yùn)行起來靜態(tài)服務(wù)。平時用它預(yù)覽和下載文件太方便了。
在終端中輸入命令:
python -m http.server PORT

6?matplotlib
