精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

說說Python的元編程

開發(fā) 后端
提到元這個(gè)字,你也許會想到元數(shù)據(jù),元數(shù)據(jù)就是描述數(shù)據(jù)本身的數(shù)據(jù),元類就是類的類,相應(yīng)的元編程就是描述代碼本身的代碼,元編程就是關(guān)于創(chuàng)建操作源代碼(比如修改、生成或包裝原來的代碼)的函數(shù)和類。

[[423992]]

提到元這個(gè)字,你也許會想到元數(shù)據(jù),元數(shù)據(jù)就是描述數(shù)據(jù)本身的數(shù)據(jù),元類就是類的類,相應(yīng)的元編程就是描述代碼本身的代碼,元編程就是關(guān)于創(chuàng)建操作源代碼(比如修改、生成或包裝原來的代碼)的函數(shù)和類。主要技術(shù)是使用裝飾器、元類、描述符類。本文的主要目的是向大家介紹這些元編程技術(shù),并且給出實(shí)例來演示它們是怎樣定制化源代碼的行為。

裝飾器

裝飾器就是函數(shù)的函數(shù),它接受一個(gè)函數(shù)作為參數(shù)并返回一個(gè)新的函數(shù),在不改變原來函數(shù)代碼的情況下為其增加新的功能,比如最常用的計(jì)時(shí)裝飾器:

  1. from functools import wraps 
  2.  
  3. def timeit(logger=None): 
  4.     ""
  5.     耗時(shí)統(tǒng)計(jì)裝飾器,單位是秒,保留 4 位小數(shù) 
  6.     ""
  7.  
  8.     def decorator(func): 
  9.         @wraps(func) 
  10.         def wrapper(*args, **kwargs): 
  11.             start = time.time() 
  12.             result = func(*args, **kwargs) 
  13.             end = time.time() 
  14.             if logger: 
  15.                 logger.info(f"{func.__name__} cost {end - start :.4f} seconds"
  16.             else
  17.                 print(f"{func.__name__} cost {end - start :.4f} seconds"
  18.             return result 
  19.  
  20.         return wrapper 
  21.  
  22.     return decorator 

(注:比如上面使用 @wraps(func) 注解是很重要的, 它能保留原始函數(shù)的元數(shù)據(jù)) 只需要在原來的函數(shù)上面加上 @timeit() 即可為其增加新的功能:

  1. @timeit() 
  2. def test_timeit(): 
  3.     time.sleep(1) 
  4.  
  5. test_timeit() 
  6. #test_timeit cost 1.0026 seconds 

上面的代碼跟下面這樣寫的效果是一樣的:

  1. test_timeit = timeit(test_timeit) 
  2. test_timeit() 

裝飾器的執(zhí)行順序

當(dāng)有多個(gè)裝飾器的時(shí)候,他們的調(diào)用順序是怎么樣的?

假如有這樣的代碼,請問是先打印 Decorator1 還是 Decorator2 ?

  1. from functools import wraps 
  2.  
  3. def decorator1(func): 
  4.     @wraps(func) 
  5.     def wrapper(*args, **kwargs): 
  6.         print('Decorator 1'
  7.         return func(*args, **kwargs) 
  8.     return wrapper 
  9.  
  10. def decorator2(func): 
  11.     @wraps(func) 
  12.     def wrapper(*args, **kwargs): 
  13.         print('Decorator 2'
  14.         return func(*args, **kwargs) 
  15.     return wrapper 
  16.  
  17. @decorator1 
  18. @decorator2 
  19. def add(x, y): 
  20.     return x + y 
  21.  
  22. add(1,2) 
  23.  
  24. # Decorator 1 
  25. # Decorator 2 

回答這個(gè)問題之前,我先給你打個(gè)形象的比喻,裝飾器就像函數(shù)在穿衣服,離它最近的最先穿,離得遠(yuǎn)的最后穿,上例中 decorator1 是外套,decorator2 是內(nèi)衣。

  1. add = decorator1(decorator2(add)) 

在調(diào)用函數(shù)的時(shí)候,就像脫衣服,先解除最外面的 decorator1,也就是先打印 Decorator1,執(zhí)行到 return func(*args, **kwargs) 的時(shí)候會去解除 decorator2,然后打印 Decorator2,再次執(zhí)行到 return func(*args, **kwargs) 時(shí)會真正執(zhí)行 add() 函數(shù)。

需要注意的是打印的位置,如果打印字符串的代碼位于調(diào)用函數(shù)之后,像下面這樣,那輸出的結(jié)果正好相反:

  1. def decorator1(func): 
  2.     @wraps(func) 
  3.     def wrapper(*args, **kwargs): 
  4.         result = func(*args, **kwargs) 
  5.         print('Decorator 1'
  6.         return result 
  7.     return wrapper 
  8.  
  9. def decorator2(func): 
  10.     @wraps(func) 
  11.     def wrapper(*args, **kwargs): 
  12.         result = func(*args, **kwargs) 
  13.         print('Decorator 2'
  14.         return result 
  15.     return wrapper 

裝飾器不僅可以定義為函數(shù),也可以定義為類,只要你確保它實(shí)現(xiàn)了__call__() 和 __get__() 方法。

關(guān)于裝飾器的其他用法,可以參考前文:

  • 我是裝飾器
  • 再談裝飾器

元類

Python 中所有類(object)的元類,就是 type 類,也就是說 Python 類的創(chuàng)建行為由默認(rèn)的 type 類控制,打個(gè)比喻,type 類是所有類的祖先。我們可以通過編程的方式來實(shí)現(xiàn)自定義的一些對象創(chuàng)建行為。

定一個(gè)類繼承 type 類 A,然后讓其他類的元類指向 A,就可以控制 A 的創(chuàng)建行為。典型的就是使用元類實(shí)現(xiàn)一個(gè)單例:

  1. class Singleton(type): 
  2.     def __init__(self, *args, **kwargs): 
  3.         self._instance = None 
  4.         super().__init__(*args, **kwargs) 
  5.  
  6.     def __call__(self, *args, **kwargs): 
  7.         if self._instance is None: 
  8.             self._instance = super().__call__(*args, **kwargs) 
  9.             return self._instance 
  10.         else
  11.             return self._instance 
  12.  
  13.  
  14. class Spam(metaclass=Singleton): 
  15.     def __init__(self): 
  16.         print("Spam!!!"

元類 Singleton 的__init__和__new__ 方法會在定義 Spam 的期間被執(zhí)行,而 __call__方法會在實(shí)例化 Spam 的時(shí)候執(zhí)行。

如果想更好的理解元類,可以閱讀Python黑魔法之metaclass

descriptor 類(描述符類)

descriptor 就是任何一個(gè)定義了 __get__(),__set__()或 __delete__()的對象,描述器讓對象能夠自定義屬性查找、存儲和刪除的操作。這里舉官方文檔[1]一個(gè)自定義驗(yàn)證器的例子。

定義驗(yàn)證器類,它是一個(gè)描述符類,同時(shí)還是一個(gè)抽象類:

  1. from abc import ABC, abstractmethod 
  2.  
  3. class Validator(ABC): 
  4.  
  5.     def __set_name__(self, owner, name): 
  6.         self.private_name = '_' + name 
  7.  
  8.     def __get__(self, obj, objtype=None): 
  9.         return getattr(obj, self.private_name) 
  10.  
  11.     def __set__(self, obj, value): 
  12.         self.validate(value) 
  13.         setattr(obj, self.private_name, value) 
  14.  
  15.     @abstractmethod 
  16.     def validate(self, value): 
  17.         pass 

自定義驗(yàn)證器需要從 Validator 繼承,并且必須提供 validate() 方法以根據(jù)需要測試各種約束。

這是三個(gè)實(shí)用的數(shù)據(jù)驗(yàn)證工具:

OneOf 驗(yàn)證值是一組受約束的選項(xiàng)之一。

  1. class OneOf(Validator): 
  2.  
  3.     def __init__(self, *options): 
  4.         self.options = set(options) 
  5.  
  6.     def validate(self, value): 
  7.         if value not in self.options: 
  8.             raise ValueError(f'Expected {value!r} to be one of {self.options!r}'

Number 驗(yàn)證值是否為 int 或 float。根據(jù)可選參數(shù),它還可以驗(yàn)證值在給定的最小值或最大值之間。

  1. class Number(Validator): 
  2.  
  3.     def __init__(self, minvalue=None, maxvalue=None): 
  4.         self.minvalue = minvalue 
  5.         self.maxvalue = maxvalue 
  6.  
  7.     def validate(self, value): 
  8.         if not isinstance(value, (intfloat)): 
  9.             raise TypeError(f'Expected {value!r} to be an int or float'
  10.         if self.minvalue is not None and value < self.minvalue: 
  11.             raise ValueError( 
  12.                 f'Expected {value!r} to be at least {self.minvalue!r}' 
  13.             ) 
  14.         if self.maxvalue is not None and value > self.maxvalue: 
  15.             raise ValueError( 
  16.                 f'Expected {value!r} to be no more than {self.maxvalue!r}' 
  17.             ) 

String 驗(yàn)證值是否為 str。根據(jù)可選參數(shù),它可以驗(yàn)證給定的最小或最大長度。它還可以驗(yàn)證用戶定義的 predicate。

  1. class String(Validator): 
  2.  
  3.     def __init__(self, minsize=None, maxsize=None, predicate=None): 
  4.         self.minsize = minsize 
  5.         self.maxsize = maxsize 
  6.         self.predicate = predicate 
  7.  
  8.     def validate(self, value): 
  9.         if not isinstance(value, str): 
  10.             raise TypeError(f'Expected {value!r} to be an str'
  11.         if self.minsize is not None and len(value) < self.minsize: 
  12.             raise ValueError( 
  13.                 f'Expected {value!r} to be no smaller than {self.minsize!r}' 
  14.             ) 
  15.         if self.maxsize is not None and len(value) > self.maxsize: 
  16.             raise ValueError( 
  17.                 f'Expected {value!r} to be no bigger than {self.maxsize!r}' 
  18.             ) 
  19.         if self.predicate is not None and not self.predicate(value): 
  20.             raise ValueError( 
  21.                 f'Expected {self.predicate} to be true for {value!r}' 
  22.             ) 

實(shí)際應(yīng)用時(shí)這樣寫:

  1. class Component: 
  2.  
  3.     name = String(minsize=3, maxsize=10, predicate=str.isupper) 
  4.     kind = OneOf('wood''metal''plastic'
  5.     quantity = Number(minvalue=0) 
  6.  
  7.     def __init__(self, name, kind, quantity): 
  8.         self.name = name 
  9.         self.kind = kind 
  10.         self.quantity = quantity 

描述器阻止無效實(shí)例的創(chuàng)建:

  1. >>> Component('Widget''metal', 5)      # Blocked: 'Widget' is not all uppercase 
  2. Traceback (most recent call last): 
  3.     ... 
  4. ValueError: Expected <method 'isupper' of 'str' objects> to be true for 'Widget' 
  5.  
  6. >>> Component('WIDGET''metle', 5)      # Blocked: 'metle' is misspelled 
  7. Traceback (most recent call last): 
  8.     ... 
  9. ValueError: Expected 'metle' to be one of {'metal''plastic''wood'
  10.  
  11. >>> Component('WIDGET''metal', -5)     # Blocked: -5 is negative 
  12. Traceback (most recent call last): 
  13.     ... 
  14. ValueError: Expected -5 to be at least 0 
  15. >>> Component('WIDGET''metal''V')    # Blocked: 'V' isn't a number 
  16. Traceback (most recent call last): 
  17.     ... 
  18. TypeError: Expected 'V' to be an int or float 
  19.  
  20. >>> c = Component('WIDGET''metal', 5)  # Allowed:  The inputs are valid 

最后的話

關(guān)于 Python 的元編程,總結(jié)如下:

如果希望某些函數(shù)擁有相同的功能,希望不改變原有的調(diào)用方式、不寫重復(fù)代碼、易維護(hù),可以使用裝飾器來實(shí)現(xiàn)。

如果希望某一些類擁有某些相同的特性,或者在類定義實(shí)現(xiàn)對其的控制,我們可以自定義一個(gè)元類,然后讓它類的元類指向該類。

如果希望實(shí)例的屬性擁有某些共同的特點(diǎn),就可以自定義一個(gè)描述符類。

 

責(zé)任編輯:武曉燕 來源: Python七號
相關(guān)推薦

2024-07-30 14:46:55

2024-11-14 09:00:00

Python編程元編程

2021-03-09 23:12:51

Python集合項(xiàng)目

2011-07-05 17:19:47

元編程

2024-12-12 08:05:14

元類Python控制類

2016-11-01 09:18:33

Python閉包

2011-09-05 17:18:28

2011-05-26 13:43:30

MongoDB

2023-10-27 08:33:40

Go語言元編程

2021-05-31 20:06:57

網(wǎng)元協(xié)議網(wǎng)關(guān)

2020-05-07 10:05:52

Python數(shù)據(jù)安全

2020-05-06 16:47:08

線程安全Python數(shù)據(jù)安全

2020-12-22 09:32:36

JavaScripMixin mixins

2011-08-30 10:22:14

MongoDB

2021-01-06 10:09:38

MySQL

2021-07-16 10:32:33

前端元編程代碼

2016-10-25 14:27:32

metaclasspython

2013-12-20 11:02:08

池建強(qiáng)

2018-03-14 08:33:33

C++元編程云成本

2011-08-18 14:09:35

NoSQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产精品乱人伦| 日韩精品亚洲专区| 日韩午夜在线影院| 激情五月六月婷婷| 三区在线视频| 青青草97国产精品免费观看无弹窗版| 日韩一级黄色av| 色哟哟免费视频| 欧美三级网址| 一区二区三区不卡视频| 欧洲亚洲一区| 精品人妻一区二区三区换脸明星 | 2020日本不卡一区二区视频| 国产精品亚洲精品| 日韩av男人天堂| 91一区在线| 精品亚洲一区二区三区在线观看 | 国产人妻777人伦精品hd| porn视频在线观看| av中文一区二区三区| 国产这里只有精品| 加勒比在线一区| 亚洲福利久久| 久久夜色精品国产欧美乱| 中文字幕一区二区三区人妻不卡| 亚洲男人在线| 日本久久电影网| 成人一区二区免费视频| 成人影院www在线观看| 久久精品水蜜桃av综合天堂| 国产精品av一区| 99久久精品日本一区二区免费| 久久国产福利| 欧美做受高潮电影o| 久操免费在线视频| 最新精品国产| 成人97在线观看视频| 国产无遮挡在线观看| 国产不卡一区| 亚洲人成网站色ww在线| 亚洲av无码一区二区三区观看| 日韩黄色av| 91精品国产麻豆| 日本黄色的视频| 成人精品高清在线视频| 色94色欧美sute亚洲线路一久| 欧美一级视频免费看| 岛国片av在线| 午夜视频在线观看一区二区三区| av日韩在线看| 欧美人动性xxxxz0oz| 亚洲精品国久久99热| 偷拍盗摄高潮叫床对白清晰| 在线观看黄色av| 国产精品色婷婷| 一区二区三区av| 免费在线看黄网站| 亚洲精品乱码久久久久| 久久久久99精品成人片| 波多野结依一区| 亚洲成人av在线电影| 美女日批免费视频| 美女一区网站| 欧美系列日韩一区| 日本在线播放一区二区| 亚洲欧洲国产精品一区| 精品国产髙清在线看国产毛片| 久久精品aⅴ无码中文字字幕重口| 试看120秒一区二区三区| 精品久久五月天| 免费观看一级一片| 波多野结衣在线观看一区二区三区 | 日本在线视频1区| 久久看人人爽人人| 亚洲丰满在线| 国产成人高清精品| 亚洲成人av一区二区| 欧美成人黑人猛交| 日本午夜免费一区二区| 精品少妇一区二区三区视频免付费| 宇都宫紫苑在线播放| 国产精品国产| 伊是香蕉大人久久| 清纯粉嫩极品夜夜嗨av| 亚洲永久免费| 91精品久久久久久久久久入口| 精品人妻一区二区三区浪潮在线| 成人av电影在线网| 亚洲高清在线观看一区| 任你弄在线视频免费观看| 欧美性高潮床叫视频| 性chinese极品按摩| 伊人久久影院| 国产亚洲一级高清| 青娱乐国产在线视频| 日韩影院免费视频| 高清国产在线一区| 99se视频在线观看| 亚洲成av人在线观看| 午夜久久久精品| 欧美激情99| 久久av在线看| 美女又爽又黄免费视频| 国产精品亚洲午夜一区二区三区| 久久综合九色欧美狠狠| 91亚洲天堂| 欧美调教femdomvk| 久久福利小视频| 综合激情网站| 国产精品都在这里| 天堂av一区二区三区| 亚洲人成在线播放网站岛国 | 全网免费在线播放视频入口| 国产亚洲在线观看| 91精品国产一区二区三区动漫| 六十路在线观看| 亚洲国产精品欧美一二99| 性刺激的欧美三级视频| 欧美挤奶吃奶水xxxxx| 欧美人在线观看| 国产一区二区三区视频免费观看 | 三级黄色录像视频| 三级久久三级久久久| 久久精品国产美女| 牛牛精品在线| 欧美一级片在线看| 国产午夜精品久久久久久久久| 夜夜嗨一区二区三区| 99视频免费观看| 国产亚洲制服色| 91免费视频网站| 在线观看完整版免费| 色呦呦国产精品| 少妇光屁股影院| 日韩一区二区久久| 国产精华一区| 丰乳肥臀在线| 精品国产凹凸成av人导航| 杨钰莹一级淫片aaaaaa播放| 毛片av一区二区三区| 日韩av高清在线播放| 原纱央莉成人av片| 精品亚洲国产成av人片传媒 | 免费黄色片在线观看| 韩曰欧美视频免费观看| 久久久午夜精品福利内容| 亚洲大黄网站| 九九九久久久| 超碰aⅴ人人做人人爽欧美| 日韩av一卡二卡| 日本道在线观看| 91免费视频网| 日韩在线第三页| 日韩精品一区二区久久| 国产欧美精品一区二区三区-老狼| 大乳在线免费观看| 欧美美女bb生活片| √天堂中文官网8在线| 国产一区二区三区美女| 日韩一区二区高清视频| 成人动漫视频| 欧美性在线视频| www.亚洲视频| 91精品国模一区二区三区| 亚洲视频重口味| 国产91高潮流白浆在线麻豆 | 亚洲福利视频专区| 久久免费激情视频| 亚洲国产激情av| 日韩av片免费观看| 亚洲免费激情| 日本一区二区三区四区高清视频| www.精品国产| 九九精品视频在线观看| 五十路在线观看| 欧美性三三影院| 国产女片a归国片aa| 91网址在线看| 岛国av在线免费| 极品中文字幕一区| 日本一区免费观看| av在线亚洲一区| 77777亚洲午夜久久多人| 国产视频网站在线| 日韩视频在线观看一区二区| 91午夜视频在线观看| 国产精品日产欧美久久久久| 粗大的内捧猛烈进出视频| 新狼窝色av性久久久久久| 一本色道久久99精品综合| jizz性欧美23| 国产日韩欧美在线看| √天堂8资源中文在线| 伊人男人综合视频网| 女人18毛片水真多18精品| 欧美视频一区在线| 精品久久免费视频| 国产精品丝袜一区| a视频免费观看| 国产一区二区三区四区五区美女 | 99精品人妻国产毛片| 亚洲婷婷综合久久一本伊一区| 国产十八熟妇av成人一区| 九一久久久久久| 丰满爆乳一区二区三区| 亚洲精品国产偷自在线观看| 欧美极品色图| 97se亚洲| 亚洲va码欧洲m码| 日本一区免费网站| 97在线视频免费播放| 日本精品一区二区三区在线播放| 精品视频www| 亚洲男人第一天堂| 91麻豆精品国产自产在线| 亚洲成熟少妇视频在线观看| 午夜私人影院久久久久| 波多野结衣亚洲色图| 国产精品久久久久久久蜜臀| 日本xxx在线播放| 国产91富婆露脸刺激对白| 日本不卡一区二区在线观看| 手机精品视频在线观看| 免费无码毛片一区二三区| 亚洲无中文字幕| 伊人精品久久久久7777| 国产欧美日韩视频在线| 久久资源av| 日韩精品导航| 好看的日韩精品视频在线| 北条麻妃一区二区三区在线观看| 91夜夜揉人人捏人人添红杏| 香蕉久久久久久| 国产日韩在线精品av| jizz久久久久久| 国产精品亚洲网站| 国产精品xxx| 国产精品欧美激情在线播放| 国产精品毛片久久久久久久久久99999999| 91精品国产91久久| 美女搞黄视频在线观看| 性欧美长视频免费观看不卡| 99久久精品免费看国产小宝寻花| 欧美乱大交xxxxx另类电影| 免费超碰在线| 插插插亚洲综合网| 性国产高清在线观看| 欧美国产日韩二区| 99久久精品免费看国产小宝寻花| 久久免费视频这里只有精品| sm在线观看| 91爱爱小视频k| 美女一区网站| 国产精品亚洲一区二区三区| 小说区图片区亚洲| 亚洲综合日韩中文字幕v在线| 美女精品久久| 国产精品一区二区在线观看| 色婷婷狠狠五月综合天色拍 | 亚洲国产精品综合久久久| 警花观音坐莲激情销魂小说| 女同性一区二区三区人了人一| 久久久久久av无码免费网站下载| 在线国产欧美| aⅴ在线免费观看| 麻豆精品新av中文字幕| 久久精品一二三四| 成人久久18免费网站麻豆 | 欧美自拍视频在线| 欧美日韩激情电影| 国产日韩在线亚洲字幕中文| 午夜电影一区| 久久偷看各类wc女厕嘘嘘偷窃 | 中文字幕久热精品在线视频 | 极品美女一区二区三区| 亚洲综合视频一区| 国产精品mm| 成人免费无码av| 国产综合久久久久久久久久久久| 97中文字幕在线观看| 久久日韩精品一区二区五区| 久久成人小视频| 精品久久久久久久久久国产 | 欧美日韩精品在线观看视频| 亚洲超碰精品一区二区| 国产裸体美女永久免费无遮挡| 91精品国产欧美一区二区18| 日本一二三区在线视频| 久久av.com| 影视一区二区三区| 91传媒视频免费| 国产欧美日韩精品高清二区综合区| 香蕉视频在线网址| 噜噜噜久久亚洲精品国产品小说| 天堂av在线8| 91蝌蚪国产九色| 日韩女优一区二区| 在线观看亚洲一区| 日本高清视频在线| 久久精品国产成人| 日韩性xxx| 国内精品**久久毛片app| 欧美电影《睫毛膏》| 欧美三级一级片| 国产老肥熟一区二区三区| 亚洲图片另类小说| 午夜日韩在线观看| 国产日产亚洲系列最新| 亚洲香蕉伊综合在人在线视看| 三级福利片在线观看| 成人激情av在线| 不卡在线一区| 色综合av综合无码综合网站| 国产精品18久久久久久久久久久久 | 亚洲精品免费在线| 亚洲午夜精品久久久| 亚洲男女性事视频| 免费v片在线观看| 国产福利一区二区三区在线观看| 久久香蕉国产| 手机在线免费观看毛片| 久久久久一区二区三区四区| 国产一级一片免费播放| 日韩一区二区在线看| 麻豆网站视频在线观看| 国产精品日韩久久久久| 全球成人免费直播| 无需播放器的av| 国产欧美日韩久久| 波多野结衣视频观看| 亚洲免费视频在线观看| 色多多在线观看| 精品欧美一区二区在线观看视频 | 成年人免费在线播放| av动漫一区二区| 国产小视频在线免费观看| 亚洲激情视频在线| 牛牛精品一区二区| 精品国产乱码久久久久久久软件| 黄色国产精品| 日本一卡二卡在线| 欧美日韩国产黄| 三级在线播放| 国产成人精品久久久| 国产一区二区三区探花| 爱情岛论坛成人| 国产精品美女久久久久久久久| 在线观看视频二区| 精品精品国产国产自在线| 国产精品毛片无码| 国产 欧美 日本| a级高清视频欧美日韩| 1级黄色大片儿| 亚洲欧洲高清在线| 国产成人免费| 国产三级中文字幕| 国产91高潮流白浆在线麻豆| 天天插天天操天天干| 亚洲精品一区久久久久久| 日本在线视频一区二区| 色呦呦网站入口| 成人精品视频一区二区三区| 日本视频www| 亚洲一区二区久久| 欧美成人福利| 免费网站永久免费观看| 99麻豆久久久国产精品免费| 国产伦精品一区二区三区视频我 | 二区三区在线观看| 国产伦精品一区二区三区照片91| 亚洲欧洲另类| 国产一区二区三区四区在线| 91麻豆精品国产无毒不卡在线观看 | 97人妻精品一区二区三区动漫| 不卡av电影院| 欧美电影完整版在线观看| av免费网站观看| 亚洲免费在线视频| 亚洲人午夜射精精品日韩| 国产成人综合久久| 欧美二区视频| 国产av自拍一区| 91精品国产手机| 欧美男男激情videos| 亚洲一区二区三区免费观看| 国产99精品国产| youjizz在线视频| 久久夜色精品国产欧美乱| 日本久久成人网| 色婷婷一区二区三区在线观看| 亚洲成av人片在www色猫咪| yourporn在线观看中文站| 国产二区一区| 精品在线一区二区| 美女又爽又黄免费视频| 欧美成人免费在线视频| 精品freesex老太交| 亚洲熟女一区二区三区| 欧美日韩精品一区二区三区四区| 福利网站在线观看|