再談Python的高階函數和裝飾器筆記(1)

高階函數:我的理解就是閉包、內嵌函數

舉例:

計數器:

有問題麼?

問題出在base+=step,對base賦值,局部變量,沒有先定義

改進:聲明爲非局部變量nonlocal,但是不要是global變量

觀察一下:

id(f1)

id(f2)

f1==f2

自定義sort函數:

以下是加入reverse參數的改進:推薦flag的用法

改寫爲高階函數,注意comp函數:

comp函數比較通用。可以抽象出來。如下:

再改寫成高階函數形式:

先簡化一下comp函數,使其不帶reverse參數:

替換成sort自己的調用:

再進一步改造comp函數爲匿名函數lambda a,b:a<b

再改造一下,去掉reverse參數嗎,由匿名函數比較關係決定升序還是降序

知識點補充:enumerate、集合set操作

>>> import random
>>> l=[random.randint(1,100) for i in range(5)]
>>> l
[10, 14, 62, 30, 45]

>>> print(list(enumerate(l)))
[(0, 10), (1, 14), (2, 62), (3, 30), (4, 45)]
>>> for e in enumerate(l):
    print(e[0])   
0
1
2
3
4

>>> for i,x in enumerate(l):
    print(i,'   ',x)
0     10
1     14
2     62
3     30
4     45

>>> k=set(l)
>>> k
{10, 45, 14, 30, 62}

 |  add(...)
 |      Add an element to a set.
 |      
 |      This has no effect if the element is already present.
 |  
 |  clear(...)
 |      Remove all elements from this set.
 |  
 |  copy(...)
 |      Return a shallow copy of a set.
 |  
 |  difference(...)
 |      Return the difference of two or more sets as a new set.

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章