Python之路,Day4 - Python基礎4

來源:互聯網
上載者:User

標籤:本質   因此   實參   分享圖片   實現   int   直接   div   img   

本節內容

  1. 迭代器&產生器
  2. 裝飾器
  3. Json & pickle 資料序列化
  4. 軟體目錄結構規範
  5. 作業:ATM項目開發

 

1.裝飾器(文法糖)

定義:本質是函數,(裝飾其他函數),就是為其他函數添加附加功能

原則:

  1. 不能修改被裝飾函數的原始碼
  2. 不能修改被裝飾函數的調用方式

實現裝飾器“知識”儲備:

1.函數即“變數”  

2.高階函數

  a.把一個函數名當作實參傳給另一個函數(在不修改被裝飾函數原始碼的情況下為其添加功能)

  

def bar():    print("in the bar")def test1(func):   #test1(bar)    print(func)    func() #相當於bar()test1(bar) #此時相當於  func=bar--------輸出--------<function bar at 0x05604300>in the bar

  

 1 import time 2 def bar(): 3     time.sleep(3) 4     print("in the bar") 5 def deco(func): 6     start_time=time.time() 7     func() 8     stop_time=time.time() 9     print("the func run time is %s"%(stop_time-start_time))10 deco(bar)  #但是其實這個例子不合適,因為改變了調用方式11 #bar()  這才是原來的調用方式12 13 ------輸出-----14 in the bar15 the func run time is 3.0007259845733643
舉例

 

  b.傳回值包含函數名(不修改函數調用方式) 

 1 def bar(): 2     print("in the bar") 3 def deco(func):   #func=bar 4     print(func)   #列印bar的記憶體位址 5     return func    #再返回bar的記憶體位址 6         #記憶體位址+()就能運行 7  8 deco(bar)  #把記憶體位址即函數名傳給deco 9 print("----分割線---")10 print(deco(bar))     #把return傳回值列印出來11 print("------||------")12 deco(bar())   #把傳回值傳給deco,不符合高階函數的定義13 14 ----------輸出------15 <function bar at 0x058C4228>16 ----分割線---17 <function bar at 0x058C4228>18 <function bar at 0x058C4228>19 ------||------20 in the bar21 None
View Code

因此,可以得到在不改變調用方式的情況下的做法

def bar():    print("in the bar")def deco(func):   #func=bar    print(func)   #列印bar的記憶體位址    return func    #再返回bar的記憶體位址        #記憶體位址+()就能運行bar=deco(bar)  #將return返回的值賦值給barbar()     #此時bar為記憶體位址,所以bar+()就能運行bar這個函數------輸出-----<function bar at 0x05814150>in the bar

  

3.嵌套函數

定義:在函數體內,用def去聲明一個新的函數。而不是去調用他 

def foo():    print("in the foo")    def bar():        print("in the bar/")    bar()   #局部變數只能在局部函數內調用foo()‘‘‘def foo():    bar()  #這種是直接調用‘‘‘-------輸出----in the fooin the bar/

   

 

4.高階函數+嵌套函數==》裝飾器

 

匿名函數

def plus(n):     #函數名plus    return n+1 plus2 = lambda x:x+1   #沒有函數名字,只有變數名#但是兩者得到的結果是一樣的#lambda x:x+1 起了個名字叫plus2,相當於def plus2(x)

  

Python之路,Day4 - Python基礎4

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.