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

Python中的函數(shù)與方法 以及Bound Method和Unbound Method

開(kāi)發(fā) 后端
隨著我們?cè)絹?lái)越頻繁使用Python, 我們難免會(huì)接觸到類, 接觸到類屬性和方法.但是很多新手包括我, 不知道方法 和 函數(shù) 的區(qū)別,這次簡(jiǎn)單來(lái)討論下。

Python中的函數(shù)與方法 以及Bound Method和Unbound Method

函數(shù)與方法的區(qū)別

隨著我們?cè)絹?lái)越頻繁使用Python, 我們難免會(huì)接觸到類, 接觸到類屬性和方法.但是很多新手包括我, 不知道方法 和 函數(shù) 的區(qū)別,這次簡(jiǎn)單來(lái)討論下, 如果有哪里認(rèn)識(shí)不正確, 希望大神提點(diǎn)指教!

先來(lái)看兩個(gè)定義吧:

function(函數(shù)) —— A series of statements which returns some value toa caller. It can also be passed zero or more arguments which may beused in the execution of the body.

method(方法) —— A function which is defined inside a class body. Ifcalled as an attribute of an instance of that class, the methodwill get the instance object as its first argument (which isusually called self).

從上面可以看出, 別的編程語(yǔ)言一樣, Function也是包含一個(gè)函數(shù)頭和一個(gè)函數(shù)體, 也同樣支持0到n個(gè)形參,而Method則是在function的基礎(chǔ)上, 多了一層類的關(guān)系, 正因?yàn)檫@一層類, 所以區(qū)分了function 和 method.而這個(gè)過(guò)程是通過(guò) PyMethod_New實(shí)現(xiàn)的

  1. PyObject * 
  2. PyMethod_New(PyObject *func, PyObject *self, PyObject *klass) 
  3.     register PyMethodObject *im;   // 定義方法結(jié)構(gòu)體 
  4.     im = free_list; 
  5.     if (im != NULL) { 
  6.         free_list = (PyMethodObject *)(im->im_self); 
  7.         PyObject_INIT(im, &PyMethod_Type);  // 初始化 
  8.         numfree--; 
  9.     } 
  10.     else { 
  11.         im = PyObject_GC_New(PyMethodObject, &PyMethod_Type); 
  12.         if (im == NULL
  13.             return NULL
  14.     } 
  15.     im->im_weakreflist = NULL
  16.     Py_INCREF(func); 
  17.      
  18.     /* 往下開(kāi)始通過(guò) func 配置 method*/ 
  19.     im->im_func = func; 
  20.     Py_XINCREF(self); 
  21.     im->im_self = self; 
  22.     Py_XINCREF(klass); 
  23.     im->im_class = klass; 
  24.     _PyObject_GC_TRACK(im); 
  25.     return (PyObject *)im; 

所以本質(zhì)上, 函數(shù)和方法的區(qū)別是: 函數(shù)是屬于 FunctionObject, 而 方法是屬 PyMethodObject

簡(jiǎn)單來(lái)看下代碼:

  1. def aa(d, na=None, *kasd, **kassd): 
  2.     pass 
  3. class A(object): 
  4.     def f(self): 
  5.         return 1 
  6. a = A() 
  7. print '#### 各自方法描述 ####' 
  8. print '## 函數(shù)     %s' % aa 
  9. print '## 類方法   %s' % A.f 
  10. print '## 實(shí)例方法 %s' % a.f  

輸出結(jié)果:

  1. #### 各自方法描述 #### 
  2. ## 函數(shù)   <function aa at 0x000000000262AB38> 
  3. ## 類方法   <unbound method A.f> 
  4. ## 實(shí)例方法 <bound method A.f of <__main__.A object at 0x0000000002633198>>  

Bound Method 和 Unbound Method

method 還能再分為 Bound Method 和 Unbound Method, 他們的差別是什么呢? 差別就是Bound method 多了一個(gè)實(shí)例綁定的過(guò)程!

A.f 是 unbound method, 而 a.f 是 bound method, 從而驗(yàn)證了上面的描述是正確的!

看到這, 我們應(yīng)該會(huì)有個(gè)問(wèn)題:

方法的綁定, 是什么時(shí)候發(fā)生的? 又是怎樣的發(fā)生的?

帶著這個(gè)問(wèn)題, 我們繼續(xù)探討.很明顯, 方法的綁定, 肯定是伴隨著class的實(shí)例化而發(fā)生,我們都知道, 在class里定義方法, 需要顯示傳入self參數(shù), 因?yàn)檫@個(gè)self是代表即將被實(shí)例化的對(duì)象。

我們需要dis模塊來(lái)協(xié)助我們?nèi)ビ^察這個(gè)綁定的過(guò)程:

  1. [root@iZ23pynfq19Z ~]# cat 33.py 
  2. class A(object): 
  3.     def f(self): 
  4.         return 123 
  5. a = A() 
  6. print A.f() 
  7. print a.f() 
  8.   
  9. ## 命令執(zhí)行 ## 
  10. [root@iZ23pynfq19Z ~]# python -m dis 33.py 
  11.   1           0 LOAD_CONST               0 ('A'
  12.               3 LOAD_NAME                0 (object) 
  13.               6 BUILD_TUPLE              1 
  14.               9 LOAD_CONST               1 (<code object A at 0x7fc32f0b5030, file "33.py", line 1>) 
  15.              12 MAKE_FUNCTION            0 
  16.              15 CALL_FUNCTION            0 
  17.              18 BUILD_CLASS         
  18.              19 STORE_NAME               1 (A) 
  19.   
  20.   4          22 LOAD_NAME                1 (A) 
  21.              25 CALL_FUNCTION            0 
  22.              28 STORE_NAME               2 (a) 
  23.   
  24.   5          31 LOAD_NAME                1 (A) 
  25.              34 LOAD_ATTR                3 (f) 
  26.              37 CALL_FUNCTION            0 
  27.              40 PRINT_ITEM           
  28.              41 PRINT_NEWLINE       
  29.   
  30.   6          42 LOAD_NAME                2 (a) 
  31.              45 LOAD_ATTR                3 (f) 
  32.              48 CALL_FUNCTION            0 
  33.              51 PRINT_ITEM           
  34.              52 PRINT_NEWLINE       
  35.              53 LOAD_CONST               2 (None) 
  36.              56 RETURN_VALUE  

dis輸出說(shuō)明: 第一列是代碼的函數(shù), 第二列是指令的偏移量, 第三列是可視化指令, 第四列是參數(shù), 第五列是指令根據(jù)參數(shù)計(jì)算或者查找的結(jié)果

咱們可以看到 第4列 和第五列, 分別就是對(duì)應(yīng): print A.f() 和 print a.f()

他們都是同樣的字節(jié)碼, 都是從所在的codeobject中的co_name取出參數(shù)對(duì)應(yīng)的名字, 正因?yàn)閰?shù)的不同, 所以它們分別取到 A 和 a,下面我們需要來(lái)看看 LOAD_ATTR 的作用是什么:

  1. //取自: python2.7/objects/ceval.c 
  2.         TARGET(LOAD_ATTR) 
  3.         { 
  4.             w = GETITEM(names, oparg);  // 從co_name 取出 f 
  5.             v = TOP();                  // 將剛才壓入棧的 A/a 取出來(lái) 
  6.             x = PyObject_GetAttr(v, w); // 取得真正的執(zhí)行函數(shù) 
  7.             Py_DECREF(v); 
  8.             SET_TOP(x); 
  9.             if (x != NULL) DISPATCH(); 
  10.             break; 
  11.         }  

通過(guò) SET_TOP, 已經(jīng)將我們需要真正執(zhí)行的函數(shù)壓入運(yùn)行時(shí)棧, 接下來(lái)就是通過(guò)CALL_FUNCTION 來(lái)調(diào)用這個(gè)函數(shù)對(duì)象, 繼續(xù)來(lái)看看具體過(guò)程:

  1. //取自: python2.7/objects/ceval.c 
  2. TARGET(CALL_FUNCTION) 
  3.         { 
  4.             PyObject **sp; 
  5.             PCALL(PCALL_ALL); 
  6.             sp = stack_pointer; 
  7. #ifdef WITH_TSC 
  8.             x = call_function(&sp, oparg, &intr0, &intr1); 
  9. #else 
  10.             x = call_function(&sp, oparg);  // 細(xì)節(jié)請(qǐng)往下看 
  11. #endif 
  12.             stack_pointer = sp; 
  13.             PUSH(x); 
  14.             if (x != NULL) DISPATCH(); 
  15.             break; 
  16.         } 
  17.        
  18. static PyObject * 
  19. call_function(PyObject ***pp_stack, int oparg)     
  20.     int na = oparg & 0xff;                // 位置參數(shù)個(gè)數(shù) 
  21.     int nk = (oparg>>8) & 0xff;           // 關(guān)鍵位置參數(shù)的個(gè)數(shù) 
  22.     int n = na + 2 * nk;                  // 總的個(gè)數(shù)和 
  23.     PyObject **pfunc = (*pp_stack) - n - 1;  // 當(dāng)前棧位置-參數(shù)個(gè)數(shù),得到函數(shù)對(duì)象 
  24.     PyObject *func = *pfunc;   
  25.     PyObject *x, *w; 
  26.     ... // 省略前面細(xì)節(jié), 只看關(guān)鍵調(diào)用 
  27.     if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) { 
  28.             /* optimize access to bound methods */ 
  29.             PyObject *self = PyMethod_GET_SELF(func); 
  30.             PCALL(PCALL_METHOD); 
  31.             PCALL(PCALL_BOUND_METHOD); 
  32.             Py_INCREF(self); 
  33.             func = PyMethod_GET_FUNCTION(func); 
  34.             Py_INCREF(func); 
  35.             Py_SETREF(*pfunc, self); 
  36.             na++; 
  37.             n++; 
  38.         } else 
  39.             Py_INCREF(func); 
  40.         READ_TIMESTAMP(*pintr0); 
  41.         if (PyFunction_Check(func)) 
  42.             x = fast_function(func, pp_stack, n, na, nk); 
  43.         else 
  44.             x = do_call(func, pp_stack, na, nk); 
  45.         READ_TIMESTAMP(*pintr1); 
  46.         Py_DECREF(func); 
  47.  

咱們來(lái)捋下調(diào)用順序:

  1. CALL_FUNCTION -> call_function -> 根據(jù)函數(shù)的類型 -> 執(zhí)行對(duì)應(yīng)的操作 

當(dāng)程序運(yùn)行到call_function時(shí), 主要有的函數(shù)類型判斷有: PyCFunction, PyMethod, PyFunction

在這里, 虛擬機(jī)已經(jīng)判斷出func是不屬于PyCFunction, 所以將會(huì)落入上面源碼的判斷分支中, 而它將要做的,就是分別通過(guò) PyMethod_GET_SELF, PyMethod_GET_FUNCTION 獲得self對(duì)象和func函數(shù), 然后通過(guò)調(diào)用 Py_SETREF(*pfunc, self):

  1. // Py_SETREF 定義如下 
  2. #define Py_SETREF(op, op2)                       
  3.     do {                                         
  4.         PyObject *_py_tmp = (PyObject *)(op);   
  5.         (op) = (op2);                           
  6.         Py_DECREF(_py_tmp);                     
  7.     } while (0)  

可以看出, Py_SETREF是用這個(gè)self對(duì)象替換了pfunc指向的對(duì)象了, 而pfunc在上面已經(jīng)提及到了, 就是當(dāng)時(shí)壓入運(yùn)行時(shí)棧的函數(shù)對(duì)象. 除了這幾步, 還有更重要的就是, na 和 n 都分別自增1

看回上面的 a.f(), 咱們可以知道, 它是不需要參數(shù)的, 所以理論上 na,nk和n都是0, 但是因?yàn)閒是method(方法), 經(jīng)過(guò)上面一系列操作, 它將會(huì)傳入一個(gè)self,而na也會(huì)變成1, 又因?yàn)?pfunc已經(jīng)被替換成self, 相應(yīng)代碼:

  1. if (PyFunction_Check(func)) 
  2.             x = fast_function(func, pp_stack, n, na, nk); 
  3.         else 
  4.             x = do_call(func, pp_stack, na, nk);  

所以它不再進(jìn)入function的尋常路了, 而是走do_call, 然后就開(kāi)始真正的調(diào)用;

其實(shí)這個(gè)涉及到Python調(diào)用函數(shù)的整個(gè)過(guò)程, 因?yàn)楸容^復(fù)雜, 后期找個(gè)時(shí)間專門談?wù)勥@個(gè)

聊到這里, 我們已經(jīng)大致清楚, 一個(gè)method(方法) 在調(diào)用時(shí)所發(fā)生的過(guò)程.明白了函數(shù)和方法的本質(zhì)區(qū)別, 那么回到主題上 來(lái)說(shuō)下 Unbound 和 Bound, 其實(shí)這兩者差別也不大. 從上面我們得知, 一個(gè)方法的創(chuàng)建, 是需要self, 而調(diào)用時(shí), 也會(huì)使用self,而只有實(shí)例化對(duì)象, 才有這個(gè)self, class是沒(méi)有的, 所以像下面的執(zhí)行, 是失敗的額

  1. class A(object): 
  2.     def f(self): 
  3.         return 1 
  4. a = A() 
  5.   
  6. print '#### 各自方法等效調(diào)用 ####' 
  7. print '## 類方法 %s' % A.f() 
  8. print '## 實(shí)例方法 %s' % a.f() 
  9.   
  10. ## 輸出結(jié)果 ## 
  11. #### 各自方法等效調(diào)用 #### 
  12. Traceback (most recent call last): 
  13.   File "C:/Users/Administrator/ZGZN_Admin/ZGZN_Admin/1.py", line 20, in <module> 
  14.     print '## 類方法 %s' % A.f() 
  15. TypeError: unbound method f() must be called with A instance as first argument (got nothing instead 

錯(cuò)誤已經(jīng)很明顯了: 函數(shù)未綁定, 必須要將A的實(shí)例作為第一個(gè)參數(shù)

既然它要求第一個(gè)參數(shù)是 A的實(shí)例對(duì)象, 那我們就試下修改代碼:

  1. class A(object): 
  2.     def f(self): 
  3.         return 1 
  4. a = A() 
  5.   
  6. print '#### 各自方法等效調(diào)用 ####' 
  7. print '## 類方法 %s' % A.f(a)   #傳入A的實(shí)例a 
  8. print '## 實(shí)例方法 %s' % a.f() 
  9.   
  10. ## 結(jié)果 ## 
  11. #### 各自方法等效調(diào)用 #### 
  12. ## 類方法 1 
  13. ## 實(shí)例方法 1  

可以看出來(lái), Bound 和 Unbound判斷的依據(jù)就是, 當(dāng)方法真正執(zhí)行時(shí), 有沒(méi)有傳入實(shí)例, A.f(a) 和 a.f() 用法的區(qū)別只是在于, 第一種需要人為傳入實(shí)例才能調(diào)用, 而第二種, 是虛擬機(jī)幫我們做好了傳入實(shí)例的動(dòng)作, 不用我們那么麻煩而已, 兩種方法本質(zhì)上是等價(jià)的。 

責(zé)任編輯:龐桂玉 來(lái)源: Python開(kāi)發(fā)者
相關(guān)推薦

2009-07-21 17:21:57

Scala定義函數(shù)

2023-11-29 07:47:29

Golang函數(shù)

2013-07-30 13:35:12

methodfunction

2009-04-13 11:33:25

IBMdWRational

2020-10-13 14:15:22

HTTPHTTP請(qǐng)求方法

2025-10-13 08:58:31

Golangmethod結(jié)構(gòu)體

2018-01-09 13:42:37

集成學(xué)習(xí)算法

2024-11-14 11:00:05

GolangGo結(jié)構(gòu)體

2021-06-01 23:18:00

Golang語(yǔ)言Method

2019-08-16 10:46:46

JavaScript工廠模式抽象工廠模式

2010-05-28 15:35:16

ibmdw系統(tǒng)架構(gòu)

2024-06-11 09:07:12

服務(wù)端http客戶端

2023-03-25 20:13:28

Python

2024-12-06 06:00:00

Python列表編程

2024-01-10 08:47:48

Python函數(shù)Map()

2023-03-07 10:32:34

Go語(yǔ)言結(jié)構(gòu)體

2015-09-14 15:23:44

JavaScriptfunction

2009-08-06 14:53:41

C# User類

2010-09-10 16:02:13

SQLCHARINDEX函數(shù)

2010-09-09 11:32:26

SQL函數(shù)StDev
點(diǎn)贊
收藏

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

婷婷在线免费观看| 久久精品性爱视频| 国产激情精品一区二区三区| 亚洲激情成人在线| 久久国产精品一区二区三区四区| 日韩精品成人免费观看视频| 91麻豆精品国产91久久久平台| 日韩欧美一级在线播放| 亚洲 欧美 日韩 国产综合 在线| 91网页在线观看| 国产一区二区三区日韩| 欧美中文在线免费| 一级片一级片一级片| 欧美电影在线观看免费| 欧美日韩精品久久久| 日韩日韩日韩日韩日韩| 日韩大片在线永久免费观看网站| 成人av电影免费观看| 国产日韩欧美中文| 国产69精品久久久久久久久久| 婷婷综合视频| 国产午夜精品一区二区三区| 四虎永久免费观看| 日本美女久久| 婷婷综合另类小说色区| 香蕉视频在线网址| 黄色大片在线看| 成人av电影在线播放| 444亚洲人体| 波多野结衣毛片| 国产一区二区三区成人欧美日韩在线观看| 最近2019年手机中文字幕| 国产传媒第一页| 91成人福利| 日韩午夜三级在线| 第一区免费在线观看| 欧美一区久久久| 婷婷丁香激情综合| 日韩精品综合在线| 国产欧美黑人| 中文字幕欧美一| 日韩亚洲视频在线| 毛片免费在线| 91免费在线播放| 国产精品一区二区三区精品| 国产成a人亚洲精v品无码| 男男视频亚洲欧美| 国产99久久精品一区二区永久免费| 久久婷婷一区二区| 亚洲网址在线| 欧美黄色三级网站| 国产一级视频在线播放| 欧美日韩在线大尺度| 欧美精品在线看| 国模无码国产精品视频| 久久精品久久久| 久久夜色精品国产欧美乱| 免费成人美女女在线观看| 欧美色图激情小说| 日韩小视频在线观看| 亚洲视频重口味| 久久精品一区二区不卡| 久久不射电影网| 欧美 日韩 国产 一区二区三区| 911精品美国片911久久久| 久久精品视频导航| 欧美成人综合色| 亚洲国产99| 欧美在线视频一区二区| 黄色网址中文字幕| 美女视频免费一区| 亚洲一区二区免费| 日本wwwxxxx| 91麻豆免费看| 亚洲国产一区二区三区在线| 亚洲乱亚洲乱妇| 亚洲男人的天堂在线观看| 亚洲一区 在线播放| 少女频道在线观看高清| 午夜视频一区二区| 黄色影院一级片| 国产情侣一区二区三区| 欧美一区二区三区免费大片 | 日韩欧美中文字幕一区| 老熟女高潮一区二区三区| 日本成人中文| 三级精品视频久久久久| 91日韩中文字幕| 亚洲中字在线| 91亚洲精华国产精华| 婷婷视频在线观看| 亚洲国产精品99久久久久久久久| 国产对白在线播放| 玖玖在线播放| 欧美精品三级日韩久久| 人妻av一区二区| 成人短片线上看| 久久久亚洲影院| 中文字幕人妻精品一区| 丁香激情综合五月| 午夜欧美性电影| 欧美24videosex性欧美| 欧洲日韩一区二区三区| 成人一区二区三区仙踪林| 九九久久精品| 欧美精品videos另类日本| 欧美亚洲另类小说| 国产.欧美.日韩| 性欧美videosex高清少妇| 性直播体位视频在线观看| 欧美在线色视频| 美女扒开腿免费视频| 第一会所sis001亚洲| 午夜精品福利视频| 国产普通话bbwbbwbbw| 久久久亚洲欧洲日产国码αv| 特大黑人娇小亚洲女mp4| 校园春色亚洲色图| 亚洲第五色综合网| 青娱乐av在线| 精品一区二区三区日韩| 欧美日本国产精品| 神马午夜伦理不卡 | 韩国一区二区电影| 国产强伦人妻毛片| 国产精品国产a| 国产无套粉嫩白浆内谢的出处| av成人综合| 欧美成人午夜激情在线| 又骚又黄的视频| 国产日产欧产精品推荐色| 九色自拍视频在线观看| 日韩视频一区二区三区四区| 色婷婷综合成人av| 中国女人真人一级毛片| 久久精品一区蜜桃臀影院| 蜜桃传媒一区二区三区| 爱高潮www亚洲精品| 久久国产精品99国产精| 亚洲手机在线观看| 国产亚洲精品免费| 男人天堂成人在线| 欧美精品久久久久久| 欧美一区二区三区免费观看| 日本人妻丰满熟妇久久久久久| 一区二区国产视频| 欧美午夜精品一区二区| 午夜久久福利| 97夜夜澡人人双人人人喊| 在线观看三级视频| 日韩欧美国产午夜精品| 欧美人妻一区二区| 国产成人高清在线| 成人国产在线看| 日韩精品三级| 欧美日韩国产成人在线| 午夜精品久久久久久久99| 亚洲午夜精品在线| 国产精品三级在线观看无码| 性欧美暴力猛交另类hd| 欧美在线播放一区二区| 日韩精品三区| 色婷婷av一区二区三区久久| 999久久久久| 亚洲国产精品一区二区尤物区| 亚洲av永久无码精品| 一本色道精品久久一区二区三区| 精品国产综合| 偷拍视频一区二区三区| 日韩视频一区在线| 亚洲AV午夜精品| 欧美日韩另类字幕中文| 波多野结衣av在线观看| 久久国产尿小便嘘嘘| 男女激烈动态图| 狠狠一区二区三区| 国产精品h片在线播放| 欧美成年黄网站色视频| 欧美成人bangbros| 黄色片网站在线免费观看| 中文文精品字幕一区二区| 久久久九九九热| 国产欧美另类| 亚洲国产一区在线| 8x国产一区二区三区精品推荐| 欧美亚洲在线播放| 欧美精品日韩少妇| 亚洲国产精品电影| 小泽玛利亚一区二区三区视频| 亚洲视频图片小说| 亚洲欧美视频在线播放| 久久99久久99小草精品免视看| 黄网站色视频免费观看| 国产成人1区| 亚洲一区二区在线播放| 日韩电影免费观| 欧美成人久久久| 极品美乳网红视频免费在线观看 | 91av在线国产| 日日夜夜精品一区| 日韩av最新在线观看| 一级黄色大片免费| 五月婷婷激情综合| 中文字幕观看av| 91理论电影在线观看| 亚洲精品久久久久久宅男| 亚洲高清不卡| 婷婷视频在线播放| 久久爱www成人| 国产精品夜夜夜一区二区三区尤| 成人国产精品一区二区免费麻豆 | www毛片com| 亚洲综合丝袜美腿| 九九热久久免费视频| 99在线精品免费| 原创真实夫妻啪啪av| 日韩国产欧美视频| 欧美成人xxxxx| 欧美私人啪啪vps| 国产av不卡一区二区| 精品72久久久久中文字幕| 国产精品一区二区三区不卡| 中文字幕综合| 国产精品久久久久久久av大片| a级片免费在线观看| 久久99精品久久久久久琪琪| 91精彩视频在线观看| 怡红院精品视频| 男生女生差差差的视频在线观看| 欧美精品一区二区久久婷婷| 国产麻豆一精品一男同| 欧美老年两性高潮| 影音先锋黄色网址| 欧美视频一区二区三区在线观看| 五月天婷婷激情| 精品久久久久久久久久久| 精品无码黑人又粗又大又长| 玉米视频成人免费看| 91成人福利视频| 亚洲激情校园春色| 九九热国产精品视频| 亚洲激情中文1区| 黄页网站免费观看| 一区二区成人在线视频| 青草影院在线观看| 亚洲免费av观看| 欧美日韩三级在线观看| 亚洲欧美另类图片小说| 天天综合天天做| 亚洲午夜久久久久久久久电影网 | av成人免费观看| 视频亚洲一区二区| 国产精品国产精品| 女同另类激情重口| 欧美区高清在线| 日韩av有码| 中文字幕一区二区三区四区五区六区| 精品国产乱码久久久久软件| 婷婷精品在线观看| 欧洲精品久久| 人人狠狠综合久久亚洲婷婷 | 亚洲国内自拍| 免费在线激情视频| 琪琪一区二区三区| 三级性生活视频| 国产成a人亚洲精| 国产精品久久久久久亚洲色| xfplay精品久久| 色欲狠狠躁天天躁无码中文字幕| 国产精品视频一区二区三区不卡| 国产又粗又猛又爽又黄的视频小说 | 色综合久久久久| 中文字字幕在线观看| 宅男在线国产精品| 五十路在线观看| 亚洲日本成人网| 国产福利视频在线观看| 久久久免费观看视频| 在线成人av观看| 国产日产欧美精品| 豆花视频一区二区| 日韩一区不卡| 一区视频在线看| 国产精品视频黄色| 国产高清成人在线| 加勒比综合在线| 亚洲人成网站在线| 久久国产视频一区| 在线播放欧美女士性生活| 日韩中文字幕免费在线观看| 国产性色av一区二区| 性欧美1819sex性高清大胸| 欧美一区视频在线| 久久久久久爱| 日韩欧美亚洲在线| 亚洲高清网站| 奇米视频888| 99精品久久只有精品| 殴美一级黄色片| 激情久久av一区av二区av三区| 在线亚洲欧美日韩| 亚洲黄色在线看| 国内精品不卡| 国产成人亚洲综合| 福利片一区二区| 伊人久久青草| 久久久久国内| 亚洲一级Av无码毛片久久精品| 中文字幕巨乱亚洲| 精品欧美一区二区三区免费观看| 91精品国产综合久久久久久漫画| 免费国产在线观看| 久久久久久中文字幕| 久久天天久久| 青青草原成人| 亚洲毛片一区| www日本在线观看| 成人欧美一区二区三区黑人麻豆| 亚洲精品男人的天堂| 亚洲国产精久久久久久久| 中文字幕在线观看播放| 国产美女久久精品| 精品一区二区三区在线 | 麻豆精品在线播放| www.中文字幕av| 精品国产91久久久久久| 亚洲第一精品网站| 美女精品久久久| 欧美男男gaygay1069| 午夜精品福利一区二区| 久久一二三四| 爱爱免费小视频| 精品久久久免费| 先锋av资源站| 欧美国产日韩免费| 伊色综合久久之综合久久| 青青草影院在线观看| 精品写真视频在线观看| 91动漫免费网站| 欧美精品一卡二卡| 亚洲欧美视频一区二区| 国产拍精品一二三| 欧美激情偷拍自拍| 久久久久久蜜桃一区二区| 国产精品天干天干在观线| 中文字幕在线观看欧美| 久久精品91久久香蕉加勒比 | 欧美放荡的少妇| 黄色精品在线观看| 91丝袜美腿美女视频网站| **女人18毛片一区二区| 三级黄色片播放| 夜夜嗨av一区二区三区中文字幕| 精品黑人一区二区三区在线观看| 精品中文字幕在线2019| 视频在线亚洲| 日本手机在线视频| 99精品国产视频| 中文字幕在线观看视频免费| 国产一区二区三区日韩欧美| 草莓视频成人appios| dy888午夜| 国产成人免费视频| 日韩三级一区二区三区| 亚洲欧美日韩中文视频| 日韩成人综合网站| 免费cad大片在线观看| 丁香婷婷综合网| 天天爽夜夜爽夜夜爽精品| 亚洲夜晚福利在线观看| 国产成人免费视频网站视频社区 | 麻豆精品视频在线观看视频| 国产又色又爽又高潮免费| 欧美一区二区三区免费大片| 动漫一区二区| 你懂的网址一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美黑人猛猛猛| 日韩精品视频在线观看免费| 日本高清不卡一区二区三区视频| 在线视频不卡一区二区三区| 国产成人午夜视频| 久久中文字幕免费| 久久av在线播放| 九九在线精品| 老熟女高潮一区二区三区| 色婷婷久久久久swag精品| 成人三级网址| 欧美日韩一区二区三区在线观看免 | 91精品国产麻豆国产在线观看| 乱码一区二区三区| 日本高清不卡在线观看| 影音先锋男人在线资源| 欧洲视频一区二区三区| 国产高清精品久久久久| 国产suv精品一区二区33| 美女扒开尿口让男人操亚洲视频网站 | 欧美日韩黄色影视| 免费毛片b在线观看| 亚洲AV无码成人精品一区|