久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Python3標準庫之functools管理函數的工具詳解

瀏覽:72日期:2022-08-05 18:09:33
1. functools管理函數的工具

functools模塊提供了一些工具來調整或擴展函數和其他callable對象,從而不必完全重寫。

1.1 修飾符

functools模塊提供的主要工具就是partial類,可以用來“包裝”一個有默認參數的callable對象。得到的對象本身就是callable,可以把它看作是原來的函數。它與原函數的參數完全相同,調用時還可以提供額外的位置或命名函數。可以使用partial而不是lambda為函數提供默認參數,有些參數可以不指定。

1.1.1 部分對象

第一個例子顯示了函數myfunc()的兩個簡單partial對象。show_details()的輸出中包含這個部分對象(partial object)的func、args和keywords屬性。

import functoolsdef myfunc(a, b=2): 'Docstring for myfunc().' print(’ called myfunc with:’, (a, b))def show_details(name, f, is_partial=False): 'Show details of a callable object.' print(’{}:’.format(name)) print(’ object:’, f) if not is_partial: print(’ __name__:’, f.__name__) if is_partial: print(’ func:’, f.func) print(’ args:’, f.args) print(’ keywords:’, f.keywords) returnshow_details(’myfunc’, myfunc)myfunc(’a’, 3)print()# Set a different default value for ’b’, but require# the caller to provide ’a’.p1 = functools.partial(myfunc, b=4)show_details(’partial with named default’, p1, True)p1(’passing a’)p1(’override b’, b=5)print()# Set default values for both ’a’ and ’b’.p2 = functools.partial(myfunc, ’default a’, b=99)show_details(’partial with defaults’, p2, True)p2()p2(b=’override b’)print()print(’Insufficient arguments:’)p1()

在這個例子的最后,調用了之前創建的第一個partial,但沒有為a傳入一個值,這便會導致一個異常。

1.1.2 獲取函數屬性

默認的,partial對象沒有__name__或__doc__屬性。如果沒有這些屬性,被修飾的函數將更難調試。使用update_wrapper()可以從原函數將屬性復制或增加到partial對象。

import functoolsdef myfunc(a, b=2): 'Docstring for myfunc().' print(’ called myfunc with:’, (a, b))def show_details(name, f): 'Show details of a callable object.' print(’{}:’.format(name)) print(’ object:’, f) print(’ __name__:’, end=’ ’) try: print(f.__name__) except AttributeError: print(’(no __name__)’) print(’ __doc__’, repr(f.__doc__)) print()show_details(’myfunc’, myfunc)p1 = functools.partial(myfunc, b=4)show_details(’raw wrapper’, p1)print(’Updating wrapper:’)print(’ assign:’, functools.WRAPPER_ASSIGNMENTS)print(’ update:’, functools.WRAPPER_UPDATES)print()functools.update_wrapper(p1, myfunc)show_details(’updated wrapper’, p1)

增加到包裝器的屬性在WRAPPER_ASSIGNMENTS中定義,另外WARPPER_UPDATES列出了要修改的值。

1.1.3 其他callable

partial適用于任何callable對象,而不只是獨立的函數。

import functoolsclass MyClass: 'Demonstration class for functools' def __call__(self, e, f=6): 'Docstring for MyClass.__call__' print(’ called object with:’, (self, e, f))def show_details(name, f): 'Show details of a callable object.' print(’{}:’.format(name)) print(’ object:’, f) print(’ __name__:’, end=’ ’) try: print(f.__name__) except AttributeError: print(’(no __name__)’) print(’ __doc__’, repr(f.__doc__)) returno = MyClass()show_details(’instance’, o)o(’e goes here’)print()p = functools.partial(o, e=’default for e’, f=8)functools.update_wrapper(p, o)show_details(’instance wrapper’, p)p()

這個例子從一個包含__call__()方法的類實例中創建部分對象。

1.1.4 方法和函數

partial()返回一個可以直接使用的callable,partialmethod()返回的callable則可以用作對象的非綁定方法。在下面的例子中,這個獨立函數兩次被增加為MyClass的屬性,一次使用partialmethod()作為method1(),另一次使用partial()作為method2()。

import functoolsdef standalone(self, a=1, b=2): 'Standalone function' print(’ called standalone with:’, (self, a, b)) if self is not None: print(’ self.attr =’, self.attr)class MyClass: 'Demonstration class for functools' def __init__(self): self.attr = ’instance attribute’ method1 = functools.partialmethod(standalone) method2 = functools.partial(standalone)o = MyClass()print(’standalone’)standalone(None)print()print(’method1 as partialmethod’)o.method1()print()print(’method2 as partial’)try: o.method2()except TypeError as err: print(’ERROR: {}’.format(err))

method1()可以從MyClass的一個實例中調用,這個實例作為第一個參數傳入,這與采用通常方法定義的方法是一樣的。method2()未被定義為綁定方法,所以必須顯式傳遞self參數;否則,這個調用會導致TypeError。

1.1.5 獲取修飾符的函數屬性

更新所包裝callable的屬性對修飾符尤其有用,因為轉換后的函數最后會得到原“裸”函數的屬性。

import functoolsdef show_details(name, f): 'Show details of a callable object.' print(’{}:’.format(name)) print(’ object:’, f) print(’ __name__:’, end=’ ’) try: print(f.__name__) except AttributeError: print(’(no __name__)’) print(’ __doc__’, repr(f.__doc__)) print()def simple_decorator(f): @functools.wraps(f) def decorated(a=’decorated defaults’, b=1): print(’ decorated:’, (a, b)) print(’ ’, end=’ ’) return f(a, b=b) return decorateddef myfunc(a, b=2): 'myfunc() is not complicated' print(’ myfunc:’, (a, b)) return # The raw functionshow_details(’myfunc’, myfunc)myfunc(’unwrapped, default b’)myfunc(’unwrapped, passing b’, 3)print()# Wrap explicitlywrapped_myfunc = simple_decorator(myfunc)show_details(’wrapped_myfunc’, wrapped_myfunc)wrapped_myfunc()wrapped_myfunc(’args to wrapped’, 4)print()# Wrap with decorator syntax@simple_decoratordef decorated_myfunc(a, b): myfunc(a, b) returnshow_details(’decorated_myfunc’, decorated_myfunc)decorated_myfunc()decorated_myfunc(’args to decorated’, 4)

functools提供了一個修飾符wraps(),它會對所修飾的函數應用update_wrapper()。

1.2 比較

在Python 2中,類可以定義一個__cmp__()方法,它會根據這個對象小于、對于或者大于所比較的元素而分別返回-1、0或1.Python 2.1引入了富比較(rich comparison)方法API(__lt__()、__le__()、__eq__()、__ne__()、__gt__()和__ge__()) ,可以完成一個比較操作并返回一個布爾值。Python 3廢棄了__cmp__()而代之以這些新的方法,另外functools提供了一些工具,從而能更容易地編寫符合新要求的類,即符合Python 3中新的比較需求。

1.2.1 富比較

設計富比較API是為了支持涉及復雜比較的類,以最高效的方式實現各個測試。不過,如果比較相對簡單的類,就沒有必要手動地創建各個富比價方法了。total_ordering()類修飾符可以為一個提供了部分方法的類增加其余的方法。

import functoolsimport inspectfrom pprint import pprint@functools.total_orderingclass MyObject: def __init__(self, val): self.val = val def __eq__(self, other): print(’ testing __eq__({}, {})’.format( self.val, other.val)) return self.val == other.val def __gt__(self, other): print(’ testing __gt__({}, {})’.format( self.val, other.val)) return self.val > other.valprint(’Methods:n’)pprint(inspect.getmembers(MyObject, inspect.isfunction))a = MyObject(1)b = MyObject(2)print(’nComparisons:’)for expr in [’a < b’, ’a <= b’, ’a == b’, ’a >= b’, ’a > b’]: print(’n{:<6}:’.format(expr)) result = eval(expr) print(’ result of {}: {}’.format(expr, result))

這個類必須提供__eq__()和另外一個富比較方法的實現。這個修飾符會增加其余方法的實現,它們會使用所提供的比較。如果無法完成一個比較,這個方法應當返回NotImplemented,從而在另一個對象上使用逆比較操作符嘗試比較,如果仍無法比較,便會完全失敗。

1.2.2 比對序

由于Python 3廢棄了老式的比較函數,sort()之類的函數中也不再支持cmp參數。對于使用了比較函數的較老的程序,可以用cmp_to_key()將比較函數轉換為一個返回比較鍵(collation key)的函數,這個鍵用于確定元素在最終序列中的位置。

import functoolsclass MyObject: def __init__(self, val): self.val = val def __str__(self): return ’MyObject({})’.format(self.val)def compare_obj(a, b): '''Old-style comparison function. ''' print(’comparing {} and {}’.format(a, b)) if a.val < b.val: return -1 elif a.val > b.val: return 1 return 0# Make a key function using cmp_to_key()get_key = functools.cmp_to_key(compare_obj)def get_key_wrapper(o): 'Wrapper function for get_key to allow for print statements.' new_key = get_key(o) print(’key_wrapper({}) -> {!r}’.format(o, new_key)) return new_keyobjs = [MyObject(x) for x in range(5, 0, -1)]for o in sorted(objs, key=get_key_wrapper): print(o)

正常情況下,可以直接使用cmp_to_key(),不過這個例子中引入了一個額外的包裝器函數,這樣調用鍵函數時可以打印更多的信息。

如輸出所示,sorted()首先對序列中的每一個元素調用get_key_wrapper()以生成一個鍵。cmp_to_key()返回的鍵是functools中定義的一個類的實例,這個類使用傳入的老式比較函數實現富比較API。所有鍵都創建之后,通過比較這些鍵來對序列排序。

1.3 緩存

lru_cache()修飾符將一個函數包裝在一個“最近最少使用的”緩存中。函數的參數用來建立一個散列鍵,然后映射到結果。后續的調用如果有相同的參數,就會從這個緩存獲取值而不會再次調用函數。這個修飾符還會為函數增加方法來檢查緩存的狀態(cache_info())和清空緩存(cache_clear())。

import functools@functools.lru_cache()def expensive(a, b): print(’expensive({}, {})’.format(a, b)) return a * bMAX = 2 print(’First set of calls:’)for i in range(MAX): for j in range(MAX): expensive(i, j)print(expensive.cache_info())print(’nSecond set of calls:’)for i in range(MAX + 1): for j in range(MAX + 1): expensive(i, j)print(expensive.cache_info())print(’nClearing cache:’)expensive.cache_clear()print(expensive.cache_info())print(’nThird set of calls:’)for i in range(MAX): for j in range(MAX): expensive(i, j)print(expensive.cache_info())

這個例子在一組嵌套循環中執行了多個expensive()調用。第二次調用時有相同的參數值,結果在緩存中。清空緩存并再次運行循環時,這些值必須重新計算。

為了避免一個長時間運行的進程導致緩存無限制的擴張,要指定一個最大大小。默認為128個元素,不過對于每個緩存可以用maxsize參數改變這個大小。

import functools@functools.lru_cache(maxsize=2)def expensive(a, b): print(’called expensive({}, {})’.format(a, b)) return a * bdef make_call(a, b): print(’({}, {})’.format(a, b), end=’ ’) pre_hits = expensive.cache_info().hits expensive(a, b) post_hits = expensive.cache_info().hits if post_hits > pre_hits: print(’cache hit’)print(’Establish the cache’)make_call(1, 2)make_call(2, 3)print(’nUse cached items’)make_call(1, 2)make_call(2, 3)print(’nCompute a new value, triggering cache expiration’)make_call(3, 4)print(’nCache still contains one old item’)make_call(2, 3)print(’nOldest item needs to be recomputed’)make_call(1, 2)

在這個例子中,緩存大小設置為2個元素。使用第3組不同的參數(3,4)時,緩存中最老的元素會被清除,代之以這個新結果。

lru_cache()管理的緩存中鍵必須是可散列的,所以對于用緩存查找包裝的函數,它的所有參數都必須是可散列的。

import functools@functools.lru_cache(maxsize=2)def expensive(a, b): print(’called expensive({}, {})’.format(a, b)) return a * bdef make_call(a, b): print(’({}, {})’.format(a, b), end=’ ’) pre_hits = expensive.cache_info().hits expensive(a, b) post_hits = expensive.cache_info().hits if post_hits > pre_hits: print(’cache hit’)make_call(1, 2)try: make_call([1], 2)except TypeError as err: print(’ERROR: {}’.format(err))try: make_call(1, {’2’: ’two’})except TypeError as err: print(’ERROR: {}’.format(err))

如果將一個不能散列的對象傳入這個函數,則會產生一個TypeError。

1.4 縮減數據集

reduce()函數取一個callable和一個數據序列作為輸入。它會用這個序列中的值調用這個callable,并累加得到的輸出來生成單個值作為輸出。

import functoolsdef do_reduce(a, b): print(’do_reduce({}, {})’.format(a, b)) return a + bdata = range(1, 5)print(data)result = functools.reduce(do_reduce, data)print(’result: {}’.format(result))

這個例子會累加序列中的數。

可選的initializer參數放在序列最前面,像其他元素一樣處理。可以利用這個參數以新輸入更新前面計算的值。

import functoolsdef do_reduce(a, b): print(’do_reduce({}, {})’.format(a, b)) return a + bdata = range(1, 5)print(data)result = functools.reduce(do_reduce, data, 99)print(’result: {}’.format(result))

在這個例子中,使用前面的總和99來初始化reduce()計算的值。

如果沒有initializer參數,那么只有一個元素的序列會自動縮減為這個值。空列表會生成一個錯誤,除非提供一個initializer參數。

import functoolsdef do_reduce(a, b): print(’do_reduce({}, {})’.format(a, b)) return a + bprint(’Single item in sequence:’, functools.reduce(do_reduce, [1]))print(’Single item in sequence with initializer:’, functools.reduce(do_reduce, [1], 99))print(’Empty sequence with initializer:’, functools.reduce(do_reduce, [], 99))try: print(’Empty sequence:’, functools.reduce(do_reduce, []))except TypeError as err: print(’ERROR: {}’.format(err))

由于initializer參數相當于一個默認值,但也要與新值結合(如果輸入序列不為空),所以必須仔細考慮這個參數的使用是否適當,這很重要。如果默認值與新值結合沒有意義,那么最好是捕獲TypeError而不是傳入一個initializer參數。

1.5 泛型函數

在類似Python的動態類型語言中,通常需要基于參數的類型完成稍有不同的操作,特別是在處理元素列表與單個元素的差別時。直接檢查參數的類型固然很簡單,但是有些情況下,行為差異可能被隔離到單個的函數中,對于這些情況,functools提供了singledispatch()修飾符來注冊一組泛型函數(generic function),可以根據函數第一個參數類型自動切換。

import functools@functools.singledispatchdef myfunc(arg): print(’default myfunc({!r})’.format(arg))@myfunc.register(int)def myfunc_int(arg): print(’myfunc_int({})’.format(arg))@myfunc.register(list)def myfunc_list(arg): print(’myfunc_list()’) for item in arg: print(’ {}’.format(item))myfunc(’string argument’)myfunc(1)myfunc(2.3)myfunc([’a’, ’b’, ’c’])

新函數的register()屬性相當于另一個修飾符,用于注冊替代實現。用singledispatch()包裝的第一個函數是默認實現,在未指定其他類型特定函數時就使用這個默認實現,在這個例子中特定類型就是float。

沒有找到這個類型的完全匹配時,會計算繼承順序,并使用最接近的匹配類型。

import functoolsclass A: passclass B(A): passclass C(A): passclass D(B): passclass E(C, D): pass@functools.singledispatchdef myfunc(arg): print(’default myfunc({})’.format(arg.__class__.__name__))@myfunc.register(A)def myfunc_A(arg): print(’myfunc_A({})’.format(arg.__class__.__name__))@myfunc.register(B)def myfunc_B(arg): print(’myfunc_B({})’.format(arg.__class__.__name__))@myfunc.register(C)def myfunc_C(arg): print(’myfunc_C({})’.format(arg.__class__.__name__))myfunc(A())myfunc(B())myfunc(C())myfunc(D())myfunc(E())

在這個例子中,類D和E與已注冊的任何泛型函數都不完全匹配,所選擇的函數取決于類層次結構。

總結

到此這篇關于Python3標準庫之functools管理函數的工具詳解的文章就介紹到這了,更多相關Python3 functools管理函數工具內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 日韩一区二区三区在线观看 | 亚洲中国精品精华液 | 午夜视频免费网站 | 精品毛片 | 国产午夜视频在线观看 | 精品美女在线观看视频在线观看 | 久久久精品一区二区三区 | 日日骚视频 | 免费视频爱爱太爽了 | 免费黄色在线视频网址 | 一级毛片视频播放 | 一区二区免费在线观看 | 国产99999 | 国产在线一区二区 | 欧美激情a∨在线视频播放 成人免费共享视频 | 国产美女自拍视频 | 国产女人高潮视频在线观看 | 国产精品自拍视频网站 | 国产精品国产精品国产专区不片 | 欧美日韩精品 | 欧美精品一区二区三区手机在线 | 欧洲成人在线 | 日韩综合一区 | 成人在线免费视频 | 亚洲精品乱码久久久久久蜜桃 | 国产成人精品免高潮在线观看 | 成人免费一区二区三区视频网站 | 亚洲精品一区二区在线观看 | 青春草在线观看 | 欧美性www | 欧美日韩一区二区三区在线观看 | 日韩精品一区二区三区 | 97碰碰碰免费公开在线视频 | 天天干 夜夜操 | 国产成人精品一区二区三区视频 | 午夜久久av | 精品在线一区二区三区 | 亚洲国产精品一区 | 二区三区在线 | 亚洲不卡在线 | 亚洲激情视频在线播放 | 国产精品综合 | 国产精品www | 国产成人精品综合 | 久久国产综合 | 99热精品久久| 成人福利视频 | 精品国产91亚洲一区二区三区www | 91天堂| 亚洲女人天堂网 | 日韩在线欧美 | 91国自产精品中文字幕亚洲 | 成人深夜福利视频 | 岛国av免费 | 中文字幕在线视频一区 | 国产毛片在线 | 国产一级网站 | 欧美精品乱码久久久久久按摩 | 亚洲精品无 | 欧美性视频网站 | 国产一级片a | 黄色a视频 | 人人操日日干 | 久久这里只有精品免费 | 日韩人体在线 | 久草视频在线首页 | 日韩精品成人 | 欧美一级片 | 亚洲91 | 亚洲一二三区在线观看 | 免费在线观看成年人视频 | 中文天堂av| 日本一区二区三区四区 | 欧美激情第二页 | 亚洲一区国产精品 | 精品久久久久久久久久久久 | 久草免费在线 | 久久综合色视频 | 免费看黄视频网站 | 国精产品一区一区三区免费完 | 亚洲精品一区 | 日韩av在线中文字幕 | 国产精久久久久久久妇剪断 | 成人av在线网 | 精品国产欧美 | 在线观看免费的网站www | 天天干国产 | 免费看爱爱视频 | 国产中文字幕在线观看 | 97色综合| 精品永久| av一区二区在线观看 | 又黄又爽的网站 | 9999国产精品欧美久久久久久 | 伊人超碰| 国产视频1区 | 亚洲一区中文 | 亚洲网站在线播放 | 午夜电影网址 | 中文字幕久久精品 | 日韩第一区 | 免费在线观看国产 | 亚洲国产精品久久久久婷婷老年 | 丁香久久 | 久久九精品 | 久草精品视频 | 日韩中文字幕在线观看 | 欧美久久久久久久久久 | 精品久久久久久久久久久久 | 男女免费在线观看视频 | 国产精品久久精品 | 亚洲成人福利 | 国产精品网站在线观看 | 天堂久久一区 | 国产精品毛片一区二区三区 | 午夜一区二区三区在线观看 | 日日插日日操 | 久久e久久| 美女诱惑av | 国内精品久久久久久影视8 91一区二区在线观看 | 亚洲国产精品18久久 | 亚洲精品乱码久久久久久蜜桃不爽 | 91精品久久久久久久久久小网站 | 国产免费网址 | 嫩草视频网 | 国产中文在线 | 欧美一区免费 | 秋霞av电影| 久久久久国产精品免费免费搜索 | 欧美精品成人 | 国产免费高清 | 91视频播放 | 日韩精品观看 | 狠狠天天| 国产成人毛片 | 日韩一区二区三区在线观看 | 亚洲精品久久久久久久久久久久久 | 国产精彩视频 | 国产午夜精品美女视频明星a级 | 黄色国产大片 | 一区二区三区视频免费 | 色噜噜色综合 | 99综合 | 成人美女免费网站视频 | 国产欧美一区二区精品婷 | 综合视频一区二区三区 | 中文字幕av在线播放 | 久久一日本道色综合久久 | 99久久精品一区二区成人 | 国产一区色 | 麻豆产精国品免费入口 | av国产精品 | 99re6在线视频精品免费 | 81精品国产乱码久久久久久 | 国产一区二区自拍视频 | 精品第一页 | 精品成人免费一区二区在线播放 | 国产欧美精品一区二区三区四区 | 九九热这里只有精品在线观看 | 日韩在线视频中文字幕 | 亚洲精选国产 | 亚洲精品视频免费 | 91色站 | 中文字幕精品一区 | 精品成人av | 中文字幕在线视频网站 | 亚洲一区二区日韩 | 成人欧美一区二区三区视频xxx | 超碰成人在线免费 | 欧美一区在线看 | 久久久久久久国产 | 国产视频中文字幕 | 午夜精品久久久久久久星辰影院 | 亚洲免费在线观看 | 亚洲黄色高清视频 | 第四色影音先锋 | 色av一区| 91精品国产综合久久久久久漫画 | 在线视频中文字幕 | 日韩在线色 | 91成人在线免费视频 | 可以在线观看的黄色 | 毛片站 | 日本色网址| 欧美在线视频一区二区 | 国产图区 | 国产视频一区二区 | 亚洲欧美一区二区三区不卡 | 一级电影免费看 | 免费成人在线网站 | 激情欧美日韩一区二区 | 欧美一级在线观看 | 亚洲激情视频在线观看 | 中文字幕本久久精品一区 | 欧美一级黄色网 | 久久国产一区二区 | 欧美成人一区二免费视频软件 | 凹凸日日摸日日碰夜夜爽孕妇 | 羞羞视频免费观看网站 | 色欧美片视频在线观看 | 五月天狠狠爱 | 中文一区 | 97精品国产97久久久久久粉红 | 日本久久久久久 | 人人干网站 | 亚洲不卡网站 | 一级片在线观看免费 | 久久久一区二区 | 国产中文字幕一区 | 成年人性视频 | 日韩欧美在线一区二区 | 亚洲国产精品99久久久久久久久 | 中文字幕一区二区三区四区 | 成人tv| 成人午夜精品久久久久久久3d | jizz18毛片 | 国产精品久久久一区 | 欧美日韩综合精品 | 国产一区二区免费 | 国产精品欧美一区二区三区不卡 | 日韩毛片免费看 | 99热新 | 久久久久国产精品一区二区三区 | 精品视频久久 | 日韩av一区二区在线观看 | 国产亲子乱弄免费视频 | 成人精品视频免费在线观看 | 四虎影院在线 | 伊人色播 | 四虎影音 | 久久免费99精品久久久久久 | 中文字幕av一区二区三区免费看 | 91久久精品国产亚洲a∨麻豆 | 欧美白人做受xxxx视频 | 亚洲无吗视频 | 亚洲欧美高清 | 久草免费在线视频 | 国产在线一级片 | 91在线精品秘密一区二区 | 亚洲h网站| 一区二区三区在线免费观看 | 国产精品女同一区二区久久夜 | 精品国产乱码久久久久久1区2区 | 亚洲精品午夜视频 | 成人精品一区二区三区 | 二区三区在线 | 国产欧美精品一区二区三区四区 | 羞羞视频在线观免费观看 | 天天干夜干 | av网站免费| 麻豆色呦呦 | 亚洲国产伊人 | 午夜私人影院在线观看 | 欧美精品网站 | 免费看的黄色网 | 成人免费在线视频 | 一区二区三区四区在线 | 久久国产一区 | 老司机福利在线观看 | 91精品国产乱码久久久久久久久 | 国产成人在线免费观看视频 | 一区二区三区免费看 | 欧美激情精品久久久久久免费 | 国产欧美久久久久久 | 久久久久亚洲精品 | 国产精品一二三区 | 国产亚洲欧美在线 | 亚洲一区二区三区免费视频 | 日韩视频在线一区二区 | 欧美一区二区三区男人的天堂 | 日本久久网 | 欧美激情视频一区二区三区在线播放 | 一级一片免费视频 | 免费h | 婷婷色国产偷v国产偷v小说 | 日韩精品1区| 日日爱夜夜爱 | 亚洲欧洲精品视频 | 99亚洲| 91国产精品 | 精品国产成人 | 精精国产xxxx视频在线 | 九九亚洲视频 | 国产高清一区二区三区 | 成人亚洲天堂 | 91香蕉视频 | 久久66 | 91综合网| 超碰人人插 | 91大神免费观看 | 成人午夜电影网 | 国产福利电影一区 | 91精品国产综合久久福利软件 | 欧美 日韩 国产 成人 在线 | 日韩av一区二区三区在线 | 亚洲国产精品久久久 | 亚洲国产精品一区二区久久 | 另类一区 | 欧美另类一二三四 | 成人区一区二区三区 | 7777久久| 欧美精品www | 成人精品网站在线观看 | 久久久久久久久久久久福利 | 中文字幕一区二区三区不卡 | 日本高清视频网站www | 最近免费中文字幕大全免费版视频 | 国产一级色 | 日韩精品小视频 | 成人欧美一区二区三区 | 欧美一级一区 | 鲁一鲁综合 | 国产高清在线精品一区二区三区 | 亚洲毛片在线 | 欧美五月| 狠狠天天 | 久久久久久亚洲 | 久操成人 | 欧美一级二级视频 | 91在线高清观看 | 欧洲视频一区二区 | 午夜天堂精品久久久久 | 羞羞视频在线免费 | 午夜久久久久 | 狠狠久久伊人中文字幕 | 97伦理电影网 | 国产精品亚洲视频 | 中文字幕日韩一区二区 | 国产一区在线观看视频 | 狠狠躁天天躁夜夜添人人 | 欧美视频网站 | 国产男女做爰免费网站 | 欧美日本一区二区三区 | 国产色 | 国产成人精品在线观看 | 国产艹| 日韩一区二区三区在线视频 | 久久精品欧美 | 人人人人澡 | 成人在线免费 | 在线免费黄色小视频 | 国产麻豆乱码精品一区二区三区 | 久久亚洲综合 | 91久久综合 | 小草av | 成人免费视频观看视频 | 精品久久久久一区二区国产 | 久久久久久99精品 | 精品一区二区三区免费毛片爱 | 欧美日韩视频第一页 | 精品欧美一区二区三区久久久 | 狠狠狠干 | 视频在线一区二区 | 91久久久久久久久 | 久久精品亚洲精品 | 午夜精品久久久久久99热软件 | 中文字幕日韩在线 | 色综合一区| 国产女人爽到高潮免费视频 | 中文字幕一页二页 | 狠狠中文字幕 | 一级片在线观看 | 中文成人在线 | 久草网在线视频 | 国产中文视频 | 国产精品一区久久久 | 亚洲精品66 | 久久久久久久久成人 | 一级黄色片视频 | 国产一区二区三区不卡在线观看 | 欧美大片一区二区 | 久草视频国产 | 综合久久综合久久 | 毛片站| 亚洲精品乱码久久久久久久久 | 亚洲精品电影在线观看 | 成人精品视频一区二区三区 | 国产精品亲子伦av一区二区三区 | 国产成人在线免费观看视频 | 久草 在线 | 国产午夜精品久久久久久久 | 国产91色在线 | 亚洲 | 日韩在线视频在线观看 | www.色综合 | 一级在线观看视频 | 国产精品久久久久久久久污网站 | 精品国产一区二区三区成人影院 | 国产精品日韩三级 | 亚洲天堂中文字幕 | 久久精品亚洲一区二区 | 国产精品久久久久影院色老大 | 国产伦精品一区二区三区高清 | 欧美一区第一页 | 九一亚洲精品 | 精品一区二区不卡 | 日本三级做a全过程在线观看 | 成人一区视频 | 欧美日韩在线一区 | 亚洲精品在线免费 | 欧美激情网址 | 亚洲精品一区二区三区中文字幕 | 中文字幕在线免费 | av网站免费看 | 久久久国产一区二区 | jizz欧美大片| 久久精品亚洲 | 久草成人网 | 99久久99久久精品国产片果冻 | 国产精品久久久久久久久久妞妞 | 国精产品一区二区三区 | 国产一级网站 | 国产91麻豆视频 | 亚洲国产精品自拍 | 狠狠躁天天躁夜夜添人人 | 免费国产视频 | 樱桃小丸子在线观看 | 国产一区二区三区视频 | 超碰在线一区二区三区 | 日韩精品视频三区 | 国产免费自拍av | 偷拍自拍网站 | 欧美性猛交一区二区三区精品 | 性一级录像片片视频免费看 | 欧美乱轮 | 中文字幕视频在线 | 三级免费网站 | 一区二区国产精品 | 电家庭影院午夜 | 国产精品久久久久久久久 | 激情亚洲| 国产一区二区在线免费 | 美女久久 | 久久国产精品99久久久久久牛牛 | 久久久999精品视频 五月天婷婷在线视频 | 成人看片免费网站 | 久久久久久国产免费视网址 | 欧日韩毛片 | 国产精品视频一区二区三区四蜜臂 | 亚洲一区中文字幕在线观看 | 精品久久网 | 黄色毛片av | 国产午夜精品一区二区 | 国产精品久久久久久久 | 91精品久久久久久久久久入口 | 成人欧美一区二区三区在线播放 | 亚洲成av人片一区二区梦乃 | 天天av网| 精品中文字幕一区二区 | 成人在线视频网站 | 国产毛片精品 | 成人一区二区三区在线 | 日韩精品专区在线影院重磅 | 亚洲精品粉嫩美女一区 | 久久中文字幕一区二区三区 | 成人 在线 | 91精品国产欧美一区二区 | 91精品久久久久久 | 中文字幕成人 | 亚欧毛片| 九草在线 | 成人在线免费 | 精品久久久久久久久久久 | 日韩激情网 | 成人免费一区二区三区 | 亚洲无吗电影 | 国产一区二区三区在线看 | 欧美在线小视频 | 浴室洗澡偷拍一区二区 | 自拍偷拍专区 | 国产精品久久免费观看spa | av三级在线观看 | 日本人做爰大片免费观看一老师 | 久久狠狠 | 亚洲电影一区 | 午夜成人免费视频 | 亚洲一二三区在线观看 | 精品无码久久久久久国产 | h片在线免费观看 | 中文一区 | 国产精品视频一二 | 特级淫片女子高清视频在线观看 | 国产女人爽到高潮免费视频 | 视频一区在线 | 黑人巨大精品欧美一区免费视频 | 欧美日韩视频 | 成人av福利 | 欧美性福| 日韩精品在线免费观看视频 | 在线观看亚洲大片短视频 | 久久99国产精品久久99大师 | 精品久久久久久 | 求av网址| 小草av| 黄色成人在线 | 亚洲毛片在线观看 | 日韩大尺度在线观看 | a欧美 | 日韩视频免费 | 99精品网 | 日本一区二区精品 | 四虎影院入口 | 国产福利视频 | 久99视频 | 在线久草| 久久无码精品一区二区三区 | 在线中文av| 久久综合九九 | 久久久久久久久国产精品 | 国产精品一区久久久久 | 国产99精品 | 日韩精品免费在线观看 | 日韩一区二区不卡 | 91在线看 | 日韩色综合 | 韩日在线观看视频 | 国产精品久久久久免费 | 欧美精品片 | 国产女人免费看a级丨片 | 久久99影视| 一区二区三区不卡视频 | 久久久国产一区二区三区 | 精品国产一区一区二区三亚瑟 | 欧美日韩电影一区二区 | 精品国产精品三级精品av网址 | 综合网视频| 国产毛片视频 | 日韩中文字幕a | 日韩欧美久久 | 中文字幕成人网 | 中文字幕亚洲欧美 | 成人精品电影 | 日产欧产va高清 | 91偷拍精品一区二区三区 | 日韩国产欧美亚洲 | www97影院| 久草成人网 | 国产福利片在线观看 | 成年人在线观看 | 激情六月综合 | 久久国产精品一区 | 日韩黄视频 | 国产中文字幕在线观看 | 亚洲欧美在线免费观看 | 中文字幕在线免费播放 | 久久国内精品 | 精品一区二区三区蜜桃 | 亚洲一区二区三区四区在线观看 | 狠狠操天天操 | 欧美成人精品激情在线观看 | 国产欧美一区二区精品忘忧草 | 91视频国内 | 国产成人综合在线 | 四虎精品在线 | 国产目拍亚洲精品99久久精品 | 午夜精品久久久久久久男人的天堂 | 日韩爱爱网 | 日韩在线一区二区三区 | 亚洲h视频| 欧美激情一区二区三区在线视频 | 精品国产精品国产偷麻豆 | 国产在线日韩 | 亚洲国产精品99久久久久久久久 | 中文字幕电影在线 | 人人干网站 | 久久永久视频 | 精品一区久久 | 日韩欧美在线观看一区二区三区 | 成版人性视频 | 日韩在线永久免费播放 | 日韩中文字幕av在线 | 久久久久久久久一区二区三区 | 亚洲精品乱码 | 91精品久久久久久久久 | 国产精品资源在线 | 不卡日韩在线 | 日韩欧美在线一区 | 国产乱码精品一区二区三区手机版 | www国产成人免费观看视频,深夜成人网 | 日韩高清国产一区在线 | 日韩成人在线视频 | 成人自拍视频 | 国产精品久久久久久久久 | 91久久国产综合久久 | 男女黄色免费网站 | 夏同学福利网 | 国产99久久精品 | 日韩一区二区三区在线视频 | 国产一区二区三区久久 | 免费毛片网 | 欧美亚洲啪啪 | 国产精品久久久久久久久久免费看 | 精品国产一区二区三区在线观看 | www.亚洲一区二区 | 国产精品久久久久久一区二区三区 | 亚洲一区二区在线电影 | 婷婷久久五月 | 国产女无套免费网站 | www.日韩系列| 日韩一区二区在线播放 | 国产高清一级毛片在线不卡 | 欧美高清视频一区二区三区 | 永久91嫩草亚洲精品人人 | 成人精品视频 | 一区二区在线看 | 亚洲精品久久久久久久久久久 | 日韩精品在线免费观看 | 国产a级毛片| 欧美伦理一区二区三区 | 天天摸夜夜操 | 国产亚洲精品综合一区91555 | 国产不卡在线观看 | 91精品国产一区二区三区蜜臀 | 亚洲视频中文字幕 | 综合五月 | 欧美成人精品在线视频 |