裝飾器-內置函數
裝飾器
裝飾內容的一個工具 本質是閉包
開放封閉原則(寫代碼必須遵守):
1.對擴展開放
2.對修改源代碼封閉
3.不改變調用方式
作用:在不改變源代碼的基礎上,新增功能
import time print(time.time()) #時間戳 每次打印時間不一樣,跟著時間在變 time.sleep() #定義睡眠時間
語法糖
在被裝飾的函數正上方,加一個@裝飾器的名字 獨占一行
被裝飾的函數名 = 裝飾器的名字(被裝飾的函數名)
import time def inner(x): def wapeer(): s_time = time.time() x() ss_time= time.time() print(ss_time - s_time) return wapeer @inner #foo = inner(foo) def foo(): time.sleep(3) #睡眠時間為3秒 print(‘is foo‘) foo()
當被裝飾的函數內自帶參數時:
import time def inner(x): def wapeer(*args,**kwargs): s_time = time.time() x(*args,**kwargs) ss_time = time.time() print(ss_time - s_time)return wapeer def num_sum(*args,**kwargs): print(*args,**kwargs) num_sum = inner(num_sum) num_sum(2,3,5,3,7)
一個函數可以對應多個裝飾器
裝飾器應用:增加一些功能,校驗用戶登錄的時候 Django 面向對象
內置函數
abs(值) 絕對值
all(可叠代數據) 檢查可叠代對象的每一個元素是不是為真 只有都為真 才返回True
any(可叠代數據) 檢查可叠代對象的每一個元素是不是為真 只要有一個為真就是True
ascii() 如果在ascii碼中,就原生顯示,不在ascii中,顯示\u...
bytearray(‘...‘,encoding = ‘utf-8‘)
bytes(‘...‘,encoding = ‘utf-8‘)
callable() 判斷是不是可調用 返回布爾值
chr(碼位) 對應ascii碼 顯示碼位對應的內容
complex() 實數和虛數
enumerate(可叠代對象,起始值) 枚舉 起始值不寫的時候默認是0,也可以自己定義起始值
li = [1,2,3,4,5] for i,e in enumerate(li): print(i,e) 結果: 0 1 1 2 2 3 3 4 4 5
eval 執行部分字符串中的內容 在開發中禁止使用
exec 執行字符串中的內容 禁止使用
float(浮點數) 浮點 可以把整型轉正浮點型
format 可以作為字符串方法,單獨使用作為內置函數
for(‘meet‘,‘>20‘) 右對齊
for(‘meet‘,‘<20‘) 左對齊
for(‘meet‘,‘^20‘) 居中
hash 哈希,確認哪些數據可以當做字典的鍵 有值就是可以
help 幫助查看官方文檔的方法
max 比較每一個元素,取最大值
min 比較每一個元素,取最小值
sum 求和,裏面放可叠代數據
memoryview(b‘內容‘) 求字節的地址地址
ord 查看unicode表位
pow(2,3) 兩個參數的時候,冪(2的3次冪)
pow(2,3,3) 三個參數的時候,求冪後再取余
print(‘你好‘,end = ‘‘) 取消換行符
print(‘你好‘,sep = ‘|‘) 插入管道符
repr 顯示數據的原生
reversed 反轉 叠代器
round() 大約,四舍五入,第一個參數是浮點數,第二個參數是要保留的小數位
zip 拉鏈
lst = [1,2,3,4] lst = [1,2,3] for i in zip(lst,lst1): print(i) 結果: (1,1) (2,2) (3,3) #如果長度不統一,按照最短的來
lambda 匿名函數
lambda 參數:返回值
print((lambda x:x+x)(3))
匿名參數的時候定義和函數 沒有def 沒有函數名 查看函數名用__name__
有形參,可以接收多個
返回值只能用一個
匿名函數是沒有名字的,賦值的變量只是方便調用,調用的時候要傳參
sorted(可叠代對象) 默認升序
sorted(可叠代對象,reverse = True) 降序
sorted(‘可叠代對象‘,key=‘函數名‘(函數名裏寫排序規則),reverse = true的時候是降序)
lst = [‘dfhjk‘,‘swty‘,‘sewqea‘] print(sorted(lst,key = lambda x:len(x),reverse=True)) #key是一種排序的規則,不寫的話就以數字的大小去排序,寫了就按照規則排序 結果: [‘sewqea‘, ‘dfhjk‘, ‘swty‘]
filter 篩選過濾
filter(‘寫好過濾規則的函數‘,可叠代對象) 函數可以是匿名的,也可以是定義好的
lst = [1,2,3,4,5,6,7] dic = [{‘name‘:‘alex‘,‘age‘:19},{‘name‘:‘wusir‘,‘age‘:16}] print(list(filter(lambda x:x[‘age‘]>17,dic))) print(list(filter(lambda x:x>3,lst))) 結果: [{‘name‘: ‘alex‘, ‘age‘: 19}] [4, 5, 6, 7]
map 映射函數 可以快速將多個元素相同的可叠代對象進行相同索引的一一累加
lst = [1,2,3,4] print(list(map(lambda x:x**2,lst))) print(list(map(lambda x:x**x,lst))) print(list(map(lambda x:x**x+1,lst)))
結果:
[1, 4, 9, 16]
[1, 4, 27, 256]
[2, 5, 28, 257]
lst = [1,2,3,4]
def func(x):
return x**2
print(list(map(func,lst)))
結果:
[1, 4, 9, 16]
lst1 = [2,3,4,5]
lst2 = [3,4,5,6]
print(list(map(lambda x,y:x+y,lst1,lst2)))
結果:
[5, 7, 9, 11]
reduce 累 計算 快速求一個可叠代對象的累計算
from functools import reduce #python3導入方式 lst = [1,2,3,4] print(reduce(lambda x,y:x**2,lst)) 結果: 1
裝飾器-內置函數