day11 初識裝飾器

1閉包複習

#函數名 就是一串內存地址 能夠賦值 能夠做爲容器類型的元素 、函數的參數和 返回值 第一類對象
# 閉包
def outer():
    a=1
    def inner():
        print(a)
    return inner
i=outer()
i()
<<<
1

2做業講解

#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

time 模塊

import time
print(time.time()) #返回當前時間的時間戳(1970紀元後通過的浮點秒數)1544769062.0091138
time.sleep(3) #讓程序執行到這個位置時停一會
print('111')
<<<
1544773092.0564687
111

3初識裝飾器

1.裝飾器

'''裝飾器的做用:不想修改函數的調用方式,可是還想在原來的函數先後添加功能
原則:開放封閉原則  開放對拓展是開放的 對修改是封閉的
語法糖@
裝飾器的固定模式'''

#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
新年好

2.封板

#封板
def outer():
    def inner():
        print('kkk')
        return 'inner'

    print('lll')
    return inner()
print(outer())

<<<
lll
kkk
inner

3.裝飾帶參數函數的裝飾器

#裝飾帶參數函數的裝飾器
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
新年好 新年好

4.裝飾器的固定模式

#裝飾器的固定模式
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
相關文章
相關標籤/搜索