那些年被我坑過的Python——山外有山(第四章)

裝飾器: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
View Code

 

 

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 函數:

  一個返回語句是未使用過 lambda 函數,它老是返回一些東西。 lambda 函數能夠包含 if 語句:

f = lambda x: x > 10
print(f(2))
print(f(12))

map函數中調用lambda:

  映射的定義是 map(函數,可迭代)。它適用於一個函數可重複每個項目。咱們能夠用 map(),以與列表中的lambda函數:

  使用 lambda 函數任何地方,均可以使用正常的函數來代替。lambda 函數不是一個語句,它是一個表達式。lambda 函數不支持的語句塊。

filter函數中調用lambda:

  過濾器(函數,迭代器)建立一個新的列表的元素,函數返回True。示例:

  返回的列表將返回僅包含其中lambda表達式的元素 「lamba x: x % 2 == 0」  的值爲:true.

reduce 函數中調用lambda:

  reduce 函數, reduce(function, iterable) 適用於兩個參數累積到可迭代的項目,由左到右。示例:

  在這種狀況下,表達始終爲: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__)
相關文章
相關標籤/搜索