欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

6.Python裝飾器

系統(tǒng) 1608 0

1. 開放封閉原則

? 什么是開放封閉原則?有的同學(xué)問開放,封閉這是兩個反義詞這還能組成一個原則么?這不前后矛盾么?其實(shí)不矛盾。開放封閉原則是分情況討論的。

? 我們的軟件一旦上線之后(比如你的軟件主要是多個函數(shù)組成的),那么這個軟件對功能的擴(kuò)展應(yīng)該是開放的,比如你的游戲一直在迭代更新,推出新的玩法,新功能。但是對于源代碼的修改是封閉的。你就拿函數(shù)舉例,如果你的游戲源代碼中有一個函數(shù)是閃躲的功能,那么你這個函數(shù)肯定是被多個地方調(diào)用的,比如對方扔雷,對方開槍,對方用刀,你都會調(diào)用你的閃躲功能,那么如果你的閃躲功能源碼改變了,或者調(diào)用方式改變了,當(dāng)對方發(fā)起相應(yīng)的動作,你在調(diào)用你的閃躲功能,就會發(fā)生問題。所以,開放封閉原則具體具體定義是這樣:

? 1.對擴(kuò)展是開放的

? 我們說,任何一個程序,不可能在設(shè)計之初就已經(jīng)想好了所有的功能并且未來不做任何更新和修改。所以我們必須允許代碼擴(kuò)展、添加新功能。

? 2.對修改是封閉的

? 就像我們剛剛提到的,因?yàn)槲覀儗懙囊粋€函數(shù),很有可能已經(jīng)交付給其他人使用了,如果這個時候我們對函數(shù)內(nèi)部進(jìn)行修改,或者修改了函數(shù)的調(diào)用方式,很有可能影響其他已經(jīng)在使用該函數(shù)的用戶。OK,理解了開封封閉原則之后,我們聊聊裝飾器。

? 什么是裝飾器?從字面意思來分析,先說裝飾,什么是裝飾? 裝飾就是添加新的,比如你家剛買的房子,下一步就是按照自己的喜歡的方式設(shè)計,進(jìn)行裝修,裝飾,地板,墻面,家電等等。什么是器?器就是工具,也是功能,那裝飾器就好理解了:就是添加新的功能。

? 比如我現(xiàn)在不會飛,怎么才能讓我會飛?給我加一個翅膀,我就能飛了。那么你給我加一個翅膀,它會改變我原來的行為么?我之前的吃喝拉撒睡等生活方式都不會改變。它就是在我原來的基礎(chǔ)上,添加了一個新的功能。

今天我們講的裝飾器(裝修,翅膀)是以功能為導(dǎo)向的,就是一個函數(shù)。

被裝飾的對象:比如毛坯房,我本人,其實(shí)也是一個函數(shù)。

所以裝飾器最終最完美的定義就是:在不改變原被裝飾的函數(shù)的源代碼以及調(diào)用方式下,為其添加額外的功能。

2. 初識裝飾器

接下來,我們通過一個例子來為大家講解這個裝飾器:

需求介紹:你現(xiàn)在xx科技有限公司的開發(fā)部分任職,領(lǐng)導(dǎo)給你一個業(yè)務(wù)需求讓你完成:讓你寫代碼測試小明同學(xué)寫的函數(shù)的執(zhí)行效率。

          
            def index():
    print('歡迎訪問博客園主頁')
          
        

? 版本1:

? 需求分析:你要想測試此函數(shù)的執(zhí)行效率,你應(yīng)該怎么做?應(yīng)該在此函數(shù)執(zhí)行前記錄一個時間, 執(zhí)行完畢之后記錄一個時間,這個時間差就是具體此函數(shù)的執(zhí)行效率。那么執(zhí)行時間如何獲取呢? 可以利用time模塊,有一個time.time()功能。

          
            import time
print(time.time())
          
        

? 此方法返回的是格林尼治時間,是此時此刻距離1970年1月1日0點(diǎn)0分0秒的時間秒數(shù)。也叫時間戳,他是一直變化的。所以要是計算shopping_car的執(zhí)行效率就是在執(zhí)行前后計算這個時間戳的時間,然后求差值即可。

          
            import time
def index():
    print('歡迎訪問博客園主頁')

start_time = time.time()
index()
end_time = time.time()
print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
          
        

由于index函數(shù)只有一行代碼,執(zhí)行效率太快了,所以我們利用time模塊的一個sleep模擬一下

          
            import time
def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園主頁')

start_time = time.time()
index()
end_time = time.time()
print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
          
        

? 版本1分析 :你現(xiàn)在已經(jīng)完成了這個需求,但是有什么問題沒有? 雖然你只寫了四行代碼,但是你完成的是一個測試其他函數(shù)的執(zhí)行效率的功能,如果讓你測試一下,小張,小李,小劉的函數(shù)效率呢? 你是不是全得復(fù)制:

          
            import time
def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園首頁')

def home(name):
    time.sleep(3)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print(f'歡迎訪問{name}主頁')

start_time = time.time()
index()
end_time = time.time()
print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')

start_time = time.time()
home('太白')
end_time = time.time()
print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')

......
          
        

重復(fù)代碼太多了,所以要想解決重復(fù)代碼的問題,怎么做?我們是不是學(xué)過函數(shù),函數(shù)就是以功能為導(dǎo)向,減少重復(fù)代碼,好我們繼續(xù)整改。

? 版本2:

          
            import time

def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園主頁')

def inner():
    start_time = time.time()
    index()
    end_time = time.time()
    print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')

inner()
          
        

但是你這樣寫也是有問題的,你雖然將測試功能的代碼封裝成了一個函數(shù),但是這樣,你只能測試小明同學(xué)的的函數(shù)index,你要是測試其他同事的函數(shù)呢?你怎么做?

          
            import time
def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園主頁')

def home(name):
    time.sleep(3)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print(f'歡迎訪問{name}主頁')

def inner():
    start_time = time.time()
    index()
    home('太白')
    end_time = time.time()
    print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')

timer()
          
        

你要是像上面那么做,每次測試其他同事的代碼還需要手動改,這樣是不是太low了?所以如何變成動態(tài)測試其他函數(shù)?我們是不是學(xué)過函數(shù)的傳參?能否將被裝飾函數(shù)的函數(shù)名作為函數(shù)的參數(shù)傳遞進(jìn)去呢?

? 版本3:

          
            import time
def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園主頁')

def home(name):
    time.sleep(3)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print(f'歡迎訪問{name}主頁')

def timmer(func):  # func == index 函數(shù)
    start_time = time.time()
    func()  # index()
    end_time = time.time()
    print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')

timmer(index)
          
        

? 這樣我將index函數(shù)的函數(shù)名作為參數(shù)傳遞給timmer函數(shù),然后在timmer函數(shù)里面執(zhí)行index函數(shù),這樣就變成動態(tài)傳參了。好,你們現(xiàn)在將版本3的代碼快速練一遍。 大家練習(xí)完了之后,發(fā)現(xiàn)有什么問題么? 對比著開放封閉原則說: 首先,index函數(shù)除了完成了自己之前的功能,還增加了一個測試執(zhí)行效率的功能,對不?所以也符合開放原則。 其次,index函數(shù)源碼改變了么?沒有,但是執(zhí)行方式改變了,所以不符合封閉原則。 原來如何執(zhí)行? index() 現(xiàn)在如何執(zhí)行? inner(index),這樣會造成什么問題? 假如index在你的項(xiàng)目中被100處調(diào)用,那么這相應(yīng)的100處調(diào)用我都得改成inner(index)。 非常麻煩,也不符合開放封閉原則。

? 版本4: 實(shí)現(xiàn)真正的開放封閉原則:裝飾器。

這個也很簡單,就是我們昨天講過的閉包,只要你把那個閉包的執(zhí)行過程整清楚,那么這個你想不會都難。

          
            import time
def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園主頁')

def home(name):
    time.sleep(3)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print(f'歡迎訪問{name}主頁')
          
        

? 你將上面的inner函數(shù)在套一層最外面的函數(shù)timer,然后將里面的inner函數(shù)名作為最外面的函數(shù)的返回值,這樣簡單的裝飾器就寫好了,一點(diǎn)新知識都沒有加,這個如果不會就得多抄幾遍,然后理解代碼。

          
            def timer(func):  # func = index
    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
    return inner

# f = timer(index)

# f()
          
        

? 我們分析一下,代碼,代碼執(zhí)行到這一行:f = timer(index) 先執(zhí)行誰?看見一個等號先要執(zhí)行等號右邊, timer(index) 執(zhí)行timer函數(shù)將index函數(shù)名傳給了func形參。內(nèi)層函數(shù)inner執(zhí)行么?不執(zhí)行,inner函數(shù)返回 給f變量。所以我們執(zhí)行f() 就相當(dāng)于執(zhí)行inner閉包函數(shù)。 f(),這樣既測試效率又執(zhí)行了原函數(shù),有沒有問題?當(dāng)然有啦??!版本4你要解決原函數(shù)執(zhí)行方式不改變的問題,怎么做? 所以你可以把 f 換成 index變量就完美了! index = timer(index) index()帶著同學(xué)們將這個流程在執(zhí)行一遍,特別要注意 函數(shù)外面的index實(shí)際是inner函數(shù)的內(nèi)存地址而不是index函數(shù)。讓學(xué)生們抄一遍,理解一下,這個timer就是最簡單版本裝飾器,在不改變原index函數(shù)的源碼以及調(diào)用方式前提下,為其增加了額外的功能,測試執(zhí)行效率。

3. 帶返回值的裝飾器

? 你現(xiàn)在這個代碼,完成了最初版的裝飾器,但是還是不夠完善,因?yàn)槟惚谎b飾的函數(shù)index可能會有返回值,如果有返回值,你的裝飾器也應(yīng)該不影響,開放封閉原則嘛。但是你現(xiàn)在設(shè)置一下試試:

          
            import time
def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園主頁')
    return '訪問成功'

def timer(func):  # func = index
    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
    return inner

index = timer(index)
print(index())  # None
          
        

? 加上裝飾器之后,他的返回值為None,為什么?因?yàn)槟悻F(xiàn)在的index不是函數(shù)名index,這index實(shí)際是inner函數(shù)名。所以index() 等同于inner() 你的 '訪問成功'返回值應(yīng)該返回給誰?應(yīng)該返回給index,這樣才做到開放封閉,實(shí)際返回給了誰?實(shí)際返回給了func,所以你要更改一下你的裝飾器代碼,讓其返回給外面的index函數(shù)名。 所以:你應(yīng)該這么做:

          
            def timer(func):  # func = index
    def inner():
        start_time = time.time()
        ret = func()
        end_time = time.time()
        print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
        return ret
    return inner

index = timer(index)  # inner
print(index())  # print(inner())
          
        

借助于內(nèi)層函數(shù)inner,你將func的返回值,返回給了inner函數(shù)的調(diào)用者也就是函數(shù)外面的index,這樣就實(shí)現(xiàn)了開放封閉原則,index返回值,確實(shí)返回給了'index'。

讓同學(xué)們;練習(xí)一下。

4 被裝飾函數(shù)帶參數(shù)的裝飾器

到目前為止,你的被裝飾函數(shù)還是沒有傳參呢?按照我們的開放封閉原則,加不加裝飾器都不能影響你被裝飾函數(shù)的使用。所以我們看一下。

          
            import time
def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園主頁')
    return '訪問成功'

def home(name):
    time.sleep(3)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print(f'歡迎訪問{name}主頁')

def timer(func):  # func = index
    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
    return inner

# 要想timer裝飾home函數(shù)怎么做?
home = timer(home)
home('太白')
          
        

上面那么做,顯然報錯了,為什么? 你的home這個變量是誰?是inner,home('太白')實(shí)際是inner('太白')但是你的'太白'這個實(shí)參應(yīng)該傳給誰? 應(yīng)該傳給home函數(shù),實(shí)際傳給了誰?實(shí)際傳給了inner,所以我們要通過更改裝飾器的代碼,讓其將實(shí)參'太白'傳給home.

          
            import time
def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園主頁')
    return '訪問成功'

def home(name):
    time.sleep(3)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print(f'歡迎訪問{name}主頁')

def timer(func):  # func = home
    def inner(name):
        start_time = time.time()
        func(name)  # home(name) == home('太白')
        end_time = time.time()
        print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
    return inner

# 要想timer裝飾home函數(shù)怎么做?
home = timer(home)
home('太白')
          
        

? 這樣你就實(shí)現(xiàn)了,還有一個小小的問題,現(xiàn)在被裝飾函數(shù)的形參只是有一個形參,如果要是多個怎么辦?有人說多少個我就寫多少個不就行了,那不行呀,你這個裝飾器可以裝飾N多個不同的函數(shù),這些函數(shù)的參數(shù)是不統(tǒng)一的。所以你要有一種可以接受不定數(shù)參數(shù)的形參接受他們。這樣,你就要想到*args,**kwargs。

          
            import time
def index():
    time.sleep(2)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print('歡迎訪問博客園主頁')
    return '訪問成功'

def home(name,age):
    time.sleep(3)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print(name,age)
    print(f'歡迎訪問{name}主頁')

def timer(func):  # func = home
    def inner(*args,**kwargs):  # 函數(shù)定義時,*代表聚合:所以你的args = ('太白',18)
        start_time = time.time()
        func(*args,**kwargs)  # 函數(shù)的執(zhí)行時,*代表打散:所以*args --> *('太白',18)--> func('太白',18)
        end_time = time.time()
        print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
    return inner



home = timer(home)
home('太白',18)
          
        

這樣利用*的打散與聚合的原理,將這些實(shí)參通過inner函數(shù)的中間完美的傳遞到給了相應(yīng)的形參。

好將上面的代碼在敲一遍。

5. 標(biāo)準(zhǔn)版裝飾器

代碼優(yōu)化:語法糖

根據(jù)我的學(xué)習(xí),我們知道了,如果想要各給一個函數(shù)加一個裝飾器應(yīng)該是這樣:

          
            def home(name,age):
    time.sleep(3)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print(name,age)
    print(f'歡迎訪問{name}主頁')

def timer(func):  # func = home
    def inner(*args,**kwargs):
        start_time = time.time()
        func(*args,**kwargs)
        end_time = time.time()
        print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
    return inner

home = timer(home)
home('太白',18)
          
        

? 如果你想給home加上裝飾器,每次執(zhí)行home之前你要寫上一句:home = timer(home)這樣你在執(zhí)行home函數(shù) home('太白',18) 才是真生的添加了額外的功能。但是每次寫這一句也是很麻煩。所以,Python給我們提供了一個簡化機(jī)制,用一個很簡單的符號去代替這一句話。

          
            def timer(func):  # func = home
    def inner(*args,**kwargs):
        start_time = time.time()
        func(*args,**kwargs)
        end_time = time.time()
        print(f'此函數(shù)的執(zhí)行效率為{end_time-start_time}')
    return inner

@timer  # home = timer(home)
def home(name,age):
    time.sleep(3)  # 模擬一下網(wǎng)絡(luò)延遲以及代碼的效率
    print(name,age)
    print(f'歡迎訪問{name}主頁')

home('太白',18)
          
        

? 你看此時我調(diào)整了一下位置,你要是不把裝飾器放在上面,timer是找不到的。home函數(shù)如果想要加上裝飾器那么你就在home函數(shù)上面加上@home,就等同于那句話 home = timer(home)。這么做沒有什么特殊意義,就是讓其更簡單化,比如你在影視片中見過野戰(zhàn)軍的作戰(zhàn)時由于不方便說話,用一些簡單的手勢代表一些話語,就是這個意思。

至此標(biāo)準(zhǔn)版的裝飾器就是這個樣子:

          
            def wrapper(func):
    def inner(*args,**kwargs):
        '''執(zhí)行被裝飾函數(shù)之前的操作'''
        ret = func
        '''執(zhí)行被裝飾函數(shù)之后的操作'''
        return ret
    return inner
          
        

這個就是標(biāo)準(zhǔn)的裝飾器,完全符合代碼開放封閉原則。這幾行代碼一定要背過,會用。

此時我們要利用這個裝飾器完成一個需求:簡單版模擬博客園登錄。 此時帶著學(xué)生們看一下博客園,說一下需求: 博客園登陸之后有幾個頁面,diary,comment,home,如果我要訪問這幾個頁面,必須驗(yàn)證我是否已登錄。 如果已經(jīng)成功登錄,那么這幾個頁面我都可以無阻力訪問。如果沒有登錄,任何一個頁面都不可以訪問,我必須先登錄,登錄成功之后,才可以訪問這個頁面。我們用成功執(zhí)行函數(shù)模擬作為成功訪問這個頁面,現(xiàn)在寫三個函數(shù),寫一個裝飾器,實(shí)現(xiàn)上述功能。

          
            def auth():

 pass



def diary():
 print('歡迎訪問日記頁面')



def comment():

 print('歡迎訪問評論頁面')



def home():

 print('歡迎訪問博客園主頁')
答案:

login_status = {
    'username': None,
    'status': False,
}

def auth(func):
    def inner(*args,**kwargs):
        if login_status['status']:
            ret = func()
            return ret
        username = input('請輸入用戶名:').strip()
        password = input('請輸入密碼:').strip()
        if username == '太白' and password == '123':
            login_status['status'] = True
            ret = func()
            return ret
    return inner

@auth
def diary():
    print('歡迎訪問日記頁面')

@auth
def comment():
    print('歡迎訪問評論頁面')

@auth
def home():
    print('歡迎訪問博客園主頁')

diary()
comment()
home()

          
        

6. 帶參數(shù)的裝飾器

我們看,裝飾器其實(shí)就是一個閉包函數(shù),再說簡單點(diǎn)就是兩層的函數(shù)。那么是函數(shù),就應(yīng)該具有函數(shù)傳參功能。

          
            login_status = {
    'username': None,
    'status': False,
}

def auth(func):
    def inner(*args,**kwargs):
        if login_status['status']:
            ret = func()
            return ret
        username = input('請輸入用戶名:').strip()
        password = input('請輸入密碼:').strip()
        if username == '太白' and password == '123':
            login_status['status'] = True
            ret = func()
            return ret
    return inner
          
        

你看我上面的裝飾器,不要打開,他可以不可在套一層:

          
            def auth(x):
    def auth2(func):
        def inner(*args,**kwargs):
            if login_status['status']:
                ret = func()
                return ret
            username = input('請輸入用戶名:').strip()
            password = input('請輸入密碼:').strip()
            if username == '太白' and password == '123':
                login_status['status'] = True
                ret = func()
                return ret
        return inner
    return auth
          
        

? 舉例說明:抖音:綁定的是微信賬號密碼。 皮皮蝦:綁定的是qq的賬號密碼。 你現(xiàn)在要完成的就是你的裝飾器要分情況去判斷賬號和密碼,不同的函數(shù)用的賬號和密碼來源不同。 但是你之前寫的裝飾器只能接受一個參數(shù)就是函數(shù)名,所以你寫一個可以接受參數(shù)的裝飾器。

          
            def auth2(func):
    def inner(*args, **kwargs):
        if login_status['status']:
            ret = func()
            return ret
        if 微信:
            username = input('請輸入用戶名:').strip()
            password = input('請輸入密碼:').strip()
            if username == '太白' and password == '123':
                login_status['status'] = True
                ret = func()
                return ret
        elif 'qq':
            username = input('請輸入用戶名:').strip()
            password = input('請輸入密碼:').strip()
            if username == '太白' and password == '123':
                login_status['status'] = True
                ret = func()
                return ret
    return inner

@auth2
def jitter():
    print('記錄美好生活')


@auth2
def pipefish():
    print('期待你的內(nèi)涵神評論')
          
        

解決方式:

          
            def auth(x):
    def auth2(func):
        def inner(*args, **kwargs):
            if login_status['status']:
                ret = func()
                return ret
            
            if x == 'wechat':
                username = input('請輸入用戶名:').strip()
                password = input('請輸入密碼:').strip()
                if username == '太白' and password == '123':
                    login_status['status'] = True
                    ret = func()
                    return ret
            elif x == 'qq':
                username = input('請輸入用戶名:').strip()
                password = input('請輸入密碼:').strip()
                if username == '太白' and password == '123':
                    login_status['status'] = True
                    ret = func()
                    return ret
        return inner
    return auth2
    
@auth('wechat')  
def jitter():
    print('記錄美好生活')

@auth('qq')
def pipefish():
    print('期待你的內(nèi)涵神評論')
          
        

@auth('wechat') :分兩步:

? 第一步先執(zhí)行auth('wechat')函數(shù),得到返回值auth2

? 第二步@與auth2結(jié)合,形成裝飾器@auth2 然后在依次執(zhí)行。

這樣就是帶參數(shù)的裝飾器,參數(shù)可以傳入多個,一般帶參數(shù)的裝飾器在以后的工作中都是給你提供的, 你會用就行,但是自己也一定要會寫,面試經(jīng)常會遇到。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲视频一区二区 | 久久久国产精品网站 | 91香蕉人成app | 二区在线视频 | 天天插天天插天天插 | 国产乱码一区二区三区四 | jizz日本zzz日本护士 | 国产激情久久久久久熟女老人AV | 免费看日韩片 | 久草新在线观看 | 美女久久久久 | 久久精品视频8 | 欧美成人在线视频 | 午夜专区 | 午夜爱爱爱爱爽爽爽网站免费 | 天天射天天搞 | 一级一级 a爱片免费视频 | 精品不卡 | 欧美日韩在线一区二区 | 久久精品网 | 日韩精品免费 | 成人伊人| 久久久精品午夜免费不卡 | 在线播放av片 | 国产乱人乱精一区二区视频密 | 天堂av中文字幕 | 亚洲黄区 | 91免费永久国产在线观看 | 成年美女黄的视频网站 | 在线观看国产 | 久久精品欧美一区二区三区不卡 | 欧美日韩在线第一页 | 搜一级毛片 | 亚洲综人网 | 国产黄色网址在线观看 | 一区二区三区四区国产 | 成人综合久久综合 | 极品狂兵电视剧免费观看 | 一级做a爰片久久毛片 | 国产中文字幕一区 | 色拍拍在精品视频69影院在线 |