#函數名 就是一串內存地址 能夠賦值 能夠做爲容器類型的元素 、函數的參數和 返回值 第一類對象 # 閉包 def outer(): a=1 def inner(): print(a) return inner i=outer() i() <<< 1
#2.寫函數接收n個數字求這些參數數字的和 def sum_fun(*args): total=0 for i in args: total+=i return total print(sum_fun(1,2,8)) <<< 11
#讀代碼 回答代碼中打印出來的abc分別是什麼 爲何 a=10 b=20 def test5(a,b): print(a,b) c=test5(b,a) print(c) #20,10 b=20 a=13 def test5(a,b): a=3 b=5 print(a,b) c=test5(b,a) print(c) #3,5 內部有就不跟上級要了 <<< 20 10 None 3 5 None
import time print(time.time()) #返回當前時間的時間戳(1970紀元後通過的浮點秒數)1544769062.0091138 time.sleep(3) #讓程序執行到這個位置時停一會 print('111') <<< 1544773092.0564687 111
'''裝飾器的做用:不想修改函數的調用方式,可是還想在原來的函數先後添加功能 原則:開放封閉原則 開放對拓展是開放的 對修改是封閉的 語法糖@ 裝飾器的固定模式''' #timemer就是一個裝飾器函數 只是對一個函數有一些裝飾做用 import time def timmer(f): #裝飾器函數 def inner(): start=time.time() ret=f() #被裝飾的函數 end=time.time() print(end-start) return ret return inner @timmer #語法糖@ 裝飾器函數名 def func(): #被裝飾的函數 time.sleep(0.01) print("老闆好") return '新年好' #func=timemer(func) #有了@timmer 就不用這一行了 ret=func() print(ret) <<< 老闆好 0.015593528747558594 新年好
#封板 def outer(): def inner(): print('kkk') return 'inner' print('lll') return inner() print(outer()) <<< lll kkk inner
#裝飾帶參數函數的裝飾器 import time def timmer(f): def inner(*args,**kwargs): start=time.time() ret=f(*args,**kwargs) end=time.time() print(end-start) return ret return inner @timmer def func(a,b): time.sleep(1) print('老闆好',a,b) return '新年好' #func=timmer(func) ret=func(1,2) #inner(1,2) ret1=func(1,b=3) #inner(1,2) print(ret,ret1) <<< 老闆好 1 2 1.0005967617034912 老闆好 1 3 1.0001435279846191 新年好 新年好
#裝飾器的固定模式 import time def wrapper(f): #wrapper是裝飾器函數 f是被裝飾的函數 def inner(*args,**kwargs): '''在被裝飾函數以前要作的事''' ret=f(*args,**kwargs) '''在被裝飾函數以後要作的事''' return ret return inner @wrapper #至關於func=wrapper(func) def func(a,b): time.sleep(1) print('hhhh',a+b) return '666' print(func(1,5)) #至關於inner(1,5) <<< hhhh 6 666
def wrapper(): def inner(): pass return inner