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

程序員必知的 Python 陷阱與缺陷列表

開發 后端 服務器運維
我個人對陷阱的定義是這樣的:代碼看起來可以工作,但不是以你“想當然“”的方式。如果一段代碼直接出錯,拋出了異常,我不認為這是陷阱。

我個人對陷阱的定義是這樣的:代碼看起來可以工作,但不是以你“想當然“”的方式。如果一段代碼直接出錯,拋出了異常,我不認為這是陷阱。

[[236185]]

比如,Python程序員應該都遇到過的“UnboundLocalError”, 示例:

  1. >>> a=1 
  2.  
  3. >>> def func(): 
  4.  
  5. ...     a+=1 
  6.  
  7. ...     print a 
  8.  
  9. ... 
  10.  
  11. >>> func() 
  12.  
  13. Traceback (most recent call last): 
  14.  
  15. File "<stdin>", line 1, in <module> 
  16.  
  17. File "<stdin>", line 2, in func 
  18.  
  19. UnboundLocalError: local variable 'a' referenced before assignment 

對于“UnboundLocalError”,還有更高級的版本:

  1. import random 
  2.   
  3. def func(ok): 
  4.     if ok: 
  5.         a = random.random() 
  6.     else
  7.         import random 
  8.         a = random.randint(1, 10) 
  9.     return a 
  10.   
  11. func(True)# UnboundLocalError: local variable 'random' referenced before assignment 

可能對于很多python新手來說,這個Error讓人摸不著頭腦。但我認為這不算陷阱,因為這段代碼一定會報錯,而不是默默的以錯誤的方式運行。不怕真小人,就怕偽君子。我認為缺陷就好比偽君子。

那么Python中哪些真正算得上陷阱呢?

第一:以mutable對象作為默認參數

這個估計是最廣為人知的了,Python和其他很多語言一樣,提供了默認參數,默認參數確實是個好東西,可以讓函數調用者忽略一些細節(比如GUI編程,Tkinter,QT),對于lambda表達式也非常有用。但是如果使用了可變對象作為默認參數,那么事情就不那么愉快了。

  1. >>> def f(lst = []): 
  2. ...     lst.append(1) 
  3. ...     return lst 
  4. ... 
  5. >>> f() 
  6. [1] 
  7. >>> f() 
  8. [1, 1] 

驚喜不驚喜?!究其原因,python中一切都是對象,函數也不列外,默認參數只是函數的一個屬性。而默認參數在函數定義的時候已經求值了。

  Default parameter values are evaluated when the function definition is executed.

stackoverflow上有一個更適當的例子來說明默認參數是在定義的時候求值,而不是調用的時候。

  1. >>> import time 
  2. >>> def report(when=time.time()): 
  3. ... return when 
  4. ... 
  5. >>> report() 
  6. 1500113234.487932 
  7. >>> report() 
  8. 1500113234.487932 

python docoment 給出了標準的解決辦法:

  A way around this is to use None as the default, and explicitly test for it in the body of the function

  1. >>> def report(when=None): 
  2. ...  if when is None: 
  3. ...  when = time.time() 
  4. ... return when 
  5. ... 
  6. >>> report() 
  7. 1500113446.746997 
  8. >>> report() 
  9. 1500113448.552873 

第二: x += y vs x = x + y

一般來說,二者是等價的,至少看起來是等價的(這也是陷阱的定義 — 看起來都OK,但不一定正確)。

  1. >>> x=1;x += 1;print x 
  2.  
  3.  
  4. >>> x=1;x = x+1;print x 
  5.  
  6.  
  7. >>> x=[1];x+=[2];print x 
  8.  
  9. [1, 2] 
  10.  
  11. >>> x=[1];x=x+[2];print x 
  12.  
  13. [1, 2] 

呃,被光速打臉了?

  1. >>> x=[1];print id(x);x=x+[2];print id(x) 
  2.  
  3. 4357132800 
  4.  
  5. 4357132728 
  6.  
  7. >>> x=[1];print id(x);x+=[2];print id(x) 
  8.  
  9. 4357132800 
  10.  
  11. 4357132800 

前者x指向一個新的對象,后者x在原來的對象是修改,當然,那種效果是正確的取決于應用場景。至少,得知道,二者有時候并不一樣

 第三,神奇的小括號–()

小括號(parenthese)在各種編程語言中都有廣泛的應用,python中,小括號還能表示元組(tuple)這一數據類型, 元組是immutable的序列。

  1. >>> a = (1, 2) 
  2.  
  3. >>> type(a) 
  4.  
  5. <type 'tuple'
  6.  
  7. >>> type(()) 
  8.  
  9. <type 'tuple'

但如果只有一個元素呢

  1. >>> a=(1) 
  2.  
  3. >>> type(a) 
  4.  
  5. <type 'int'

神奇不神奇,如果要表示只有一個元素的元組,正確的姿勢是:

  1. >>> a=(1) 
  2.  
  3. >>> type(a) 
  4.  
  5. <type 'int'

第四:生成一個元素是列表的列表

這個有點像二維數組,當然生成一個元素是字典的列表也是可以的,更通俗的說,生成一個元素是可變對象的序列

很簡單嘛:

  1. >>> a= [[]] * 10 
  2.  
  3. >>> a 
  4.  
  5. [[], [], [], [], [], [], [], [], [], []] 
  6.  
  7. >>> a[0].append(10) 
  8.  
  9. >>> a[0] 
  10.  
  11. [10] 

看起來很不錯,簡單明了,but

  1. >>> a[1] 
  2. [10] 
  3. >>> a 
  4. [[10], [10], [10], [10], [10], [10], [10], [10], [10], [10]] 

我猜,這應該不是你預期的結果吧,究其原因,還是因為python中list是可變對象,上述的寫法大家都指向的同一個可變對象,正確的姿勢

  1. >>> a = [[] for _ in xrange(10)] 
  2.  
  3. >>> a[0].append(10) 
  4.  
  5. >>> a 
  6.  
  7. [[10], [], [], [], [], [], [], [], [], []] 

第五,在訪問列表的時候,修改列表

列表(list)在python中使用非常廣泛,當然經常會在訪問列表的時候增加或者刪除一些元素。比如,下面這個函數,試圖刪掉列表中為3的倍數的元素

  1. >>> def modify_lst(lst): 
  2. ... for idx, elem in enumerate(lst): 
  3. ... if elem % 3 == 0: 
  4. ... del lst[idx] 

測試一下,

  1. >>> lst = [1,2,3,4,5,6] 
  2.  
  3. >>> modify_lst(lst) 
  4.  
  5. >>> lst 
  6.  
  7. [1, 2, 4, 5] 

好像沒什么錯,不過這只是運氣好

  1. >>> lst = [1,2,3,6,5,4] 
  2. >>> modify_lst(lst) 
  3. >>> lst 
  4. [1, 2, 6, 5, 4] 

上面的例子中,6這個元素就沒有被刪除。如果在modify_lst函數中print idx, item就可以發現端倪:lst在變短,但idx是遞增的,所以在上面出錯的例子中,當3被刪除之后,6變成了lst的第2個元素(從0開始)。在C++中,如果遍歷容器的時候用迭代器刪除元素,也會有同樣的問題。

如果邏輯比較簡單,使用list comprehension是不錯的注意

 第六,閉包與lambda

這個也是老生長談的例子,在其他語言也有類似的情況。先看一個例子:

  1. >>> def create_multipliers(): 
  2. ...  return [lambda x:i*x for i in range(5)] 
  3. ... 
  4. >>> for multiplier in create_multipliers(): 
  5. ... print multiplier(2) 
  6. ... 

create_multipliers函數的返回值時一個列表,列表的每一個元素都是一個函數 -- 將輸入參數x乘以一個倍數i的函數。預期的結果時0,2,4,6,8. 但結果是5個8,意外不意外。

由于出現這個陷阱的時候經常使用了lambda,所以可能會認為是lambda的問題,但lambda表示不愿意背這個鍋。問題的本質在與python中的屬性查找規則,LEGB(local,enclousing,global,bulitin),在上面的例子中,i就是在閉包作用域(enclousing),而Python的閉包是 遲綁定 , 這意味著閉包中用到的變量的值,是在內部函數被調用時查詢得到的。

 解決辦法也很簡單,那就是變閉包作用域為局部作用域。

  1. >>> def create_multipliers(): 
  2. ... return [lambda x, i = i:i*x for i in range(5)] 
  3. ... 

第七,定義__del__

大多數計算機專業的同學可能都是先學的C、C++,構造、析構函數的概念應該都非常熟。于是,當切換到python的時候,自然也想知道有沒有相應的函數。比如,在C++中非常有名的RAII,即通過構造、析構來管理資源(如內存、文件描述符)的聲明周期。那在python中要達到同樣的效果怎么做呢,即需要找到一個對象在銷毀的時候一定會調用的函數,于是發現了__init__, __del__函數,可能簡單寫了兩個例子發現確實也能工作。但事實上可能掉進了一個陷阱,在python documnet是有描述的:

  Circular references which are garbage are detected when the option cycle detector is enabled (it’s on by default), but can only be cleaned up if there are no Python-level __del__() methods involved.

簡單來說,如果在循環引用中的對象定義了__del__,那么python gc不能進行回收,因此,存在內存泄漏的風險

第八,不同的姿勢import同一個module

示例在stackoverflow的例子上稍作修改,假設現在有一個package叫mypackage,里面包含三個python文件:mymodule.py, main.py, __init__.py。mymodule.py代碼如下:

  1. l = [] 
  2.  
  3. class A(object): 
  4.  
  5.     pass 

main.py代碼如下:

  1. def add(x): 
  2.     from mypackage import mymodule 
  3.     mymodule.l.append(x) 
  4.     print "updated list",mymodule.l, id(mymodule) 
  5.   
  6. def get(): 
  7.     import mymodule 
  8.     print 'module in get', id(mymodule) 
  9.     return mymodule.l 
  10.   
  11. if __name__ == '__main__'
  12.     import sys 
  13.     sys.path.append('../'
  14.     add(1) 
  15.      
  16.     ret = get() 
  17.     print "lets check", ret 

運行python main.py,結果如下:

  1. updated list [1] 4406700752 
  2. module in get 4406700920 
  3. lets check [] 

 從運行結果可以看到,在add 和 get函數中import的mymodule不是同一個module,ID不同。當然,在python2.7.10中,需要main.py的第13行才能出現這樣的效果。你可能會問,誰會寫出第13行這樣的代碼呢?事實上,在很多項目中,為了import的時候方便,會往sys.path加入一堆路徑。那么在項目中,大家同意一種import方式就非常有必要了

第九,python升級

python3.x并不向后兼容,所以如果從2.x升級到3.x的時候得小心了,下面列舉兩點:

在python2.7中,range的返回值是一個列表;而在python3.x中,返回的是一個range對象。

map()、filter()、 dict.items()在python2.7返回列表,而在3.x中返回迭代器。當然迭代器大多數都是比較好的選擇,更加pythonic,但是也有缺點,就是只能遍歷一次。在instagram的分享中,也提到因為這個導致的一個坑爹的bug。

 第十,gil

以GIL結尾,因為gil是Python中大家公認的缺陷!

從其他語言過來的同學可能看到python用threading模塊,拿過來就用,結果發現效果不對啊,然后就會噴,什么鬼。

總結:

毫無疑問的說,python是非常容易上手,也非常強大的一門語言。python非常靈活,可定制化很強。同時,也存在一些陷阱,搞清楚這些陷阱能夠更好的掌握、使用這么語言。本文列舉了一些python中的一些缺陷,這是一份不完全列表,歡迎大家補充。

 

責任編輯:武曉燕 來源: 程序員大咖
相關推薦

2017-08-03 14:25:13

Python陷阱與缺陷

2017-10-14 15:44:29

代碼Python陷阱

2017-10-12 10:30:39

Python陷阱與缺陷

2015-12-04 09:33:15

程序員前端演進史

2019-01-30 14:14:16

LinuxUNIX操作系統

2024-12-04 10:12:06

2023-09-12 11:25:15

2015-11-30 11:01:34

前端程序員歷史

2014-02-09 10:30:17

Python程序員工具

2019-07-10 09:12:20

程序員級別跳槽

2012-06-28 14:01:30

Java程序員排序

2023-10-26 18:05:37

Git命令差異

2020-10-26 15:20:05

架構運維技術

2015-05-19 14:34:17

程序員編程語言

2020-05-13 11:20:57

MySQL規范數據庫

2021-01-07 09:57:46

軟件架構服務器

2018-09-18 10:56:52

Android開發http

2020-11-25 10:40:58

程序員技能開發者

2020-03-31 08:42:14

程序員操作系統 Linux

2010-11-04 11:06:34

程序員
點贊
收藏

51CTO技術棧公眾號

亚洲在线色站| 国产欧美日韩视频| 中文字幕5566| 成人国产精品一区二区免费麻豆| 一区在线播放视频| 国产精品一区二区三区在线观| 国语对白永久免费| 偷拍欧美精品| 日韩激情在线视频| 911福利视频| av影片在线| 国产欧美精品日韩区二区麻豆天美 | 波多野结衣三级视频| 极品在线视频| 亚洲私人黄色宅男| 免费在线成人av电影| 国产女无套免费视频| 亚洲专区免费| 欧美激情中文字幕在线| 老司机精品免费视频| 国产成人tv| 7777精品伊人久久久大香线蕉超级流畅 | 免费理论片在线观看播放老| 国产美女精品人人做人人爽| 日韩男女性生活视频| 国产精品99精品无码视| 国产精品99视频| 亚洲毛茸茸少妇高潮呻吟| 人妻激情偷乱视频一区二区三区| 午夜欧美巨大性欧美巨大| 亚洲国产精品久久不卡毛片| 自拍偷拍99| 超碰免费在线观看| 91视频com| 国产精品一区二区三区免费观看| 国产一区二区麻豆| 三级成人在线视频| 欧美亚洲在线视频| 日韩久久精品视频| 精品成人在线| 色综合色综合久久综合频道88| 一二三四在线观看视频| 国内精品视频在线观看| 日韩av影片在线观看| 中文字幕一区二区三区人妻在线视频 | 色777狠狠狠综合伊人| 亚洲日本aⅴ片在线观看香蕉| 国产十八熟妇av成人一区| 亚洲精品视频一二三区| 欧美一级日韩一级| 午夜影院免费版| 一区在线不卡| 91精品在线麻豆| 色啦啦av综合| 国产 日韩 欧美| 欧美精选午夜久久久乱码6080| 91欧美视频在线| 久久精品嫩草影院| 91福利精品视频| www.99在线| 国产一区精品福利| 6080日韩午夜伦伦午夜伦| 91精品999| 久久影院一区二区三区| 在线电影国产精品| 丰满少妇一区二区三区专区| 视频精品国内| 亚洲国产小视频在线观看| 六十路息与子猛烈交尾| 日韩极品少妇| 亚洲网站在线播放| 欧美88888| 一区二区三区在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美国产日韩免费| 日韩欧美三级在线观看| 国产日韩欧美一区在线| 91精品国产成人| 午夜婷婷在线观看| 琪琪一区二区三区| 亚洲a在线观看| 亚洲精品第五页| aaa亚洲精品一二三区| 美国av一区二区三区| 国产在线中文字幕| 中文字幕国产一区| 制服诱惑一区| 国内小视频在线看| 欧美性jizz18性欧美| 色悠悠久久综合网| 精品视频成人| 精品视频在线播放| 制服丨自拍丨欧美丨动漫丨| 欧美日韩一区自拍| 欧美中在线观看| 在线免费看av片| 成人综合在线观看| 欧美日本韩国国产| 乱人伦中文视频在线| 亚洲不卡av一区二区三区| 国产xxxxx视频| 久久天堂久久| 一区二区三区精品99久久| 精品欧美一区二区久久久久| 久久一区亚洲| 波多野结衣精品久久| 精品久久av| 亚洲成人综合在线| 国产小视频精品| 成人av影音| 色狠狠久久aa北条麻妃| 香蕉视频一区二区| 国产综合一区二区| 免费国产一区二区| 宅男网站在线免费观看| 91精品福利在线| 人妻av一区二区| 天天久久综合| 日本午夜在线亚洲.国产| 国产精品久久久久久69| 久久久蜜桃精品| 欧美一二三不卡| 青青伊人久久| 亚洲欧洲第一视频| 免费日韩在线视频| 久久se精品一区二区| 免费av在线一区二区| 性网站在线观看| 欧美精品自拍偷拍| 日本人亚洲人jjzzjjz| 午夜亚洲影视| 国产一区喷水| 四虎影视成人| 91精品国产91久久久久久最新毛片 | 日韩中文字幕在线免费| 韩国三级成人在线| 中文字幕亚洲无线码在线一区| 久久一区二区三区视频| 成人一区二区三区视频在线观看 | 91久久综合| 亚洲综合色av| 黄色的网站在线观看| 欧美日韩在线三级| 久操视频在线观看免费| 日韩中文字幕区一区有砖一区 | 日韩免费中文字幕| 青青草在线免费观看| 无码av免费一区二区三区试看| 中文字幕1区2区| 午夜国产欧美理论在线播放| 91精品中文在线| 日本www在线| 欧美日韩久久不卡| eeuss中文字幕| 日本不卡一区二区三区 | 一边摸一边做爽的视频17国产| 雨宫琴音一区二区三区| 成人精品久久久| 成人免费高清| 精品久久久久99| 日韩久久精品视频| 久久综合狠狠综合| 日韩免费高清在线| 日本电影一区二区| 成人福利网站在线观看| 欧美jizzhd69巨大| 欧美一区二区视频观看视频| 欧美精品色哟哟| 成人激情综合网站| 六月丁香婷婷激情| 欧美精品乱码| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 国产一区二区三区高清播放| 日本老太婆做爰视频| 国产精品17p| 51视频国产精品一区二区| 日本天堂在线| 欧美日韩久久久一区| 男女羞羞免费视频| 波多野结衣一区二区三区| 北条麻妃在线视频观看| 国产精品欧美三级在线观看| 国产精品专区一| 久久香蕉一区| 亚洲精品少妇网址| 亚洲一区二区三区高清视频| 一区2区3区在线看| 亚洲第一页av| 麻豆极品一区二区三区| 国产毛片久久久久久国产毛片| 国产一区二区三区亚洲| 国产精品久久久久久久久男| 四虎影院观看视频在线观看 | 99国精产品一二二线| 午夜影院在线观看国产主播| www.日本久久久久com.| 韩国av在线免费观看| 91久久国产综合久久| 希岛爱理中文字幕| 91美女片黄在线观看| 99日在线视频| 亚洲一区二区三区高清| 在线视频91| 亚洲精品进入| 91麻豆桃色免费看| 原纱央莉成人av片| 欧美精品做受xxx性少妇| 嫩草研究院在线| 日韩一区二区精品| 日本黄色中文字幕| 亚洲国产精品久久久男人的天堂| 99久久99久久精品免费看小说.| 国产69精品久久久久毛片| 日本中文字幕高清| 亚洲激情二区| 日本成人性视频| 视频一区中文| 国产亚洲欧美一区二区三区| 欧美特黄一区二区三区| 欧美日本三区| 国产精品无码乱伦| 国产影视一区| 久久99精品久久久久久久青青日本| 欧美视频在线视频精品| 日本久久精品视频| 欧美一卡二卡| 久久综合国产精品台湾中文娱乐网| 黄色免费在线播放| 日韩精品中文字幕久久臀| www夜片内射视频日韩精品成人| 欧美日韩久久一区二区| 一级黄色av片| 岛国视频午夜一区免费在线观看| 免费又黄又爽又色的视频| 国产精品乱码一区二区三区软件 | 精品视频9999| 91精品大全| 国产亚洲欧美另类中文| 男人的天堂在线免费视频| 日韩精品极品在线观看播放免费视频| 亚洲AV无码成人片在线观看| 91精品国产品国语在线不卡| 一级黄色小视频| 欧美日韩免费一区二区三区视频 | 99在线视频影院| 欧美另类第一页| 成人在线播放| 久久影视电视剧免费网站清宫辞电视 | 福利一区二区在线观看| 伊人影院在线观看视频| 粉嫩久久99精品久久久久久夜| 一级黄色大片免费看| 国产精品一二三区在线| 中文字幕一区二区在线观看视频| 日本成人在线不卡视频| 日本在线观看免费视频| 美女免费视频一区| 久久久久久久久久久久久久久国产 | www.com操| 久久国产人妖系列| 中文字幕色网站| 国产河南妇女毛片精品久久久 | 91视频在线看| 在线观看福利片| 国产精品免费久久| 成人高潮免费视频| 亚洲欧洲日产国产综合网| 污污的视频在线免费观看| 夜夜精品视频一区二区| 日本视频免费在线| 日本韩国欧美国产| 一级片视频播放| 欧美精品一区二区三区久久久| 内射后入在线观看一区| 亚洲女人天堂成人av在线| 粉嫩av一区| 欧美xxxx做受欧美| av影院在线免费观看| 国产精品99久久久久久白浆小说| 99re久久| 国产精品18毛片一区二区| 中文字幕精品影院| 不卡中文字幕在线| 亚洲成色精品| 亚洲欧美日韩一级| 国产乱人伦偷精品视频不卡| 国产xxxxxxxxx| 国产欧美一区二区精品性| 天天操天天操天天操天天操天天操| 亚洲综合色成人| 天堂网视频在线| 欧美一区二区精品| 亚洲av毛片成人精品| 最新国产精品拍自在线播放| 国产盗摄在线视频网站| 欧美在线视频免费观看| 亚洲精品成a人ⅴ香蕉片| 国产嫩草一区二区三区在线观看 | 99国产精品久久久久久久久久久| 先锋影音av在线| 亚洲综合视频在线| 久久精品国产亚洲av麻豆蜜芽| 日韩欧美久久久| 国产黄色片在线播放| 欧美精品videossex性护士| 日本精品在线一区| 国产在线欧美日韩| 国产精品久久久久9999赢消| 日本免费黄视频| 国产在线观看免费一区| 中文字幕5566| 亚洲一区二区三区四区在线观看 | 日韩欧美中文字幕在线视频 | 色综合久久久久网| av中文字幕观看| 在线视频欧美性高潮| 多野结衣av一区| 亚洲综合小说区| 青草国产精品| 国产真实乱子伦| 风间由美性色一区二区三区| 少妇视频一区二区| 欧美性xxxxx极品| 男人天堂综合网| 九色精品美女在线| 99精品视频在线免费播放| 日本不卡在线播放| 亚洲精品乱码| 欧美成人精品一区二区综合免费| 国产精品的网站| 中文字幕av网站| 亚洲天堂色网站| 亚洲www免费| 久久综合福利| 99在线精品免费视频九九视| 成人啪啪18免费游戏链接| 国产精品国产精品国产专区不片 | 91制片在线观看| 97超碰人人模人人爽人人看| 国产精品久久久久久久| 亚洲免费看av| 亚洲国产成人私人影院tom| 国产99免费视频| 亚洲码在线观看| 欧美18—19sex性hd| 蜜桃成人在线| 久久久久久久高潮| 久久午夜福利电影| 色婷婷亚洲综合| 国产黄在线看| 国产精品专区h在线观看| 日韩伦理视频| 国产aⅴ爽av久久久久| 亚洲欧美综合色| 国产肥老妇视频| 欧美日韩高清在线观看| 在线视频亚洲欧美中文| 欧美黑人在线观看| 99精品黄色片免费大全| 9i看片成人免费看片| 国产小视频国产精品| 国产91欧美| 男人天堂成人网| 国产宾馆实践打屁股91| 伊人国产在线观看| 日韩成人av在线| 免费福利视频一区二区三区| 欧美一区二区综合| 男女激情视频一区| 国产又粗又硬又长又爽| 欧美不卡123| 三妻四妾的电影电视剧在线观看| 欧美色图亚洲自拍| 免费av成人在线| 久久国产在线观看| 亚洲免费小视频| 日日夜夜综合| 日韩美女爱爱视频| 91麻豆国产在线观看| 波多野结衣影片| 美女av一区二区三区 | 青青草久久网络| 麻豆精品在线视频| 免费在线观看黄色av| 亚洲男人av电影| 国产精品美女久久久久人| 免费一级特黄毛片| 国产欧美一区视频| 精品国产av一区二区| 欧美最猛性xxxxx(亚洲精品)| 欧美成人精品一区二区三区在线看| 久久人妻少妇嫩草av蜜桃| 日本精品一区二区三区四区的功能| av在线影院| 欧洲精品久久| 国产91色综合久久免费分享| 青青草视频在线观看免费| 欧美成人午夜激情视频| 欧美精品第一区| 精品无码av一区二区三区不卡|