国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

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

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

[[329219]]

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

比如在 PyCharm 中,你可以 Ctrl + 鼠標(biāo)點(diǎn)擊 進(jìn)入函數(shù)的源代碼。

那如果沒有 IDE 呢?

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

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

這時(shí)候,我們可以使用 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)) 

運(yùn)行結(jié)果如下

 

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

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

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

就像這樣子。

 

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

從輸出可以看到兩個(gè)異常信息

 

  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ā)異常,默認(rèn)情況下,異常機(jī)制會隱式工作會將先前的異常附加為新異常的 __context__屬性。這就是 Python 默認(rèn)開啟的自動關(guān)聯(lián)異常上下文。

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

 

  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 

當(dāng)然,你也可以通過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)閉這個(gè)自動關(guān)聯(lián)異常上下文的機(jī)制?有什么辦法呢?

可以使用 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. 最快查看包搜索路徑的方式

當(dāng)你使用 import 導(dǎo)入一個(gè)包或模塊時(shí),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 模式都不用進(jìn)入的方法呢?

你可能會想到這種,但這本質(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),這個(gè)列的路徑會比 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) 

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

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

這里介紹一種我常用的寫法,使用 itertools 這個(gè)庫來實(shí)現(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)試代碼,并記錄程序運(yùn)行過程。

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

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

Python 3 中的 print 作為一個(gè)函數(shù),由于可以接收更多的參數(shù),所以功能變?yōu)楦訌?qiáng)大,指定一些參數(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. 如何快速計(jì)算函數(shù)運(yùn)行時(shí)間

計(jì)算一個(gè)函數(shù)的運(yùn)行時(shí)間,你可能會這樣子做

 

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

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

有沒有一種方法可以更方便的計(jì)算這個(gè)運(yùn)行時(shí)間呢?

有。

有一個(gè)內(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)) 

運(yùn)行結(jié)果如下

 

  1. 10.020059824 

7. 利用自帶的緩存機(jī)制提高效率

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

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

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

這個(gè)機(jī)制實(shí)現(xiàn)于 functool 模塊中的 lru_cache 裝飾器。

 

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

參數(shù)解讀:

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

舉個(gè)例子

 

  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 

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

 

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

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

不使用 lru_cache 的情況下,運(yùn)行時(shí)間 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 后,運(yùn)行速度實(shí)在太快了,所以我將 n 值由 30 調(diào)到 500,可即使是這樣,運(yùn)行時(shí)間也才 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 這個(gè)內(nèi)置模塊,可以很方便的注冊退出函數(shù)。

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

示例如下

 

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

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

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

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

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

在 Golang 中有一種延遲調(diào)用的機(jī)制,關(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 中否有這種機(jī)制呢?

當(dāng)然也有,只不過并沒有 Golang 這種簡便。

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

 

  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... 可以從一個(gè)文件中讀取數(shù)據(jù),這是所有 Python 開發(fā)者都非常熟悉的操作。

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

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

 

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

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

 

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

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

最優(yōu)雅的解決方法是,在使用 read 方法時(shí),指定每次只讀取固定大小的內(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 

 

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

2020-06-10 10:30:48

Python 開發(fā)編程語言

2019-12-02 14:39:14

密碼登陸體驗(yàn)

2020-06-30 08:28:29

Vue開發(fā)前端

2021-05-17 09:31:58

爬蟲偽裝技巧

2020-06-09 10:55:16

Python編程代碼

2021-11-19 16:54:11

Python代碼開發(fā)

2023-07-17 11:43:07

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è)計(jì)UI界面動畫

2015-07-27 09:36:09

storyboard

2020-06-08 07:52:31

Python開發(fā)工具

2019-03-15 10:25:00

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

2010-01-22 16:35:41

C++開發(fā)

2014-07-03 16:35:38

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

2009-08-27 16:54:59

C#開發(fā)技巧

2015-06-17 10:28:10

WebAPP開發(fā)技巧

2015-06-04 10:44:59

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

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

一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 一本久久精品一区二区| 韩国黄色一级大片| 欧美日韩a区| 91嫩草在线视频| 视频精品在线观看| 97精品久久久中文字幕免费| 国产乱子精品一区二区在线观看| 日韩精品高清视频| 成人影音在线| 欧美va亚洲va在线观看蝴蝶网| www.在线播放| 欧美日本一道本在线视频| 国产无套粉嫩白浆在线2022年| 欧美日韩国产中文字幕| 亚洲高清国产精品| 欧美日韩国产中文字幕| 亚洲人av在线| 一区二区免费在线| 自拍偷拍电影| 亚洲一二三区视频在线观看| 天堂在线视频| 欧美吻胸吃奶大尺度电影| 69久久久久| 日韩精品专区在线影院重磅| 欧美寡妇性猛交xxx免费| 精品国产露脸精彩对白 | 欧美日韩国产精品一卡| 日韩午夜免费| 欧美少妇一区| 九九久久精品视频 | 久久综合影音| 亚洲午夜高清视频| 国产91精品一区二区麻豆网站| www.av毛片| av一本久道久久综合久久鬼色| 国产综合免费视频| 一区二区在线看| 91成人高清| 亚洲国产精品中文| 日日夜夜精品| 国产精品一区二区3区| 狠狠入ady亚洲精品| 午夜精品一区二区三区在线观看 | 99久久精品免费看国产一区二区三区| 好吊视频一区二区三区四区| 欧美二区三区在线| 国产成人日日夜夜| 成人3d动漫网站| 色久综合一二码| av资源在线| 欧美疯狂做受xxxx高潮| 岳的好大精品一区二区三区| 99久久精品无码一区二区毛片| 免费成人在线视频观看| 欧美牲交a欧美牲交aⅴ免费下载| 一个色在线综合| av免费网站在线| 欧美日本高清视频| 在线中文一区| 亚洲精品日韩精品| 欧美国产丝袜视频| www.视频在线.com| 俺去啦;欧美日韩| 中文视频一区| 日韩精品视频一区二区在线观看| 欧美视频在线看| 国产精品黄色片| 91在线免费看片| 波多野结衣中文字幕一区| 免费在线黄网| 亚洲视频欧洲视频| 欧美艳星介绍134位艳星| 亚洲国产精品www| 亚洲资源在线观看| 日韩av一级| 国产丝袜不卡| 亚洲欧洲精品一区二区精品久久久| 福利视频在线| 国产精品成人免费电影| 国产成人免费高清| 国产午夜视频在线观看| 欧美激情网站在线观看| 青青国产91久久久久久| 中文字幕在线看| 欧美成人三级视频网站| 欧美亚洲一区| 黄色免费看网站| 波霸ol色综合久久| 视频一区二区三区入口| 中文字幕在线观看第一页| 免费不卡欧美自拍视频| 日本成人在线一区| 一卡二卡三卡亚洲| 欧美理论电影在线观看| 毛片一区二区三区| 91av资源在线| 成人妇女免费播放久久久| 国产校园另类小说区| cao在线视频| 国产精品有限公司| 亚洲综合一区二区三区| 国产精品1区在线| 中文字幕在线乱| 日韩三级电影网址| 欧美午夜不卡影院在线观看完整版免费| 小泽玛利亚视频在线观看| 在线成人激情黄色| 亚洲三级在线| 国产黄在线看| 国产精品裸体一区二区三区| 国产一区二区在线观看视频| 奇米影视888狠狠狠777不卡| 性色av香蕉一区二区| 丁香婷婷综合色啪| 国产亚洲成av人片在线观看| 精品国产乱码久久久久| 一区二区三区在线视频播放 | 成人免费性视频| 亚洲大胆人体在线| 午夜亚洲视频| 三级外国片在线观看视频| 91视频8mav| 亚洲一区二区av电影| 日韩美女毛片| aaaaaaa大片免费看| 性欧美xxxx视频在线观看| 国产欧美精品一区aⅴ影院| 亚洲精品成a人ⅴ香蕉片| 亚洲精品无码国产| 中文字幕无线精品亚洲乱码一区| 狠狠色丁香婷婷综合| 亚洲美女炮图| 欧美精品久久久久久久久久久| 一区二区亚洲欧洲国产日韩| 国产成人免费在线视频| 午夜精品久久久久久久久久蜜桃| 视色,视色影院,视色影库,视色网| 亚洲黄色www网站| 国产精品一区二区久久不卡| а√天堂资源国产精品| 精品免费国产一区二区| 欧美精品激情在线观看| 国产精品久久久久婷婷| 一区二区三区视频免费观看| 看黄的a网站| 91在线|亚洲| 欧美日韩国产高清一区| 丝袜亚洲另类欧美| av高清不卡| 免费观看精品视频| 欧美一级免费视频| 精品日韩美女的视频高清| 亚洲一区自拍| 影视一区二区三区| 手机看片福利盒子久久| 欧美最近摘花xxxx摘花| 色综合久久久久综合体| 久久激情综合网| silk一区二区三区精品视频| 亚洲大胆精品| 香蕉久久免费影视| yw.139尤物在线精品视频| 中文字幕国产精品一区二区| 99久久国产综合精品成人影院| av大片在线播放| 国产一级大片免费看| 国产91精品黑色丝袜高跟鞋 | 在线看片地址| 国产色视频一区| 欧美大片国产精品| 成人高清视频在线| 欧洲亚洲视频| 成人欧美亚洲| 国产精品久久国产| 青青久久av北条麻妃黑人| 欧美三级乱人伦电影| 国产电影一区在线| 精品一区在线| 在线电影福利片| 亚洲一二三区av| 国产精品久久精品视| 夜夜嗨av一区二区三区四区 | 五月天激情综合网| 丰乳肥臀在线| 99热99在线| 欧美一区1区三区3区公司| 色偷偷av一区二区三区乱| 精品福利一区二区| 成人精品鲁一区一区二区| 亚欧美无遮挡hd高清在线视频 | 综合色就爱涩涩涩综合婷婷| 黄网站视频在线观看| 亚洲乱码国产一区三区| 国产日韩精品一区观看| 久久久精品电影| 欧美日韩精品欧美日韩精品一| 久久综合给合久久狠狠狠97色69| 精品动漫3d一区二区三区免费版| 国产高清视频一区二区|