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

Python 隱藏法寶:雙下劃線 _ _Dunder_ _

開發 前端
對于大多數 Python 開發者來說,他們遇到的第一個 dunder 是?__init__,構造函數方法。當您創建一個類的實例時,這個方法會被自動調用,使用熟悉的語法?MyClass(*args, **kwargs)作為顯式調用?MyClass.__init__(*args, **kwargs)?的快捷方式。

你可能不知道,Python里那些用雙下劃線包裹的"魔法方法"(Dunder方法),其實是提升代碼質量的絕佳工具。但有趣的是,很多經驗豐富的開發者對這些方法也只是一知半解。

先說句公道話: 這其實情有可原。因為在多數情況下,Dunder方法的作用是"錦上添花"——它們能讓代碼更簡潔規范,但不用它們也能完成任務。有時候我們甚至不知不覺就在使用這些特殊方法了。

如果你符合以下任一情況:

  • 經常用Python但不太了解這個特性
  • 像我一樣癡迷編程語言的精妙設計
  • 想讓代碼既專業又優雅

那么,這篇文章就是為你準備的!我們將探索如何巧妙運用這些"魔法方法"來:

  • 大幅簡化代碼邏輯
  • 提升代碼可讀性
  • 寫出更Pythonic的優雅代碼

表象會騙人......即使在 Python 中也是如此!

如果說我在生活中學到了什么,那就是并非所有東西都像第一眼看上去那樣,Python 也不例外。

看一個看似簡單的例子:

class EmptyClass:
  pass

這是我們可以在 Python 中定義的最 “空” 的自定義類,因為我們沒有定義屬性或方法。它是如此的空,你會認為你什么也做不了。

然而,事實并非如此。例如,如果您嘗試創建該類的實例,甚至比較兩個實例是否相等,Python 都不會抱怨:

empty_instance = EmptyClass()
another_empty_instance = EmptyClass()
empty_instance == another_empty_instance
False

當然,這并不是魔法。簡單地說,利用標準的 object 接口,Python 中的任何對象都繼承了一些默認屬性和方法,這些屬性和方法可以讓用戶與之進行最少的交互。

雖然這些方法看起來是隱藏的,但它們并不是不可見的。要訪問可用的方法,包括 Python 自己分配的方法,只需使用 dir() 內置函數。對于我們的空類,我們得到

>>> dir(EmptyClass)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', 
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', 
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', 
'__str__', '__subclasshook__', '__weakref__']

正是這些方法可以解釋我們之前觀察到的行為。例如,由于該類實際上有一個__init__方法,我們就不應該對我們可以實例化一個該類的對象感到驚訝。

Dunder方法

最后輸出中顯示的所有方法都屬于一個特殊的群體--猜猜看--dunder 方法。dunder 是雙下劃線(double underscore)的縮寫,指的是這些方法名稱開頭和結尾的雙下劃線。

它們之所以特殊,有以下幾個原因:

  1. 它們內置于每個對象中:每個 Python 對象都配備了由其類型決定的一組特定的 dunder 方法。
  2. 它們是隱式調用的:許多 dunder 方法是通過與 Python 本機運算符或內置函數的交互自動觸發的。例如,用 == 比較兩個對象相當于調用它們的 __eq__方法。
  3. 它們是可定制的:您可以覆蓋現有的 dunder 方法,或者為您的類定義新的方法,以便在保留隱式調用的同時賦予它們自定義的行為。

對于大多數 Python 開發者來說,他們遇到的第一個 dunder 是 __init__,構造函數方法。當您創建一個類的實例時,這個方法會被自動調用,使用熟悉的語法 MyClass(*args, **kwargs)作為顯式調用 MyClass.__init__(*args, **kwargs) 的快捷方式。

盡管是最常用的方法,__init__ 也是最專業的 dunder 方法之一。它沒有充分展示 dunder 方法的靈活性和強大功能,而這些方法可以讓您重新定義對象與原生 Python 特性的交互方式。

使對象漂亮

定義一個類來表示商店中出售的物品,并通過指定名稱和價格來創建一個實例。

class Item:
    def __init__(self, name: str, price: float) -> None:
        self.name = name
        self.price = price


item = Item(name="Milk (1L)", price=0.99)

如果我們嘗試顯示 item 變量的內容,會發生什么?現在,Python 所能做的就是告訴我們它是什么類型的對象,以及它在內存中的分配位置:

item
<__main__.Item at 0x00000226C614E870>

試著得到一個信息量更大、更漂亮的輸出!

要做到這一點,我們可以覆蓋 __repr__ dunder,當在交互式 Python 控制臺中鍵入一個類實例時,它的輸出將完全是打印出來的,而且--只要沒有覆蓋另一個 dunder 方法 __str__ --當試圖調用 print() 時也是如此。

注意:通常的做法是讓 __repr__ 提供重新創建打印實例所需的語法。因此,在后一種情況下,我們希望輸出Item(name="Milk(1L)", price=0.99)

class Item:
    def __init__(self, name: str, price: float) -> None:
        self.name = name
        self.price = price

    def __repr__(self) -> str:
        return f"{self.__class__.__name__}('{self.name}', {self.price})"


item = Item(name="Milk (1L)", price=0.99)

item # In this example it is equivalent also to the command: print(item)
Item('Milk (1L)', 0.99)

沒什么特別的吧?你說得沒錯:我們本可以實現同樣的方法,并將其命名為 *my_custom_repr*,而不需要使用indo dunder 方法。然而,雖然任何人都能立即理解 print(item) 或 item 的意思,但 item.my_custom_repr() 這樣的方法也能理解嗎?

定義對象與 Python 本地運算符之間的交互

假設我們想創建一個新類,即 Grocery,它允許我們建立一個 Item 及其數量的集合。

在這種情況下,我們可以使用 dunder 方法來進行一些標準操作,例如

  1. 使用 + 運算符將特定數量的 Item 添加到 Grocery 中
  2. 使用 for 循環直接遍歷 Grocery 類
  3. 使用括號 [] 符號從 Grocery 類中訪問特定的 Item

為了實現這一目標,我們將定義(我們已經看到泛型類默認情況下沒有這些方法)dunder 方法 __add____iter__ 和__getitem__

from typing import Optional, Iterator
from typing_extensions import Self


class Grocery:

    def __init__(self, items: Optional[dict[Item, int]] = None):
        self.items = items or dict()

    def __add__(self, new_items: dict[Item, int]) -> Self:

        new_grocery = Grocery(items=self.items)

        for new_item, quantity in new_items.items():

            if new_item in new_grocery.items:
                new_grocery.items[new_item] += quantity
            else:
                new_grocery.items[new_item] = quantity

        return new_grocery

    def __iter__(self) -> Iterator[Item]:
        return iter(self.items)

    def __getitem__(self, item: Item) -> int:

        if self.items.get(item):
            return self.items.get(item)
        else:
            raise KeyError(f"Item {item} not in the grocery")

初始化一個 Grocery 實例,并打印其主要屬性 items. 的內容。

item = Item(name="Milk (1L)", price=0.99)
grocery = Grocery(items={item: 3})

print(grocery.items)
{Item('Milk (1L)', 0.99): 3}

然后,我們使用 + 運算符添加一個新項目,并驗證更改是否已生效。

new_item = Item(name="Soy Sauce (0.375L)", price=1.99)
grocery = grocery + {new_item: 1} + {item: 2}

print(grocery.items)
{Item('Milk (1L)', 0.99): 5, Item('Soy Sauce (0.375L)', 1.99): 1}

既友好又明確,對嗎?

通過 __iter__ 方法,我們可以按照該方法中實現的邏輯對一個 Grocery 對象進行循環(即,隱式循環將遍歷可遍歷屬性 items 中包含的元素)。

print([item for item in grocery])
[Item('Milk (1L)', 0.99), Item('Soy Sauce (0.375L)', 1.99)]

同樣,訪問元素也是通過定義 __getitem__ 函數來處理的:

>>> grocery[new_item]
1

fake_item = Item("Creamy Cheese (500g)", 2.99)
>>> grocery[fake_item]
KeyError: "Item Item('Creamy Cheese (500g)', 2.99) not in the grocery"

從本質上講,我們為 Grocery 類分配了一些類似字典的標準行為,同時也允許進行一些該數據類型本機無法進行的操作。

增強功能:使類可調用,以實現簡單性和強大功能。

最后,讓我們用一個示例來結束對 dunder 方法的深入探討,展示它們如何成為我們的強大工具。

想象一下,我們實現了一個函數,它可以根據特定輸入執行確定性的慢速計算。為了簡單起見,我們將以一個內置 time.sleep 為幾秒的標識函數為例。

import time 

def expensive_function(input):
    time.sleep(5)
    return input

如果我們對同一輸入運行兩次函數,會發生什么情況?那么,現在計算將被執行兩次,這意味著我們將兩次獲得相同的輸出,在整個執行時間內等待兩次(即總共 10 秒)。

start_time = time.time()

>>> print(expensive_function(2))
>>> print(expensive_function(2))
>>> print(f"Time for computation: {round(time.time()-start_time, 1)} seconds")
2
2
Time for computation: 10.0 seconds

這合理嗎?為什么我們要對相同的輸入進行相同的計算(導致相同的輸出),尤其是在計算過程很慢的情況下?

一種可能的解決方案是將該函數的執行 “封裝 ”在類的 __call__ dunder 方法中。

這使得類的實例可以像函數一樣被調用--這意味著我們可以使用簡單的語法 my_class_instance(\*args,\**kwargs) --同時也允許我們使用屬性作為緩存來減少計算時間。

通過這種方法,我們還可以靈活地創建多個進程(即類實例),每個進程都有自己的本地緩存。

class CachedExpensiveFunction:

    def __init__(self) -> None:
        self.cache = dict()

    def __call__(self, input):
        if input not in self.cache:
            output = expensive_function(input=input)
            self.cache[input] = output
            return output
        else:
            return self.cache.get(input)


start_time = time.time()
cached_exp_func = CachedExpensiveFunction()

>>> print(cached_exp_func(2))
>>> print(cached_exp_func(2))
>>> print(f"Time for computation: {round(time.time()-start_time, 1)} seconds")
2
2
Time for computation: 5.0 seconds

不出所料,函數在第一次運行后會被緩存起來,這樣就不需要進行第二次計算,從而將總時間縮短了一半。

如上所述,如果需要,我們甚至可以創建該類的獨立實例,每個實例都有自己的緩存。

start_time = time.time()
another_cached_exp_func = CachedExpensiveFunction()

>>> print(cached_exp_func(3))
>>> print(another_cached_exp_func (3))
>>> print(f"Time for computation: {round(time.time()-start_time, 1)} seconds")
3
3
Time for computation: 10.0 seconds

dunder 方法是一個簡單而強大的優化技巧,它不僅可以減少冗余計算,還可以通過本地特定實例緩存提供靈活性。

寫在最后

Dunder方法(就是那些用雙下劃線__包裹的特殊方法)在Python中是個很大的話題,而且還在不斷豐富。這篇文章當然沒法面面俱到地講完所有內容。

我寫這些主要是想幫你弄明白兩件事:

  1. Dunder方法到底是什么?
  2. 怎么用它們解決實際編程中常見的問題?

說實話,不是每個程序員都必須掌握這些方法。但就我個人經驗來說,當我真正搞懂它們之后,寫代碼的效率提高了很多。相信對你也會很有幫助。

使用Dunder方法最大的好處就是:

  • 不用重復造輪子
  • 讓代碼更簡潔易讀
  • 更符合Python的編程風格
責任編輯:武曉燕 來源: 數據STUDIO
相關推薦

2023-11-29 18:11:17

Python代碼

2020-09-22 09:41:48

Python下劃線開發

2023-11-09 08:55:17

Python雙下劃線

2021-08-08 22:27:13

Python下劃線方法

2010-03-04 10:35:51

Python下劃線

2024-08-20 16:32:37

python接口自動化

2021-07-31 19:21:34

Python下劃線數值

2021-12-26 22:55:26

Python下劃線編程

2024-08-16 22:00:38

2013-07-24 19:27:45

iOS開發學習自定義帶下劃線文本UI

2020-10-24 11:09:35

Python下劃線用法

2014-05-08 10:36:59

CSS單詞連字符

2021-10-20 07:36:03

Python構造方法

2010-01-20 14:13:33

C++變量

2022-01-27 22:50:01

鏈表雙指針結構

2022-12-19 15:12:34

python運算符

2023-11-30 08:21:33

2024-09-26 10:44:53

MySQL數據庫數據

2015-07-22 17:21:34

Oracle數據字典

2009-07-10 14:58:13

JLabel組件JFC和Swing
點贊
收藏

51CTO技術棧公眾號

亚洲伦理一区| 国产精品美女久久久久| 久久婷婷成人综合色| 国产精品99免视看9| 五月婷婷综合色| 亚洲无码久久久久久久| 欧美女人交a| 亚洲精品自拍视频| 加勒比av中文字幕| 在线观看网站免费入口在线观看国内| 久久久www免费人成精品| 成人精品久久久| 青草视频在线观看免费| 911精品美国片911久久久| 亚洲成人精品视频| 性猛交ⅹ×××乱大交| 345成人影院| 亚洲一级二级三级| 欧美日韩一级在线| yw视频在线观看| 成人av网址在线| 91免费版网站入口| 精品黑人一区二区三区| 激情综合网址| 久久手机免费视频| 国产精品理论在线| 亚洲综合图色| 亚洲国产一区二区三区四区| 韩国一区二区在线播放| 51一区二区三区| 日韩欧美在线国产| 岛国大片在线播放| 少妇av在线| 亚洲人成人一区二区在线观看| 欧美一级日本a级v片| 少妇荡乳情欲办公室456视频| 国产在线精品视频| 成人激情视频免费在线| 一级特黄录像免费看| 可以免费看不卡的av网站| 午夜精品久久久久久久99热 | www.久久久久久久| av不卡免费看| 午夜精品久久久久久久99热| 国产在线拍揄自揄拍无码视频| 91精品推荐| 久久成年人视频| 国产性生活大片| 99久久夜色精品国产亚洲96| 日韩在线视频网| 亚欧精品视频一区二区三区| 精品久久成人| 国产一区二区三区视频| 免费看日本黄色片| 欧美三级美国一级| 色一情一乱一区二区| 国产一二三四视频| 小小影院久久| 久久综合久久八八| 欧美成人精品欧美一级私黄| 欧美在线三级| 韩日欧美一区二区| 国产免费观看av| 久久久水蜜桃av免费网站| 欧美又大粗又爽又黄大片视频| 亚洲伊人成人网| 免费看的黄色欧美网站| 国产精品高清在线| 一级片视频网站| 国产91精品露脸国语对白| 国产日韩欧美二区| 毛片免费在线| 最近日韩中文字幕| 成人蜜桃视频| 欧洲精品久久一区二区| 天堂蜜桃一区二区三区| 国产精品久久久久久久久男 | 日韩女优制服丝袜电影| 久久久高清视频| 天堂一区二区三区四区| 国产性色av一区二区| 我要看黄色一级片| 在线播放一区| 国产精品视频xxx| 国产jzjzjz丝袜老师水多| 亚洲尤物影院| 国产精品第二页| 国产aⅴ爽av久久久久成人| 97久久精品人人澡人人爽| 日韩欧美在线一区二区| 18+视频在线观看| 精品高清美女精品国产区| 浓精h攵女乱爱av| 亚洲一区二区电影| 亚洲天堂av电影| 国产a免费视频| 久久久夜精品| 国产精品jizz视频| youjizz在线播放| 亚洲国产精品一区二区www| 国产成人手机视频| 最新国产一区二区| 最近更新的2019中文字幕| 在线观看黄网址| 久久亚洲欧美| 国产精品亚洲一区| 香蕉视频国产在线观看| 丰满岳妇乱一区二区三区| 香蕉视频色在线观看| 国产成人精品免费视| 欧美国产日韩精品| 一级黄色片在线播放| ww亚洲ww在线观看国产| 日b视频免费观看| 日韩成人综合网| 亚洲欧美一区二区三区在线| 免费中文字幕视频| 国产在线麻豆精品观看| 五月天色一区| 国产超碰精品| 日韩成人免费视频| 日本熟女一区二区| 国产成人一级电影| 久久久一二三四| 精品视频在线一区二区在线| 精品亚洲aⅴ在线观看| 精品无码人妻一区二区三区| 国产麻豆午夜三级精品| 亚洲永久一区二区三区在线| 日韩视频网站在线观看| 亚洲国产毛片完整版| 久久久综合久久久| 国产91综合网| 国产无限制自拍| 成人爽a毛片| 色综合久久悠悠| hs视频在线观看| 亚洲美女区一区| 色黄视频免费看| 欧美激情视频一区二区三区在线播放| 国产在线日韩在线| 久久日韩视频| 欧美精品久久天天躁| 在线观看天堂av| 蜜桃av一区二区| 亚洲一区二区精品在线观看| 成人国产一区| 欧美三日本三级三级在线播放| 亚洲调教欧美在线| 国产亚洲精品久久久久婷婷瑜伽| 国产精品一级久久久| av电影院在线看| 51久久夜色精品国产麻豆| 最新av电影网站| 国产美女av一区二区三区| 草草草视频在线观看| 日本免费精品| 国内精品视频久久| 日韩a在线观看| 欧美在线观看视频一区二区| 欧美日韩生活片| 国产一区二区福利| 男女日批视频在线观看| 欧美日日夜夜| 国产成人福利视频| 在线观看免费高清完整| 日韩一区二区三区视频在线| 国产精品第72页| 91啪亚洲精品| 天天色综合天天色| 亚洲免费视频二区| 欧美午夜国产| 久久亚洲高清| 国产福利亚洲| 欧美国产视频日韩| 香蕉视频国产在线| 国产精品久久久久久久免费观看| 亚洲久久久久久久久久久| 国产裸体美女永久免费无遮挡| 亚洲色图在线看| 日韩免费高清一区二区| 日本成人超碰在线观看| 女人床在线观看| 婷婷综合成人| 91亚洲精品一区| 午夜激情电影在线播放| 日日噜噜噜夜夜爽亚洲精品| 男人天堂一区二区| 欧美色老头old∨ideo| 久久精品国产亚洲AV无码麻豆| 久久久精品黄色| 男人操女人下面视频| 欧美亚洲一区| 中文字幕人妻熟女人妻洋洋| 激情五月综合网| 国产精选一区二区| 欧美视频免费看| 538国产精品一区二区免费视频| 黄视频网站在线看| 亚洲欧美在线看| 黄色av网站免费在线观看| 欧美系列一区二区| 国产午夜在线播放| 亚洲男人的天堂av| 国产视频三区四区| av在线不卡电影| 久久久久久国产精品日本| 免费成人av在线| 欧美日韩成人免费视频| 一区二区不卡| 亚洲一区二区三区免费观看| 色88888久久久久久影院| 亚洲综合中文字幕68页| 国产91精品在线| 日本久久91av| 9999精品成人免费毛片在线看| 日韩在线小视频| 国产综合视频一区二区三区免费| 精品国产免费一区二区三区四区| 亚洲一级特黄毛片| 91久久精品网| www.国产com| 欧美日韩国产丝袜另类| 久久久精品人妻一区二区三区四| 中文字幕一区二区三区四区 | 欧美高清视频看片在线观看| 国产精品中文在线| 欧美日韩五码| 欧美一区第一页| 98色花堂精品视频在线观看| 欧美激情视频免费观看| av观看在线| 久久影院免费观看| 日本中文字幕在线观看| 中文在线不卡视频| 户外极限露出调教在线视频| 日韩毛片在线看| 色丁香婷婷综合久久| 精品国产99国产精品| 精品人妻一区二区三区蜜桃| 欧美一区二区人人喊爽| 国产精品久久久久久久久久久久久久久久 | 亚洲欧美激情在线视频| 色网站在线免费观看| 日韩精品久久久久久福利| 五月婷婷综合久久| 日韩毛片中文字幕| 国产无套粉嫩白浆在线2022年| 亚洲男人天堂网站| 国产高清视频在线播放| 在线中文字幕日韩| 久草资源在线| 九九热这里只有精品6| 欧美寡妇性猛交xxx免费| 欧美激情aaaa| 国产无遮挡裸体视频在线观看| 68精品久久久久久欧美| 免费成人动漫| 国产精品视频成人| 欧美电影院免费观看| 高清日韩一区| 亚洲精品国模| 亚洲精品乱码视频| 亚洲欧洲中文字幕| 男的插女的下面视频| 国产亚洲精品自拍| 手机av在线网| 国产91在线看| 51妺嘿嘿午夜福利| 亚洲手机成人高清视频| 精品无码久久久久久久| 91成人国产精品| 国产精品高潮呻吟AV无码| 亚洲精品在线免费播放| 国产乱子伦三级在线播放| 日韩在线视频中文字幕| 国产美女福利在线观看| 国产成人精品av| 精品午夜视频| 久久久久久久久久久一区| 日韩欧美午夜| 成人免费观看cn| 美女在线观看视频一区二区| 91精产国品一二三| 久久香蕉国产线看观看99| 国产中文av在线| 欧美日韩另类字幕中文| 国产乱色精品成人免费视频| 精品久久久久久综合日本欧美| 国产一级片在线播放| 欧美成人精品在线视频| 日韩电影免费观| 91久久偷偷做嫩草影院| 精品国产乱码久久久久久果冻传媒 | 激情视频网站在线播放色| 国产免费一区二区三区在线观看 | 久久青草免费| 国产伦精品一区| 日韩亚洲一区在线| 免费成人在线视频网站| 国产精品888| 1024在线看片| 欧美日韩在线免费| 男人天堂网在线视频| 久久视频国产精品免费视频在线 | 欧美性高清videossexo| 人妻精品无码一区二区| 久久久国产一区| 国产成人免费精品| 看高清中日韩色视频| 欧美日韩午夜| 中文字幕日韩综合| 久久久精品国产99久久精品芒果| 国产午夜精品一区二区理论影院| 在线不卡一区二区| jizz亚洲| 国产国语videosex另类| 欧美五码在线| 农民人伦一区二区三区| 国产xxx精品视频大全| 欧美xxxooo| 91国产丝袜在线播放| 亚洲区小说区图片区| 97人洗澡人人免费公开视频碰碰碰| 日韩08精品| 超碰超碰超碰超碰超碰| 精品一区二区成人精品| 香蕉成人在线视频| 欧美日韩免费不卡视频一区二区三区| 免费毛片在线| 热99精品只有里视频精品| 欧美人体视频| 日本中文字幕网址| av一本久道久久综合久久鬼色| 久久久久亚洲av片无码下载蜜桃 | 黄色毛片在线看| 日本不卡免费高清视频| 亚洲va久久久噜噜噜久久| 国产精品后入内射日本在线观看| 成人性生交大片免费看中文| 青娱乐国产在线视频| 日韩一级片在线播放| 在线观看a级片| 成人欧美视频在线| 亚洲黄页一区| 国产xxxxxxxxx| 精品日韩中文字幕| 国产人成在线视频| 国产精品美女网站| 91综合在线| 91精品国产三级| 亚洲线精品一区二区三区八戒| 好吊色一区二区三区| 97精品国产97久久久久久| 欧美亚洲色图校园春色| av免费中文字幕| 国产精品美女www爽爽爽| 91精品国产综合久| 久久国产精品久久久| 国产精品99久久免费观看| 欧美黄色免费影院| 中文字幕欧美日韩一区| 99热这里只有精品5| 国语自产在线不卡| 久久99青青| 欧美国产日韩另类 | 久久久免费视频网站| 国产欧美一区二区三区在线看蜜臀 | 久久久人人人| 精品国产视频在线观看| 亚洲国产精品久久久久久| 欧美亚洲大片| 成人短视频在线看| 99久久精品国产导航| 波多野结衣黄色网址| 欧美日韩电影在线观看| 亚洲小说图片| av在线网站免费观看| 欧美日韩一区二区三区| 久久精品视频观看| 精品午夜一区二区| 精品一区二区在线播放| 狠狠躁夜夜躁人人爽天天高潮| 国产亚洲精品久久久久动| 日韩一区二区三区高清在线观看| 91视频最新入口| |精品福利一区二区三区| 天天操天天干天天插| 国产精品久久久久久久久久三级 | 人妻少妇被粗大爽9797pw| 国产精品高潮呻吟久久| 天天av综合网| 亚洲xxxxx电影| 久久综合中文| 久久艹精品视频| 色哟哟入口国产精品| 美国成人xxx| 欧美高清精品一区二区| 色综合视频在线观看| 国产黄色大片在线观看|