注明:本系列課程專為全國計算機等級考試二級 Python 語言程序設計考試服務
目錄
1.python 簡介
2.python 解釋器
3.python基礎
1.數(shù)據(jù)類型,變量,字符串,編碼
2.list,tuple,set,dict
3.條件判斷,循環(huán)
4.函數(shù)及參數(shù),遞歸函數(shù),包函數(shù),匿名函數(shù),偏函數(shù)
5.切片,迭代,列表生成式,生成器
6.函數(shù)式編程,高階函數(shù),map,reduce,filter,zip,sorted
7.裝飾器,模塊
8.錯誤處理,調試,測試
9.IO文件讀寫
10.序列化,進程,多線程
11.正則表達式, re模塊
12.常用內(nèi)建模塊
13.常用python web框架
到目前為止,整個全國計算機等級考試二級 Python 語言程序設計考試教材的系統(tǒng)學習到了一個段落,如果大家還想繼續(xù)跟著我一起學習Python,可以繼續(xù)關注我的另外一套更系統(tǒng)深入的Python學習筆記->Python學習筆記。
在這里,我結合前面學習的知識,做一個系統(tǒng)的總結。
1.python 簡介
1.python被稱為膠水語言,意思是無所不能,哪里都可以使用python來開發(fā),由此可見python現(xiàn)在是非?;鸬?,特別是現(xiàn)在人工智能,機器學習比較火的時候,好都人都在學習python.
2.Python是著名的“龜叔”Guido van Rossum在1989年圣誕節(jié)期間,為了打發(fā)無聊的圣誕節(jié)而編寫的一個編程語言。目前有python2.* 和python3.*在工業(yè)界使用,
如果你現(xiàn)在開始學習python,建議從pyton3.*開始學,因python2.*從2020年,開始不在提供支持和更新.
2.python 解釋器
以.py為擴展名的文本文件,要運行代碼,就需要Python解釋器去執(zhí)行.py文件。
目前開發(fā)的IDE有:pychart,sublime text2/sublime text3
3.python基礎
1.數(shù)據(jù)類型,變量,字符串,編碼
int,double,str,bool,None,常量
a=2
b=2.12
c='test'
d= True
e=None
pai=3.1415927
需要注意的事python的 數(shù)據(jù)類型不用定義,解釋器會根據(jù)數(shù)據(jù)的類型自動匹配數(shù)據(jù)類型;
python支持多種數(shù)據(jù)類型,在計算機內(nèi)部,可以把任何數(shù)據(jù)都看成一個“對象”.
ord('A')#print65
char(66) #print B
2.list,tuple,set,dict,
直接上例子吧,最直觀:
-------------list--------------------
list0=[]
list1=[1,2,3,4]
list2=['a','b','c']
list3=[1,2.12,'a',list1]
type(list3)
print(list3[0] #index get value
list4 = list1 + list2
list5 = list1 * 3
len(list5)
for i in list5:
print(i)
list6 = 2 in list5
del list6[1]
del list6
max(list6)
min(list6)
list5[1:4]
list5[1:4:2]
list5[2:]
list5[:4]
list5=['a','b']#updated value
list5.append(),list5.count('a'),list5.extend(val),list5.index(obj),list.instert(index,obj),
list5.pop('a')
list.remove(valu)
del list['valu']
----------tuple-------------------------
tuple1=()
tuple2=(1,2,3)
tuple function:索引,切片,連接,復制,對內(nèi)部元素循環(huán),查找某元素是否存在,刪除元組,還回最大最小值 參考list,不一一列出
元組和列表相互轉化
tuple1=(1,2,3)
list1=['a','b','c']
tuple2=tuple(list1)
list2=list(tuple1)
list3 = [n+m for n in 'abc' for m in 'ABC']
元組打包解包:
tuple4=1,2,3,4
a,b,c,d=tuple4
----------------------dict funciton----------------------------------------
dict1={}
dict2={'a':1,'b':2,'c':3}
dict3=dict(['a',10],['b',20])
dict4 = dict((('a',10),('b',20)))
dict5=dict(a=10,b=20)
dict6=[1:10,2:20]
dict1['a']
dict7 = 'a' in dict1 #true or false
dict1.keys()
dict1.values()
dict1.items()
dict1.clear()
dict1.get(key,default=None)
dict1.pop(key)
dict1.setdefault(key,default=none)
dict1.update(newdict)
dict8=copy.deepcopy(dict2)
-------------------------set ----------------------------------------------------------------------
不重復的無序集{},不能使用列表,字典當做元素
set0=set{}
set1 ={1,2,3,4,5}
set2={1,2.33,'test',(1,2)}
set1.add(x)
set9 =set1.updte(set2)
set1.pop()#執(zhí)行一次按順序刪除一個元素
set1.remove(x)
set1.discard(x)
set1.clear()
set1.intersection(set2)
set1.untion(set2)
set1.diffrence(set2)
set1.issubset(set2)
3.條件判斷,循環(huán)
if a<10:
elif a<20:
else:
for x in list1:
4.函數(shù)及參數(shù),遞歸函數(shù),包函數(shù),匿名函數(shù),偏函數(shù)
def def1():
def def2(a)
def def3(a,b=2,c='shenzhen')
def def4(a,*b,**kw):
def def5(a,b,*,city,name)#命名關鍵字參數(shù),必須用*分隔,后面的事命名關鍵字參數(shù)
遞歸函數(shù):函數(shù)內(nèi)部調用其他函數(shù),調用自己也是;
匿名函數(shù):f1= lambda x:x+x
5.切片,迭代,列表生成式,生成器
list1=[1,2,3,4,5,6]
list2=list1[1:4]
迭代:可以遍歷的集合稱之為迭代;
for k in dict:
print(k)
python內(nèi)置的額函數(shù)enumerate可以將list變成索引-元素對,這樣可以使用for 循環(huán)迭代;
for x,y in enumerate(['a','b','c']):
print(x,y)
list1=[x for x in range(10)]
生成器:i = (x for x in range(10)) #generator yioid
next(i)
凡是可作用于for循環(huán)的對象都是Iterable類型;
凡是可作用于next()函數(shù)的對象都是Iterator類型,它們表示一個惰性計算的序列;
集合數(shù)據(jù)類型如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函數(shù)獲得一個Iterator對象。
6.函數(shù)式編程,高階函數(shù),map,reduce,filter,zip,sorted
函數(shù)式編程:就是面向過程的編程,將任務分成若干個小任務,每個小任務由一個函數(shù)來完成功能;
高階函數(shù):允許接受函數(shù)為為參數(shù)的函數(shù)稱為高階函數(shù);
map:接受一個函數(shù),一個序列,將傳入的函數(shù)參數(shù)作用于序列每一個元素上并還回一個list
map(fn[1,2,3,4]
reduce:將函數(shù)依次作用于連續(xù)的每2個元素上并還回一個結果和;
reduce(fn,[1,2,3,4]
filter():接受一個函數(shù),一個序列,將傳入的函數(shù)參數(shù)作用于序列每一個元素上并根據(jù)還回的ture or false,決定是否丟棄對象到還回結果集
sorted():高級函數(shù),接受函數(shù)和序列,函數(shù)作用于每一個序列元素上;
7.裝飾器,模塊
def now():
f = now
f.__name__ #now
裝飾器 在代碼運行期間動態(tài)增加功能的方式,稱之為“裝飾器”(Decorator)。
decorator就是一個返回函數(shù)的高階函數(shù)
8.錯誤處理,調試,測試
錯誤處理
try:
print('try...')
except ZeroDivisionError as e: #更多錯誤處理類可以網(wǎng)上查詢:ioerror,valueerror,
print('except::',e)
finally:
print('finllay...')
調試
1.是用print()把可能有問題的變量打印出來看看;
2.凡是用print()來輔助查看的地方,都可以用斷言(assert)來替代;如果斷言失敗,assert語句本身就會拋出AssertionError:
3.把print()替換為logging是第3種方式,和assert比,logging不會拋出錯誤,而且可以輸出到文件 logging.info('n = %d' % n)
import logging
logging.basicConfig(level=logging.INFO)
logging的好處,它允許你指定記錄信息的級別,有debug,info,warning,error等幾個級別,當我們指定 level=INFO時,logging.debug就不起作用了
第4種方式是啟動Python的調試器pdb,讓程序以單步方式運行,可以隨時查看運行狀態(tài)
目前比較好的Python IDE有PyCharm,不過好像要收費,但網(wǎng)上可以找到注冊碼~~
講了這么多調試方法,不過雖然用IDE調試起來比較方便,但是最后你會發(fā)現(xiàn),logging才是終極武器。
測試:
單元測試是用來對一個模塊、一個函數(shù)或者一個類來進行正確性檢驗的測試工作
9.IO文件讀寫
f = open('/Users/michael/test.txt', 'r') #'r'表示
f.read()
f.close()
readlines()一次讀取所有內(nèi)容并按行返回list
readline()可以每次讀取一行內(nèi)容
read(size)方法,每次最多讀取size個字節(jié)的內(nèi)容
read()會一次性讀取文件的全部內(nèi)容
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'刪掉
要讀取二進制文件,比如圖片、視頻等等,用'rb'模式打開文件即可,'w'寫文件
f = open('/Users/michael/test.jpg', 'rb')
f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
10.序列化,進程,多線程
Python語言特定的序列化模塊是pickle,但如果要把序列化搞得更通用、更符合Web標準,就可以使用json模塊。
json模塊的dumps()和loads()函數(shù)是定義得非常好的接口的典范.
pickling:
pickle.dumps(d)# str to bites
pickle.loads()方法反序列化出對象 @ bites to str
要把JSON反序列化為Python對象,用loads()或者對應的load()方法
print(json.dumps(s, default=lambda obj: obj.__dict__)) #把任意class的實例變?yōu)閐ict
把變量從內(nèi)存中變成可存儲或傳輸?shù)倪^程稱之為序列化,在Python中叫pickling
序列化之后,就可以把序列化后的內(nèi)容寫入磁盤,或者通過網(wǎng)絡傳輸?shù)絼e的機器上。
unpickling:
反過來,把變量內(nèi)容從序列化的對象重新讀到內(nèi)存里稱之為反序列化,即unpickling。
import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
pickle.dumps()方法把任意對象序列化成一個bytes,然后,就可以把這個bytes寫入文件。或者用另一個方法pickle.dump()直接把對象序列化后寫入一個file-like Object
>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()
多進程:
Python既支持多進程,又支持多線程
線程是最小的執(zhí)行單元,而進程由至少一個線程組成。如何調度進程和線程,完全由操作系統(tǒng)決定,程序自己不能決定什么時候執(zhí)行,執(zhí)行多長時間
11.正則表達式, re模塊
[0-9a-zA-Z\_]可以匹配一個數(shù)字、字母或者下劃線;
? [0-9a-zA-Z\_]+可以匹配至少由一個數(shù)字、字母或者下劃線組成的字符串,比如'a100','0_Z','Py3000'等等;
[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下劃線開頭,后接任意個由一個數(shù)字、字母或者下劃線組成的字符串,也就是Python合法的變量;
? [a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精確地限制了變量的長度是1-20個字符(前面1個字符+后面最多19個字符)
re.split(r'\s+', 'a b c')
正則表達式非常強大,在這里只是提了一點點,具體的可以網(wǎng)上查詢。
12.常用內(nèi)建模塊
1.datetime是Python處理日期和時間的標準庫
1.獲取當前日期和時間
2.獲取指定日期和時間
3.datetime轉換為timestamp
4.timestamp轉換為datetime
5.str轉換為datetime
6.datetime轉換為str
7.datetime加減
8.本地時間轉換為UTC時間
9.時區(qū)轉換
from datetime import datetime
now = datetime.now() # 獲取當前datetime
datetime(2015, 4, 19, 12, 20)
cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
print(now.strftime('%a, %b %d %H:%M'))
now + timedelta(hours=10)
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
2.urllib
3.HTMLparser
4.XML
5.base64
13.常用python web框架
flask(小型),用過,適用于小型項目;
django(大型):
web這塊涉及內(nèi)容較多,具體的大家可以關注我的Python學習筆記,這里不一一說明.
|