1. 程式人生 > >第12章:結語

第12章:結語

註明:本系列課程專為全國計算機等級考試二級 Python 語言程式設計考試服務

目錄

1.python 簡介

2.python 直譯器

3.python基礎

1.資料型別,變數,字串,編碼

2.list,tuple,set,dict

3.條件判斷,迴圈

4.函式及引數,遞迴函式,包函式,匿名函式,偏函式

5.切片,迭代,列表生成式,生成器

6.函數語言程式設計,高階函式,map,reduce,filter,zip,sorted

7.裝飾器,模組 

8.錯誤處理,除錯,測試

9.IO檔案讀寫

10.序列化,程序,多執行緒

11.正則表示式, re模組

12.常用內建模組

13.常用python web框架


到目前為止,整個全國計算機等級考試二級 Python 語言程式設計考試教材的系統學習到了一個段落,如果大家還想繼續跟著我一起學習Python,可以繼續關注我的另外一套更系統深入的Python學習筆記->Python學習筆記

在這裡,我結合前面學習的知識,做一個系統的總結。

1.python 簡介

1.python被稱為膠水語言,意思是無所不能,哪裡都可以使用python來開發,由此可見python現在是非常火的,特別是現在人工智慧,機器學習比較火的時候,好都人都在學習python.

2.Python是著名的“龜叔”Guido van Rossum在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一個程式語言。目前有python2.* 和python3.*在工業界使用,

如果你現在開始學習python,建議從pyton3.*開始學,因python2.*從2020年,開始不在提供支援和更新.

2.python 直譯器

        以.py為副檔名的文字檔案,要執行程式碼,就需要Python直譯器去執行.py檔案。

       目前開發的IDE有:pychart,sublime text2/sublime text3

3.python基礎

1.資料型別,變數,字串,編碼

    int,double,str,bool,None,常量

   a=2

   b=2.12

   c='test'

   d= True

   e=None

   pai=3.1415927

    需要注意的事python的 資料型別不用定義,直譯器會根據資料的型別自動匹配資料型別;

     python支援多種資料型別,在計算機內部,可以把任何資料都看成一個“物件”.

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:索引,切片,連線,複製,對內部元素迴圈,查詢某元素是否存在,刪除元組,還回最大最小值 參考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()#執行一次按順序刪除一個元素

set1.remove(x)

set1.discard(x)

set1.clear()

set1.intersection(set2)

set1.untion(set2)

set1.diffrence(set2)

set1.issubset(set2)


3.條件判斷,迴圈

    if  a<10:

    elif a<20:

   else:

   for x in list1:


4.函式及引數,遞迴函式,包函式,匿名函式,偏函式

  def def1():

  def def2(a)

  def def3(a,b=2,c='shenzhen')

def def4(a,*b,**kw):

def def5(a,b,*,city,name)#命名關鍵字引數,必須用*分隔,後面的事命名關鍵字引數

遞迴函式:函式內部呼叫其他函式,呼叫自己也是;

匿名函式:f1= lambda x:x+x

5.切片,迭代,列表生成式,生成器

 list1=[1,2,3,4,5,6]

list2=list1[1:4]

迭代:可以遍歷的集合稱之為迭代;

for k in dict:

    print(k)

python內建的額函式enumerate可以將list變成索引-元素對,這樣可以使用for 迴圈迭代;

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迴圈的物件都是Iterable型別;
  凡是可作用於next()函式的物件都是Iterator型別,它們表示一個惰性計算的序列;
  集合資料型別如list、dict、str等是Iterable但不是Iterator,不過可以通過iter()函式獲得一個Iterator物件。

 

6.函數語言程式設計,高階函式,map,reduce,filter,zip,sorted

  函數語言程式設計:就是面向過程的程式設計,將任務分成若干個小任務,每個小任務由一個函式來完成功能;

  高階函式:允許接受函式為為引數的函式稱為高階函式;

  map:接受一個函式,一個序列,將傳入的函式引數作用於序列每一個元素上並還回一個list

  map(fn[1,2,3,4]

  reduce:將函式依次作用於連續的每2個元素上並還回一個結果和;

  reduce(fn,[1,2,3,4]

  filter():接受一個函式,一個序列,將傳入的函式引數作用於序列每一個元素上並根據還回的ture or false,決定是否丟棄物件到還回結果集

  sorted():高階函式,接受函式和序列,函式作用於每一個序列元素上;

7.裝飾器,模組 

    def now():
    f = now
    f.__name__ #now

  裝飾器 在程式碼執行期間動態增加功能的方式,稱之為“裝飾器”(Decorator)。  

    decorator就是一個返回函式的高階函式


8.錯誤處理,除錯,測試

    錯誤處理

        try:

       print('try...')

   except ZeroDivisionError as e:  #更多錯誤處理類可以網上查詢: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,讓程式以單步方式執行,可以隨時檢視執行狀態

   目前比較好的Python IDE有PyCharm,不過好像要收費,但網上可以找到註冊碼~~

         講了這麼多除錯方法,不過雖然用IDE除錯起來比較方便,但是最後你會發現,logging才是終極武器。

 

測試:

  單元測試是用來對一個模組、一個函式或者一個類來進行正確性檢驗的測試工作


9.IO檔案讀寫

  f = open('/Users/michael/test.txt', 'r') #'r'表示

  f.read()

       f.close()

readlines()一次讀取所有內容並按行返回list
readline()可以每次讀取一行內容
read(size)方法,每次最多讀取size個位元組的內容
read()會一次性讀取檔案的全部內容

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()函式是定義得非常好的介面的典範.

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的例項變為dict

把變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling
序列化之後,就可以把序列化後的內容寫入磁碟,或者通過網路傳輸到別的機器上。

unpickling:
反過來,把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即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既支援多程序,又支援多執行緒

執行緒是最小的執行單元,而程序由至少一個執行緒組成。如何排程程序和執行緒,完全由作業系統決定,程式自己不能決定什麼時候執行,執行多長時間


11.正則表示式, re模組

[0-9a-zA-Z\_]可以匹配一個數字、字母或者下劃線;
 [0-9a-zA-Z\_]+可以匹配至少由一個數字、字母或者下劃線組成的字串,比如'a100','0_Z','Py3000'等等;

[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下劃線開頭,後接任意個由一個數字、字母或者下劃線組成的字串,也就是Python合法的變數;
 [a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精確地限制了變數的長度是1-20個字元(前面1個字元+後面最多19個字元)

re.split(r'\s+', 'a b c')

正則表示式非常強大,在這裡只是提了一點點,具體的可以網上查詢。


12.常用內建模組

1.datetime是Python處理日期和時間的標準庫 

1.獲取當前日期和時間 
2.獲取指定日期和時間
3.datetime轉換為timestamp
4.timestamp轉換為datetime
5.str轉換為datetime
6.datetime轉換為str
7.datetime加減
8.本地時間轉換為UTC時間
9.時區轉換
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這塊涉及內容較多,具體的大家可以關注我的Python學習筆記,這裡不一一說明.