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

5年 Python 功力,總結(jié)了 10 個開發(fā)技巧

開發(fā) 后端
今天給大家分享 10 個我平時整理非常實用的 Python 開發(fā)小技巧,這部分內(nèi)容已經(jīng)收錄在我寫的 《Python黑魔法指南》里。

 1. 如何在運行狀態(tài)查看源代碼?

[[329219]]

查看函數(shù)的源代碼,我們通常會使用 IDE 來完成。

比如在 PyCharm 中,你可以 Ctrl + 鼠標點擊 進入函數(shù)的源代碼。

那如果沒有 IDE 呢?

當我們想使用一個函數(shù)時,如何知道這個函數(shù)需要接收哪些參數(shù)呢?

當我們在使用函數(shù)時出現(xiàn)問題的時候,如何通過閱讀源代碼來排查問題所在呢?

這時候,我們可以使用 inspect 來代替 IDE 幫助你完成這些事

 

  1. # demo.py 
  2. import inspect 
  3.  
  4.  
  5. def add(x, y): 
  6.     return x + y 
  7.  
  8. print("==================="
  9. print(inspect.getsource(add)) 

運行結(jié)果如下

 

  1. $ python demo.py 
  2. =================== 
  3. def add(x, y): 
  4.     return x + y 

2. 如何關(guān)閉異常自動關(guān)聯(lián)上下文?

當你在處理異常時,由于處理不當或者其他問題,再次拋出另一個異常時,往外拋出的異常也會攜帶原始的異常信息。

就像這樣子。

 

  1. try: 
  2.     print(1 / 0) 
  3. except Exception as exc: 
  4.     raise RuntimeError("Something bad happened"

從輸出可以看到兩個異常信息

 

  1. Traceback (most recent call last): 
  2.   File "demo.py", line 2, in <module> 
  3.     print(1 / 0) 
  4. ZeroDivisionError: division by zero 
  5.  
  6. During handling of the above exception, another exception occurred: 
  7.  
  8. Traceback (most recent call last): 
  9.   File "demo.py", line 4, in <module> 
  10.     raise RuntimeError("Something bad happened"
  11. RuntimeError: Something bad happened 

如果在異常處理程序或 finally 塊中引發(fā)異常,默認情況下,異常機制會隱式工作會將先前的異常附加為新異常的 __context__屬性。這就是 Python 默認開啟的自動關(guān)聯(lián)異常上下文。

如果你想自己控制這個上下文,可以加個 from 關(guān)鍵字(from 語法會有個限制,就是第二個表達式必須是另一個異常類或?qū)嵗?,來表明你的新異常是直接由哪個異常引起的。

 

  1. try: 
  2.     print(1 / 0) 
  3. except Exception as exc: 
  4.     raise RuntimeError("Something bad happened"from exc 

輸出如下

 

  1. Traceback (most recent call last): 
  2.   File "demo.py", line 2, in <module> 
  3.     print(1 / 0) 
  4. ZeroDivisionError: division by zero 
  5.  
  6. The above exception was the direct cause of the following exception: 
  7.  
  8. Traceback (most recent call last): 
  9.   File "demo.py", line 4, in <module> 
  10.     raise RuntimeError("Something bad happened"from exc 
  11. RuntimeError: Something bad happened 

當然,你也可以通過with_traceback()方法為異常設(shè)置上下文__context__屬性,這也能在traceback更好的顯示異常信息。

 

  1. try: 
  2.     print(1 / 0) 
  3. except Exception as exc: 
  4.     raise RuntimeError("bad thing").with_traceback(exc) 

最后,如果我想徹底關(guān)閉這個自動關(guān)聯(lián)異常上下文的機制?有什么辦法呢?

可以使用 raise...from None,從下面的例子上看,已經(jīng)沒有了原始異常

 

  1. $ cat demo.py 
  2. try: 
  3.     print(1 / 0) 
  4. except Exception as exc: 
  5.     raise RuntimeError("Something bad happened"from None 
  6. $ python demo.py 
  7. Traceback (most recent call last): 
  8.   File "demo.py", line 4, in <module> 
  9.     raise RuntimeError("Something bad happened"from None 
  10. RuntimeError: Something bad happened 
  11. (PythonCodingTime) 

03. 最快查看包搜索路徑的方式

當你使用 import 導(dǎo)入一個包或模塊時,Python 會去一些目錄下查找,而這些目錄是有優(yōu)先級順序的,正常人會使用 sys.path 查看。

 

  1. >>> import sys 
  2. >>> from pprint import pprint    
  3. >>> pprint(sys.path) 
  4. [''
  5.  '/usr/local/Python3.7/lib/python37.zip'
  6.  '/usr/local/Python3.7/lib/python3.7'
  7.  '/usr/local/Python3.7/lib/python3.7/lib-dynload'
  8.  '/home/wangbm/.local/lib/python3.7/site-packages'
  9.  '/usr/local/Python3.7/lib/python3.7/site-packages'
  10. >>>  

那有沒有更快的方式呢?

我這有一種連 console 模式都不用進入的方法呢?

你可能會想到這種,但這本質(zhì)上與上面并無區(qū)別

 

  1. [wangbm@localhost ~]$ python -c "print('\n'.join(__import__('sys').path))" 
  2.  
  3. /usr/lib/python2.7/site-packages/pip-18.1-py2.7.egg 
  4. /usr/lib/python2.7/site-packages/redis-3.0.1-py2.7.egg 
  5. /usr/lib64/python27.zip 
  6. /usr/lib64/python2.7 
  7. /usr/lib64/python2.7/plat-linux2 
  8. /usr/lib64/python2.7/lib-tk 
  9. /usr/lib64/python2.7/lib-old 
  10. /usr/lib64/python2.7/lib-dynload 
  11. /home/wangbm/.local/lib/python2.7/site-packages 
  12. /usr/lib64/python2.7/site-packages 
  13. /usr/lib64/python2.7/site-packages/gtk-2.0 
  14. /usr/lib/python2.7/site-packages 

這里我要介紹的是比上面兩種都方便的多的方法,一行命令即可解決

 

  1. [wangbm@localhost ~]$ python3 -m site 
  2. sys.path = [ 
  3.     '/home/wangbm'
  4.     '/usr/local/Python3.7/lib/python37.zip'
  5.     '/usr/local/Python3.7/lib/python3.7'
  6.     '/usr/local/Python3.7/lib/python3.7/lib-dynload'
  7.     '/home/wangbm/.local/lib/python3.7/site-packages'
  8.     '/usr/local/Python3.7/lib/python3.7/site-packages'
  9. USER_BASE: '/home/wangbm/.local' (exists) 
  10. USER_SITE: '/home/wangbm/.local/lib/python3.7/site-packages' (exists) 
  11. ENABLE_USER_SITE: True 

從輸出你可以發(fā)現(xiàn),這個列的路徑會比 sys.path 更全,它包含了用戶環(huán)境的目錄。

4. 將嵌套 for 循環(huán)寫成單行

我們經(jīng)常會如下這種嵌套的 for 循環(huán)代碼

 

  1. list1 = range(1,3) 
  2. list2 = range(4,6) 
  3. list3 = range(7,9) 
  4. for item1 in list1: 
  5.     for item2 in list2: 
  6.        for item3 in list3: 
  7.            print(item1+item2+item3) 

這里僅僅是三個 for 循環(huán),在實際編碼中,有可能會有更層。

這樣的代碼,可讀性非常的差,很多人不想這么寫,可又沒有更好的寫法。

這里介紹一種我常用的寫法,使用 itertools 這個庫來實現(xiàn)更優(yōu)雅易讀的代碼。

 

  1. from itertools import product 
  2. list1 = range(1,3) 
  3. list2 = range(4,6) 
  4. list3 = range(7,9) 
  5. for item1,item2,item3 in product(list1, list2, list3): 
  6.     print(item1+item2+item3) 

輸出如下

 

  1. $ python demo.py 
  2. 12 
  3. 13 
  4. 13 
  5. 14 
  6. 13 
  7. 14 
  8. 14 
  9. 15 

5. 如何使用 print 輸出日志

初學(xué)者喜歡使用 print 來調(diào)試代碼,并記錄程序運行過程。

但是 print 只會將內(nèi)容輸出到終端上,不能持久化到日志文件中,并不利于問題的排查。

如果你熱衷于使用 print 來調(diào)試代碼(雖然這并不是最佳做法),記錄程序運行過程,那么下面介紹的這個 print 用法,可能會對你有用。

Python 3 中的 print 作為一個函數(shù),由于可以接收更多的參數(shù),所以功能變?yōu)楦訌姶螅付ㄒ恍﹨?shù)可以將 print 的內(nèi)容輸出到日志文件中

代碼如下:

 

  1. >>> with open('test.log', mode='w'as f: 
  2. ...     print('hello, python', file=f, flush=True
  3. >>> exit() 
  4.  
  5. $ cat test.log 
  6. hello, python 

6. 如何快速計算函數(shù)運行時間

計算一個函數(shù)的運行時間,你可能會這樣子做

 

  1. import time 
  2.  
  3. start = time.time() 
  4.  
  5. # run the function 
  6.  
  7. end = time.time() 
  8. print(end-start) 

你看看你為了計算函數(shù)運行時間,寫了幾行代碼了。

有沒有一種方法可以更方便的計算這個運行時間呢?

有。

有一個內(nèi)置模塊叫 timeit

使用它,只用一行代碼即可

 

  1. import time 
  2. import timeit 
  3.  
  4. def run_sleep(second): 
  5.     print(second
  6.     time.sleep(second
  7.  
  8. # 只用這一行 
  9. print(timeit.timeit(lambda :run_sleep(2), number=5)) 

運行結(jié)果如下

 

  1. 10.020059824 

7. 利用自帶的緩存機制提高效率

緩存是一種將定量數(shù)據(jù)加以保存,以備迎合后續(xù)獲取需求的處理方式,旨在加快數(shù)據(jù)獲取的速度。

數(shù)據(jù)的生成過程可能需要經(jīng)過計算,規(guī)整,遠程獲取等操作,如果是同一份數(shù)據(jù)需要多次使用,每次都重新生成會大大浪費時間。所以,如果將計算或者遠程請求等操作獲得的數(shù)據(jù)緩存下來,會加快后續(xù)的數(shù)據(jù)獲取需求。

為了實現(xiàn)這個需求,Python 3.2 + 中給我們提供了一個機制,可以很方便的實現(xiàn),而不需要你去寫這樣的邏輯代碼。

這個機制實現(xiàn)于 functool 模塊中的 lru_cache 裝飾器。

 

  1. @functools.lru_cache(maxsize=None, typed=False

參數(shù)解讀:

  • maxsize:最多可以緩存多少個此函數(shù)的調(diào)用結(jié)果,如果為None,則無限制,設(shè)置為 2 的冪時,性能最佳
  • typed:若為 True,則不同參數(shù)類型的調(diào)用將分別緩存。

舉個例子

 

  1. from functools import lru_cache 
  2.  
  3. @lru_cache(None) 
  4. def add(x, y): 
  5.     print("calculating: %s + %s" % (x, y)) 
  6.     return x + y 
  7.  
  8. print(add(1, 2)) 
  9. print(add(1, 2)) 
  10. print(add(2, 3)) 

輸出如下,可以看到第二次調(diào)用并沒有真正的執(zhí)行函數(shù)體,而是直接返回緩存里的結(jié)果

 

  1. calculating: 1 + 2 
  2. calculating: 2 + 3 

下面這個是經(jīng)典的斐波那契數(shù)列,當你指定的 n 較大時,會存在大量的重復(fù)計算

 

  1. def fib(n): 
  2.     if n < 2: 
  3.         return n 
  4.     return fib(n - 2) + fib(n - 1) 

第六點介紹的 timeit,現(xiàn)在可以用它來測試一下到底可以提高多少的效率。

不使用 lru_cache 的情況下,運行時間 31 秒

 

  1. import timeit 
  2.  
  3. def fib(n): 
  4.     if n < 2: 
  5.         return n 
  6.     return fib(n - 2) + fib(n - 1) 
  7.  
  8.  
  9.  
  10. print(timeit.timeit(lambda :fib(40), number=1)) 
  11. output: 31.2725698948 

由于使用了 lru_cache 后,運行速度實在太快了,所以我將 n 值由 30 調(diào)到 500,可即使是這樣,運行時間也才 0.0004 秒。提高速度非常顯著。

 

  1. import timeit 
  2. from functools import lru_cache 
  3.  
  4. @lru_cache(None) 
  5. def fib(n): 
  6.     if n < 2: 
  7.         return n 
  8.     return fib(n - 2) + fib(n - 1) 
  9.  
  10. print(timeit.timeit(lambda :fib(500), number=1)) 
  11. # output: 0.0004921059880871326 

8. 在程序退出前執(zhí)行代碼的技巧

使用 atexit 這個內(nèi)置模塊,可以很方便的注冊退出函數(shù)。

不管你在哪個地方導(dǎo)致程序崩潰,都會執(zhí)行那些你注冊過的函數(shù)。

示例如下

 

如果clean()函數(shù)有參數(shù),那么你可以不用裝飾器,而是直接調(diào)用atexit.register(clean_1, 參數(shù)1, 參數(shù)2, 參數(shù)3='xxx')。

可能你有其他方法可以處理這種需求,但肯定比上不使用 atexit 來得優(yōu)雅,來得方便,并且它很容易擴展。

但是使用 atexit 仍然有一些局限性,比如:

  • 如果程序是被你沒有處理過的系統(tǒng)信號殺死的,那么注冊的函數(shù)無法正常執(zhí)行。
  • 如果發(fā)生了嚴重的 Python 內(nèi)部錯誤,你注冊的函數(shù)無法正常執(zhí)行。
  • 如果你手動調(diào)用了os._exit(),你注冊的函數(shù)無法正常執(zhí)行。

9. 實現(xiàn)類似 defer 的延遲調(diào)用

在 Golang 中有一種延遲調(diào)用的機制,關(guān)鍵字是 defer,例如下面的示例

 

  1. import "fmt" 
  2.  
  3. func myfunc() { 
  4.     fmt.Println("B"
  5.  
  6. func main() { 
  7.     defer myfunc() 
  8.     fmt.Println("A"

輸出如下,myfunc 的調(diào)用會在函數(shù)返回前一步完成,即使你將 myfunc 的調(diào)用寫在函數(shù)的第一行,這就是延遲調(diào)用。

 

那么在 Python 中否有這種機制呢?

當然也有,只不過并沒有 Golang 這種簡便。

在 Python 可以使用 上下文管理器 達到這種效果

 

  1. import contextlib 
  2.  
  3. def callback(): 
  4.     print('B'
  5.  
  6. with contextlib.ExitStack() as stack: 
  7.     stack.callback(callback) 
  8.     print('A'

輸出如下

 

10. 如何流式讀取數(shù)G超大文件

使用 with...open... 可以從一個文件中讀取數(shù)據(jù),這是所有 Python 開發(fā)者都非常熟悉的操作。

但是如果你使用不當,也會帶來很大的麻煩。

比如當你使用了 read 函數(shù),其實 Python 會將文件的內(nèi)容一次性的全部載入內(nèi)存中,如果文件有 10 個G甚至更多,那么你的電腦就要消耗的內(nèi)存非常巨大。

 

  1. # 一次性讀取 
  2. with open("big_file.txt""r"as fp: 
  3.     content = fp.read() 

對于這個問題,你也許會想到使用 readline 去做一個生成器來逐行返回。

 

  1. def read_from_file(filename): 
  2.     with open(filename, "r"as fp: 
  3.         yield fp.readline() 

可如果這個文件內(nèi)容就一行呢,一行就 10個G,其實你還是會一次性讀取全部內(nèi)容。

最優(yōu)雅的解決方法是,在使用 read 方法時,指定每次只讀取固定大小的內(nèi)容,比如下面的代碼中,每次只讀取 8kb 返回。

 

  1. def read_from_file(filename, block_size = 1024 * 8): 
  2.     with open(filename, "r"as fp: 
  3.         while True
  4.             chunk = fp.read(block_size) 
  5.             if not chunk: 
  6.                 break 
  7.  
  8.             yield chunk 

上面的代碼,功能上已經(jīng)沒有問題了,但是代碼看起來代碼還是有些臃腫。

借助偏函數(shù) 和 iter 函數(shù)可以優(yōu)化一下代碼

 

  1. from functools import partial 
  2.  
  3. def read_from_file(filename, block_size = 1024 * 8): 
  4.     with open(filename, "r"as fp: 
  5.         for chunk in iter(partial(fp.read, block_size), ""): 
  6.             yield chunk 

 

責任編輯:華軒 來源: Python編程時光
相關(guān)推薦

2020-06-10 10:30:48

Python 開發(fā)編程語言

2019-12-02 14:39:14

密碼登陸體驗

2020-06-30 08:28:29

Vue開發(fā)前端

2021-05-17 09:31:58

爬蟲偽裝技巧

2020-06-09 10:55:16

Python編程代碼

2023-07-17 11:43:07

2021-11-19 16:54:11

Python代碼開發(fā)

2025-09-29 01:10:00

2025-06-30 10:10:36

2018-05-21 09:55:09

Java編程技巧

2020-06-23 08:28:26

前端開發(fā)技巧

2019-07-31 14:33:23

UI設(shè)計UI界面動畫

2015-07-27 09:36:09

storyboard

2020-06-08 07:52:31

Python開發(fā)工具

2019-03-15 10:25:00

技術(shù)研發(fā)指標

2010-01-22 16:35:41

C++開發(fā)

2009-08-27 16:54:59

C#開發(fā)技巧

2014-07-03 16:35:38

WebApp開發(fā)技巧總結(jié)

2015-06-17 10:28:10

WebAPP開發(fā)技巧

2015-06-04 10:44:59

WebAPP開發(fā)技巧
點贊
收藏

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

在线播放一区| 九九热这里有精品| 久久久久一区二区三区四区| 国产精品久久99久久| 国产精品情侣呻吟对白视频| 99国内精品久久久久| 亚洲国产cao| 亚洲欧美日韩精品在线| www.久久伊人| 日本不卡一区二区三区高清视频| 久久久国产成人精品| chinese麻豆新拍video| 另类一区二区| 欧美日韩免费在线观看| 中文字幕一区二区三区四区五区六区 | 超碰97人人射妻| 麻豆tv免费在线观看| 99这里只有精品| 91精品视频一区| youjizz在线视频| 欧美日韩三区| 日韩天堂在线视频| 第一页在线视频| 台湾天天综合人成在线| 欧美日韩一区二区三区| 日韩视频 中文字幕| yiren22综合网成人| 97se狠狠狠综合亚洲狠狠| 亚洲a在线播放| 看黄色一级大片| 99在线精品视频在线观看| 欧美成年人网站| 亚洲精品天堂网| 国产成人一区二区三区影院| 精品国产91洋老外米糕| 91免费视频污| 少妇高潮一区二区三区99| 色av综合在线| 成年人视频网站免费观看| 欧美男男video| 亚洲欧美激情小说另类| 婷婷五月色综合| 久久精品国产亚洲a∨麻豆| va亚洲va日韩不卡在线观看| 91嫩草视频在线观看| 国产又粗又猛又色又| 久色婷婷小香蕉久久| 国产精品国产亚洲伊人久久 | 日日夜夜精品视频天天综合网| 韩国精品久久久999| 久久免费精彩视频| 亚洲性色视频| 97超级碰在线看视频免费在线看| 日干夜干天天干| 日韩天堂av| 国产91精品久久久久久| 国产高清中文字幕| 国产日韩欧美三级| 欧美亚洲日本网站| 国产精品久久久久久久久夜色| 久久在线精品| 国产精品成人aaaaa网站| 日本三级一区二区三区| 六月婷婷色综合| 91丨九色丨国产在线| 国产精品视频一二区| 国产主播一区二区三区| 91久色国产| 天天干天天干天天干| 91在线精品秘密一区二区| 久久久福利视频| jyzzz在线观看视频| 国产精品私人自拍| 99精品一级欧美片免费播放| av免费在线网站| 亚洲图片欧美色图| 日本一本二本在线观看| 日本黄色一区| 91精品国产乱| 天天插天天射天天干| 狠狠综合久久av一区二区蜜桃 | 欧美日韩综合久久| 91在线观看| 亚洲综合久久久| 久久久久久久久久久福利| 最新亚洲国产| 亚洲第一中文字幕在线观看| 西西444www无码大胆| 五月精品视频| 45www国产精品网站| 中文字幕av免费观看| 国产高清无密码一区二区三区| 好吊色欧美一区二区三区四区| 久蕉在线视频| 亚洲综合精品自拍| 美女网站视频黄色| 91大神精品| 自拍偷拍免费精品| 免费毛片一区二区三区| 欧美bbbbb| 国产日产精品一区二区三区四区| a中文在线播放| 午夜国产精品一区| 欧美一级视频在线| 同性恋视频一区| 久久久av电影| 超碰在线观看91| 粉嫩蜜臀av国产精品网站| 视频一区国产精品| av蜜臀在线| 欧美肥胖老妇做爰| av手机在线播放| 日韩图片一区| 99九九视频| 免费网站成人| 欧美在线观看一区| 中文字幕一区三区久久女搜查官| 国产精品精品| 国产精品久久久久免费a∨| 人妻精品一区二区三区| 亚洲日穴在线视频| mm1313亚洲国产精品无码试看| 风间由美一区二区av101| 色婷婷综合久久久久中文字幕1| 国产精品午夜影院| 国产suv精品一区二区6| 综合视频在线观看| 成人在线视频免费看| 亚洲精品色婷婷福利天堂| 国产午夜精品无码| 国产福利精品一区二区| 一区二区三区在线视频111| 欧美free嫩15| 亚洲人成亚洲人成在线观看| 日韩特黄一级片| 成人丝袜18视频在线观看| 手机看片日韩国产| 91视频亚洲| xxx成人少妇69| 国产老女人乱淫免费| 国产精品无遮挡| 天堂av在线网站| 第一会所亚洲原创| 国产精品美乳在线观看| 国自产拍在线网站网址视频| 一本色道**综合亚洲精品蜜桃冫| 可以直接看的无码av| 国产手机视频一区二区| 国产主播一区二区三区四区| 蜜桃av在线播放| 日韩精品999| 国产精品久久久久久久久久精爆| 欧美一级二级视频| 国产精品2024| 国产精品第157页| 99亚洲乱人伦aⅴ精品| 欧美精品videossex性护士| 午夜精品久久久久久久爽| 亚洲一区二区三区不卡国产欧美 | 国产剧情一区二区在线观看| 久久久精品一区| 国产肥老妇视频| 亚洲香肠在线观看| 国产xxxxxxxxx| 丝袜亚洲另类欧美综合| 视频一区不卡| 国产一区二区av在线| 欧美国产精品日韩| 天天干,天天操,天天射| 欧美日韩中文字幕在线| 国产亚洲精品熟女国产成人| 麻豆精品一区二区综合av| 正在播放亚洲| 97久久超碰| 992tv在线成人免费观看| 伦理片一区二区三区| 欧美日韩一级视频| 久久久久久久久精| 久久人人97超碰com| 天天干天天综合| 国模一区二区三区| 日本视频一区二区不卡| 欧美成人黄色| 97免费视频在线播放| av网站在线免费观看| 欧美mv日韩mv国产| 在线免费一区二区| 亚洲精品视频自拍| 97超碰在线免费观看| 激情五月播播久久久精品| 日韩五码在线观看| 欧美1级片网站| 久久久精品有限公司| 视频91a欧美| 欧美亚洲激情在线| 粗大黑人巨茎大战欧美成人| 日韩av资源在线播放| 一级特黄aa大片| 精品久久久视频| 欧美日韩在线观看成人| 菠萝蜜视频在线观看一区| 在线黄色免费观看| 99精品免费| ijzzijzzij亚洲大全| 久久91成人| 国产日韩欧美亚洲一区| 国产激情综合| 国产精品日韩精品| 九色porny视频在线观看| 北条麻妃在线一区二区| 牛牛澡牛牛爽一区二区| 日韩欧美专区在线| 亚洲视频在线观看一区二区| 精品日本美女福利在线观看| 欧美日韩亚洲国产另类| 中文幕一区二区三区久久蜜桃| 国产精品无码专区| 国产精品一区二区你懂的| www欧美激情| 久久午夜精品| 久久精品视频16| 国产综合色产| 热久久最新地址| 91精品秘密在线观看| 五月天丁香综合久久国产| 无码少妇一区二区三区| 国产精品一区二区你懂得| 成人国产精品久久| 国产欧洲精品视频| 精品肉辣文txt下载| 97成人超碰免| 日韩少妇视频| 欧美激情国产日韩精品一区18| 国内外激情在线| 久久天天躁日日躁| 黄色网在线看| 久久伊人精品一区二区三区| 在线国产91| 色天天综合狠狠色| 久热国产在线| 美女av一区二区三区| 欧美成人三区| 久久艹在线视频| 97影院秋霞午夜在线观看| 久久亚洲精品一区二区| 成年人网站在线| 欧美国产日韩一区| 精灵使的剑舞无删减版在线观看| 欧美高清视频在线| 91av久久| 日韩美女激情视频| 日产精品一区| 国产免费亚洲高清| www一区二区三区| 91视频免费在线观看| 成人av资源网址| 另类欧美小说| 精品freesex老太交| 亚洲欧美日韩精品在线| 天天做天天爱天天综合网2021| av磁力番号网| 一区二区视频欧美| 欧美色图另类小说| 日韩和欧美一区二区三区| 999精彩视频| 国产成人在线视频网站| 亚洲熟女乱综合一区二区三区| 26uuu久久天堂性欧美| 成人小视频免费看| 亚洲欧洲综合另类在线| 国产精品不卡av| 在线观看国产一区二区| 国产手机视频在线| 亚洲精品成人久久| 国产三级在线| 欧美成人免费网| 深夜成人在线| 成人免费看吃奶视频网站| 一区二区三区亚洲变态调教大结局| 精品视频第一区| 日韩欧美综合| 日韩欧美不卡在线| 久久精品国产999大香线蕉| 无码人妻少妇色欲av一区二区| 91一区二区在线| 伊人久久久久久久久久久久久久| 亚洲自拍偷拍欧美| 久久久久亚洲视频| 精品免费日韩av| av在线播放免费| 国产最新精品视频| 国模私拍国内精品国内av| 国产精品嫩草在线观看| 久久福利综合| 凹凸国产熟女精品视频| 国产乱码字幕精品高清av| 国产成人av一区二区三区不卡| 亚洲欧美韩国综合色| 神马久久久久久久| 精品88久久久久88久久久| 五月天婷婷在线视频| 奇米成人av国产一区二区三区 | 国产无套精品一区二区| 日韩欧美视频专区| 欧美 日韩 国产 高清| 精品在线视频一区| 精品人妻互换一区二区三区| 亚洲精品第一国产综合野| 最新国产中文字幕| 日韩精品在线观看视频| 性xxxfreexxxx性欧美| 国产精品白嫩美女在线观看| 卡通动漫精品一区二区三区| 久久久天堂国产精品| 久久精品国产一区二区三| 国产吞精囗交久久久| 亚洲二区在线视频| 国产激情久久久久久熟女老人av| 国产亚洲精品久久久| 一区二区三区四区日本视频| av成人午夜| 一区二区三区午夜探花| 日韩一区二区三区不卡视频| 久久久99精品免费观看| 日韩精品久久久久久久| 日韩精品一区二区在线| 黄色av免费在线| 国产欧美一区二区| 波多野结衣一区| 久久国产色av免费观看| aaa亚洲精品| 日韩经典在线观看| 精品国产电影一区二区| 国产偷倩在线播放| 成人免费视频网站| 激情综合激情| av免费观看不卡| 偷拍中文亚洲欧美动漫| 777午夜精品视频在线播放| 精品亚洲aⅴ无码一区二区三区| 婷婷久久综合九色综合伊人色| 亚洲国产精品久久久久爰性色| 欧美剧在线观看| 99re6热只有精品免费观看| av动漫在线播放| 国产成人三级在线观看| 欧美黑吊大战白妞| 欧美大肚乱孕交hd孕妇| 9lporm自拍视频区在线| 国产精品久久精品视| 亚洲伦理精品| 国产男女猛烈无遮挡a片漫画| 欧美性极品xxxx做受| 黑人与亚洲人色ⅹvideos| 国产精品video| 99国产精品一区二区| 一个人看的视频www| 亚洲综合在线视频| 无码国产精品一区二区色情男同| 欧美亚洲日本黄色| 日产午夜精品一线二线三线| 五月花丁香婷婷| 亚洲综合区在线| 免费人成在线观看网站| 国产欧美一区二区三区久久| 欧美日本精品| 国产精品福利导航| 欧洲一区二区av| 视频在线这里都是精品| 国产精品成人一区二区三区| 国产精品日本| 国产又粗又长又硬| 欧美成人国产一区二区| 五月天国产在线| 亚洲最大色综合成人av| 九一九一国产精品| 日本在线视频免费| 中文字幕欧美日韩| 第四色在线一区二区| 热久久精品国产| 一区二区三区在线不卡| 日韩欧美电影在线观看| 成人黄色激情网| 国产婷婷精品| 成人做爰视频网站| 亚洲国产又黄又爽女人高潮的| 蜜桃视频成人m3u8| 高清无码视频直接看| 国产夜色精品一区二区av| 国产婷婷在线视频| 日韩美女免费视频| 中文乱码免费一区二区三区下载| 亚洲蜜桃精久久久久久久久久久久| 欧美性猛片xxxx免费看久爱| 欧美xxxx黑人又粗又长| 日韩精品无码一区二区三区| 国产不卡免费视频| 在线观看不卡的av| 欧美一级高清免费| 欧美日一区二区三区在线观看国产免|