裝飾器:python
定義:ide
本質是函數,(裝飾其餘函數)就是爲其餘函數添加附加功能
原則:
1.不能修改被裝飾的函數的源代碼
2.不能修改被裝飾的函數的調用方式函數
優勢:
裝飾器帶來的最直觀的好處:減小對函數的細化修改,批量增長新功能。ui
實現裝飾器必備知識:
一、函數即「變量」編碼
函數的原理與變量引用類似,都是將一個命名於內存對象進行映射
二、高階函數
知足下列兩個條件之一的則爲高階函數:
a、把一個函數名看成實參傳遞給另外一個函數(在不修改被裝飾函數代碼的狀況下爲它增長功能)
b、一個函數返回值中包含另外一個函數名(不修改函數的調用方式)
三、嵌套函數
具備局部變量的特性,即在函數內部繼續使用def定義新的子函數;
四、高階函數 + 嵌套函數 => 裝飾器spa
最簡單的裝飾器示例:debug
1 def auth(_func): 2 def decorate(*args, **kwargs): 3 <須要附加的功能> 4 result = _func(*args, **kwargs) 5 <須要附加的功能> 6 return result 7 8 return decorate
Python的內存回收機制:
一、當內存對象沒有變量引用時候,會在一段時間內將內存對象回收
二、取消變量引用可使用del關鍵詞,其實是實現了變量名與內存對象之間的映射關係3d
生成器(generator):
eg.( i**2 for i in range(10) )返回結果爲一個生成器
一、只有在調用的時候纔會生成相應的數據
二、只能記錄當前的位置及數據,並且只能向後,不能向前
三、獲取下一個數據的方法是調用:__next__()方法
迭代器 VS 可迭代對象(Iterator VS Iterable)
一、迭代器是指能夠調用next()方法的對象
二、迭代對象是指可使用for ... in ...: 遍歷的對象
三、迭代對象能夠經過iter()方法轉換爲迭代器
四、迭代器必定是迭代對象
五、但迭代對象不必定是迭代器,能夠經過iter()轉換代理
匿名函數的使用:code
匿名函數,又稱爲:lambda 函數。這段代碼顯示如何使用 lambda 函數:
f = lambda x : 2 * x print f(3)
一個返回語句是未使用過 lambda 函數,它老是返回一些東西。 lambda 函數能夠包含 if 語句:
f = lambda x: x > 10 print(f(2)) print(f(12))
映射的定義是 map(函數,可迭代)。它適用於一個函數可重複每個項目。咱們能夠用 map(),以與列表中的lambda函數:
list = [1,2,3,4,5] squaredList = map(lambda x: x*x, list) print(squaredList)
使用 lambda 函數任何地方,均可以使用正常的函數來代替。lambda 函數不是一個語句,它是一個表達式。lambda 函數不支持的語句塊。
過濾器(函數,迭代器)建立一個新的列表的元素,函數返回True。示例:
list = [1,2,3,4,5,6,7,8,9,10] newList = filter(lambda x: x % 2 == 0, list) print(newList)
返回的列表將返回僅包含其中lambda表達式的元素 「lamba x: x % 2 == 0」 的值爲:true.
reduce 函數, reduce(function, iterable) 適用於兩個參數累積到可迭代的項目,由左到右。示例:
list = [1,2,3,4,5] s = reduce(lambda x,y: x+y, list) print(s)
在這種狀況下,表達始終爲:true,所以,它簡單地歸納了列表的元素。另外一個例子:
list = [10,6,7,5,2,1,8,5] s = reduce(lambda x,y: x if (x > y) else y, list) print(s)
內置函數:
一、abs:返回絕對值
二、all: 遍歷一個迭代器,若是都爲空,或者每一個迭代元素都會true,則返回ture,等價於:
def all(iterable): for element in iterable: if not element: return False return True
三、any:與all函數做用相反,若是任何迭代的一個元素爲ture,或者爲空,則返回false
四、ascii: 轉成ascii碼
五、bin:轉一個整數獲得一個二進制的字符串
六、bool:轉換一個值,獲得一個bool類型
七、bytearray:返回一個字節數據
八、bytes: 根據一個編碼轉換成字節形式
九、callable: 回調函數,若是返回false,則表明回調失敗,若是爲true,它也仍然可能失敗
十、chr:返回一個整形數字的Unicode形式,好比97返回a
十一、classmethod:爲函數返回一個類方法
十二、compile:編譯一個資源進入一個代碼裏或一個AST對象
1三、complex:建立一個複數的表達式
1四、 delattr:移除一個對象的屬性
1五、dict:建立一個詞典結構(相似Map)
1六、dir:若是沒有參數返回本文件的路徑,若是有參數返回一個對象的屬性列表
1七、divmod:兩個整形數字作相除
1八、enumerate:返回一個枚舉對象
1九、eval:執行一個表達式,或字符串做爲運算
20、exec:支持python代碼的動態執行
2一、filter:在一個元組裏面過濾出目標字符串
2二、float:字符串轉成浮點類型
2三、format:格式化字符串
2四、frozenset:返回一個新的克隆對象
2五、getattr:獲取對象的一個方法的結果,相似於x.foobar
2六、 globals: 返回當前全局的字典表
2七、hasattr:判斷是否有某個屬性值,返回true表明有
2八、hash:取一個對象的hash值
2九、help:調用系統內置的幫助系統
30、hex:轉換一個整形數字,爲小寫的十六進制
3一、id: 返回一個對象的惟一標識值
3二、input:從控制檯讀取數據
3三、int,轉換字符串爲int型
3四、isinstance:判斷一個對象是否爲該類的一個實例
3五、issubclass:判斷一個類是否爲另外一個類的子類
3六、iter: 返回一個可迭代的對象
3七、len: 返回一個字符串的長度
3八、list:打印一個集合對象
3九、locals:更細並返回一個詞典的本地標誌表
40、map:返回一個可迭代的map函數
4一、max:返回集合裏面最大的一個或多個值
4二、memoryview:返回一個python對象的內部數據
4三、min:返回集合裏面最小的一個或多個值
4四、next:返回集合裏面的下一項數值
4五、object:返回一個新的對象,是全部的類的父類
4六、oct:返回一個整形爲八進制類型
4七、open: 打開一個系統文件
4八、ord:獲得一個字符串或unicode類型的ascii數值
4九、pow:返回的數字n次方值
50、print:打印輸出語句
5一、property:返回一個屬性值
5一、range:產生一個數字序列
5二、repr:返回一個字符串可打印對象
5三、reversed:反轉一個集合
5四、round:返回一個四捨五入的浮點數
5五、set:返回一個新的set對象
5六、setattr:設置一個新的屬性值
5七、slice:返回一個集合的區間集合
5八、sorted:對一個集合進行排序
5九、staticmethod:聲明返回一個靜態方法
60、str:將數字類型轉換爲字符串
6一、sum:對一個集合裏面的值求和
6二、super:返回一個代理父類的對象
6三、tuple:返回一個不可變的元組
6四、type:返回一個對象的類型
6五、vars:返回對象的屬性
6六、zip:返回組合一個對等的項
6七、__import__: 比import高級的導入方法
python裏面的內置常量 :
一、False:bool類型的值
二、True:bool類型的值
三、None:對象的爲null
四、NotImplemented: 不是其餘類型的實現
五、Ellipsis:省略
六、__debug__:debug選項
七、quit,exit,copyright,license,credits
其餘小知識點:
一、獲取絕對路徑:
os.path.abspath()
二、獲取上級目錄
os.path.dirname()
三、獲取函數名:
func.__name__
或者
getattr(func,__name__)