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

Python入門之你必須了解的實用技巧

開發(fā) 前端 后端
本文主要記錄 Python 中一些常用技巧,所描述的是告訴你怎么寫才是更好? 如果你并不熟悉Python語法,希望你能在下面代碼片段中看到Python的簡單、優(yōu)雅。

本文主要記錄 Python 中一些常用技巧,所描述的是告訴你怎么寫才是更好? 如果你并不熟悉Python語法,希望你能在下面代碼片段中看到Python的簡單、優(yōu)雅; 如果你象我這樣,對 Python 有興趣或并正在學(xué)習(xí),我相信下面的技巧并不會讓你失望; 如果你已經(jīng)是一名 Pythoner ,那么很樂于你分享你的經(jīng)驗和技巧。

Python 禪道

這是Python的指導(dǎo)原則,但有不同詮釋。

如果您使用的一種編程語言是以小品喜劇藝術(shù)團(tuán)命名的,你***有幽默感。

美麗優(yōu)于丑陋。

明確優(yōu)于含蓄。

簡單比復(fù)雜好。

平倘優(yōu)于嵌套。

稀疏比密集更好。

特殊情況不能特殊到打破規(guī)則。

錯誤不應(yīng)該默默傳遞。

......

代碼風(fēng)格: 提高可讀性

Programs must be written for people to read, and only incidentally for machines to execute.

—Abelson & Sussman, Structure and Interpretation of Computer Programs

PEP 8: Python 代碼風(fēng)格指南

值得閱讀:

http://www.python.org/dev/peps/pep-0008/

空格(行)使用 (1)

◆ 使用 4 個空格縮進(jìn)。

◆ 不要使用制表符。

◆ 不要將制表符和空格混合使用。

◆ IDEL和Emacs的Python的都支持 spaces模式。

◆ 每個函數(shù)之間應(yīng)該有一個空行。

◆ 每一個 Class 之間應(yīng)該有兩個空行。

空格(行)使用 (2)

◆ 在使用 字典(dict), 列表(list), 元組(tuple), 參數(shù)(argument)列表時, 應(yīng)在 "," 前添加一個空格, 并且使用字典(dict)時,在 ":" 號后添加空格,而不是在前面添加。

◆ 在括號之前或參數(shù)之前不添加空格。

◆ 在文檔注釋中前后應(yīng)該沒有空格。

Python代碼

  1. def make_squares(key, value=0):  
  2.     """Return a dictionary and a list...""" 
  3.     d = {key: value}  
  4.     l = [key, value]  
  5.     return d, l 

 

 

命名

◆ joined_lower 可以是 函數(shù)名, 方法名, 屬性名

◆ joined_lower or ALL_CAPS 是常量

◆ StudlyCaps 類名

◆ camelCase 只有在預(yù)先制定好的命名規(guī)范使用

◆ 屬性: interface, _internal, __private

◆ 但盡量避免__private形式。下面兩個鏈接解釋了 為什么python中沒有 private聲明?

http://stackoverflow.com/questions/70528/why-are-pythons-private-methods-not-actually-private

http://stackoverflow.com/questions/1641219/does-python-have-private-variables-in-classes

較長代碼行

保持一行代碼在 80 個字符長度。

在括號內(nèi)使用隱含的行延續(xù):

Python代碼

  1. def __init__(self, first, second, third,  
  2.             fourth, fifth, sixth):  
  3.    output = (first + second + third  
  4.              + fourth + fifth + sixth)  

 

 

或者在需要換行的位置使用 \ 來延續(xù)行:

Python代碼

  1. VeryLong.left_hand_side \  
  2.     = even_longer.right_hand_side() 

 

 

另外,使用反斜杠是有風(fēng)險的,如果你添加一個空格在反斜杠后面,它就出錯了。此外,它使代碼難看。

較長字符串

將相鄰的字符串進(jìn)行連接的做法:

Python代碼

  1. >>> print 'o' 'n' "e" 
  2. one 

 

 

雖然字符之間的空格不是必需的,但是這樣有助于可讀性。

Python代碼

  1. >>> print 't' r'\/\/' """o""" 
  2. t\/\/o 

 

 

用一個 “r“ 開頭的字符串是一個“raw“的字符串(類似java中的轉(zhuǎn)義符)。上面的反斜杠就會當(dāng)成普通字符串處理。他們對正則表達(dá)式和Windows文件系統(tǒng)路徑非常有用。

注意:使用字符串變量名無法通過以上方式進(jìn)行連接。

Python代碼

  1. >>> a = 'three' 
  2. >>> b = 'four' 
  3. >>> a b  
  4.   File "<stdin>", line 1 
  5.     a b  
  6.       ^  
  7. SyntaxError: invalid syntax 

 

 

這是因為自動連接是由Python解析器/編譯器來處理的,因為其無法在編譯時對變量值進(jìn)行"翻譯",所以就這種必須在運行時使用“+“運算符來連接變量。

復(fù)合語句

Good:

Python代碼

  1. if foo == 'blah':  
  2.     do_something()  
  3. do_one()  
  4. do_two()  
  5. do_three() 

 

 

Bad:

Python代碼

  1. if foo == 'blah': do_something()  
  2. do_one(); do_two(); do_three() 

 

 

文檔注釋(Docstrings) & 注釋

文檔注釋 = 用于解釋如何使用代碼

文檔注釋公約:http://www.python.org/dev/peps/pep-0257/

注釋 = 為什么 (理由) & 代碼如何工作的如:

Python代碼

  1. # !!! BUG: ...  
  2. # !!! FIX: This is a hack  
  3. # ??? Why is this here? 

 

 

注釋對于任何語言開發(fā)者來說已經(jīng)最基本的東西了,這里就不詳細(xì)說了.

交換變量

在其它語言的交換變量的做法一般是:

Java代碼

  1. temp = a  
  2. a = b  
  3. b = temp 

 

 

Python的做法:

Python代碼

  1. b, a = a, b 

 

 

也許你見到過這樣的情況,但是你知道它是如何工作的嗎?

◆ 首先,逗號是元組構(gòu)造語法。

◆ 等號的右邊是定義一個元組 (tuple packing).

◆ 其左邊為一個目標(biāo)元組 (tuple unpacking)).

右邊的元組根據(jù)名稱被 unpacked 到左邊的無組。

更多關(guān)于 unpacked例子:

Python代碼

  1. >>> info =['David''Pythonista''+1250']  
  2. >>> name, title, phone = info  
  3. >>> name  
  4. 'Davids' 
  5. >>> title  
  6. 'Pythonista' 
  7. >>> phone  
  8. '+1250' 

 

 

在結(jié)構(gòu)化的數(shù)據(jù)上使用循環(huán):

info 是在上面定義的一個 list . 所以下面的 people 有兩個項, 兩個項都是分別都擁有三個項的 list.

Python代碼

  1. >>> people = [info, ['Guido''BDFL''unlisted']]  
  2. >>> for (name, title, phone) in people:  
  3. ...     print name, phone  
  4. ...  
  5. David +1250 
  6. Guido unlisted 

 

 

以上循環(huán)中,people中的兩個項(list item),都已經(jīng)被 unpacked 到 (name, title, phone) 無組中。

可以任意嵌套(只要左右兩邊的結(jié)構(gòu)一定要能夠匹配得上):

Python代碼

  1. >>> david, (gname, gtitle, gphone) = people  
  2. >>> gname  
  3. 'Guido' 
  4. >>> gtitle  
  5. 'BDFL' 
  6. >>> gphone  
  7. 'unlisted' 
  8. >>> david  
  9. ['David''Pythonista''+1250'

 

 

#p#

更多關(guān)于 Tuples

我們看到的是元組通過逗號構(gòu)造,而不是括號。例如:

Python代碼

  1. >>> 1,  
  2. (1,) 

 

 

Python的解釋器會為你顯示括號,所以建議你使用括號:

Python代碼

  1. >>> (1,)  
  2. (1,) 

 

 

千萬不要忘記逗號!

Python代碼

  1. >>> (1)  
  2. 1 

 

 

在只有一個元素的元組,尾隨逗號是必須的,在2 + 元素的元組,尾隨逗號是可選的。 如果創(chuàng)建一個 0或空元組,一對括號是快捷的語法:

Python代碼

  1. >>> ()  
  2. ()  
  3. >>> tuple()  
  4. () 

 

 

一個常見的​​錯誤當(dāng)你并不想要一個無組,卻無意的添加了一個逗號,很容易造成你在代碼中的錯誤,如:

Python代碼

  1. >>> value = 1,  
  2. >>> value # is a tuple, not a int  
  3. (1,) 

 

 

所以,當(dāng)你發(fā)現(xiàn)一個元組時,趕緊去找一下那個,號吧。

關(guān)于 "_"

是一個非常有用的功能,但是卻很少有人知道。

當(dāng)你在交互式模式下(如 IDEL)計算一個表達(dá)式或調(diào)用一個函數(shù)后,其結(jié)果必然是一個臨時名稱,_(下劃線):

Python代碼

  1. >>> 1 + 1 
  2. 2 
  3. >>> _  
  4. 2 

 

 

在 _ 中存儲***輸出的值。

當(dāng)輸出的結(jié)果是 None 或沒有任何輸出時,而 _ 的值并不會改變,仍然保存上一次的值。這就是方便所在。

當(dāng)然,這只能交互式的模式中使用,在模塊中不能支持。

這在交互式模式中是非常有用的,當(dāng)你在過程中沒有保存計算結(jié)果 或 你想看***一步的執(zhí)行的輸出結(jié)果:

Python代碼

  1. >>> import math  
  2. >>> math.pi / 3 
  3. 1.0471975511965976 
  4. >>> angle = _  
  5. >>> math.cos(angle)  
  6. 0.50000000000000011 
  7. >>> _  
  8. 0.50000000000000011 

 

 

創(chuàng)建String: 從列表中創(chuàng)建

開始定義一個 string 列表:

Python代碼

  1. colors = ['red''blue''green''yellow'

 

 

當(dāng)我們需要將上面的列表連接成一個字符串。尤其當(dāng) list 是一個很大的列表時....

不要這樣做:

Python代碼

  1. result = '' 
  2. for s in colors:  
  3.     result += s 

 

 

這種方式效率非常低下的,它有可怕的內(nèi)存使用問題,至于為什么,如果你是 javaer 的話,其中的 string 連接,我想你并不陌生。

相反,你應(yīng)該這樣做:

Python代碼

  1. result = ''.join(colors) 

 

 

當(dāng)你只有幾十或幾百個string項連接時,它們效率上并不會太大的差別。但你要在養(yǎng)成寫高效代碼的習(xí)慣,因為當(dāng)字符串?dāng)?shù)千時,join 比起 for 連接性能會能有所提升。

如果你需要使用一個函數(shù)來生成一個字符串列表,同樣可以使用:

Python代碼

  1. result = ''.join(fn(i) for i in items) 

 

 

盡可能的使用

Good:

Python代碼

  1. for key in d:  
  2.     print key 

 

 

◆ 使用 in 一般情況下是非常快的。

◆ 這種方式也適用于其它的容器對象(如 list,tuple 和 set)。

◆ in 是操作符(正如上面所看到的)。

Bad:

Python代碼

  1. for key in d.keys():  
  2.     print key 

 

 

保持與上面的一致性,使用 use key in dict 方式,而不是 dict.has_key():

Python代碼

  1.  # do this:  
  2. if key in d:  
  3.     ...do something with d[key]  
  4.  
  5. # not this:  
  6. if d.has_key(key):  
  7.     ...do something with d[key]  

 

 

#p#

字典中的 get 函數(shù)

我們經(jīng)常需要在字典中初始化數(shù)據(jù):

以下是不好的實現(xiàn)方法:

Python代碼

  1. navs = {}  
  2. for (portfolio, equity, position) in data:  
  3.     if portfolio not in navs:  
  4.         navs[portfolio] = 0 
  5.     navs[portfolio] += position * prices[equity] 

 

 

使用dict.get(key, default) 刪除 if 判斷代碼:

Python代碼

  1. navs = {}  
  2. for (portfolio, equity, position) in data:  
  3.     navs[portfolio] = (navs.get(portfolio, 0)  
  4.                        + position * prices[equity]) 

 

 

這種方式更為直接。

字典中的 setdefault 函數(shù) (1)

當(dāng)我們要初始化一個可變字典的值。每個字典的值將是一個列表。下面是不好的做法:

初始化可變字典的值:

Python代碼

  1. equities = {}  
  2. for (portfolio, equity) in data:  
  3.     if portfolio in equities:  
  4.         equities[portfolio].append(equity)  
  5.     else:  
  6.         equities[portfolio] = [equity] 

 

 

通過 dict.setdefault(key, default) 使這段代碼工作的更好:

Python代碼

  1. equities = {}  
  2. for (portfolio, equity) in data:  
  3.     equities.setdefault(portfolio, []).append(  
  4.                                          equity) 

 

 

dict.setdefault()等同于“ get, or set & get“ 或"如果沒有,就設(shè)置"; 如果你的字典Key是復(fù)雜的計算或long類型,使用 setdefault 是特別有效的。

字典中的 setdefault 函數(shù) (2)

在我們看到的setdefault字典方法也可以作為一個獨立的語句使用:

Python代碼

  1. avs = {}  
  2. for (portfolio, equity, position) in data:  
  3.     navs.setdefault(portfolio, 0)  
  4.     navs[portfolio] += position * prices[equity] 

 

 

我們在這里忽略了字典的setdefault方法返回的默認(rèn)值。我們正利用的setdefault中的作用,僅僅只是在dict中沒有 key 的值的時候才會設(shè)置。

創(chuàng)建 & 分割字典

如果你有兩份 list 對象,希望通過這兩個對象構(gòu)建一個 dict 對象。

Python代碼

  1. given = ['John', 'Eric', 'Terry', 'Michael']  
  2. family = ['Cleese', 'Idle', 'Gilliam', 'Palin']  
  3. pythons = dict(zip(given, family))  
  4. >>> pprint.pprint(pythons)  
  5. {'John': 'Cleese',  
  6.  'Michael': 'Palin',  
  7.  'Eric': 'Idle',  
  8.  'Terry': 'Gilliam'} 

 

 

同樣,如果希望獲取兩份列表,也是非常簡單:

Python代碼

  1. >>> pythons.keys()  
  2. ['John', 'Michael', 'Eric', 'Terry']  
  3. >>> pythons.values()  
  4. ['Cleese', 'Palin', 'Idle', 'Gilliam'] 

 

 

需要注意的是,上面 list 雖然是有序的,但是 dict 中的 keys 和 values 是無序的,這正是因為 dict 本質(zhì)就是無序存儲的。

索引 & 項 (1)

如果你需要一個列表,這里有一個可愛的方式來節(jié)省你的輸入:

Python代碼

  1. >>> items = 'zero one two three'.split()  
  2. >>> print items  
  3. ['zero', 'one', 'two', 'three'] 

 

 

如果我們需要遍歷這個 list ,而且需要 index 和 item:

Python代碼

  1.                   - or -  
  2. i = 0 
  3. for item in items:      for i in range(len(items)):  
  4.     print i, item               print i, items[i]  
  5.     i += 1 

 

 

索引 & 項 (2): enumerate

通過 enumerate 可以返回 list 中的 (index, item)元組:

Python代碼

  1. >>> print list(enumerate(items))  
  2. [(0, 'zero'), (1, 'one'), (2, 'two'), (3, 'three')] 

 

 

于是,遍歷list獲取index 及 item 就更加簡單了:

Python代碼

  1. for (index, item) in enumerate(items):  
  2.     print index, item 

 

 

Python代碼

  1. # compare:              # compare:  
  2. index = 0               for i in range(len(items)):  
  3. for item in items:              print i, items[i]  
  4.     print index, item  
  5.     index += 1 

 

 

不難看出,使用 enumerate 比起下面兩種方式,更加簡單,更加容易閱讀,這正是我們想要的。

下面是例子是如何通過 enumerate 返回迭代器:

Python代碼

  1. >>> enumerate(items)  
  2. <enumerate object at 0x011EA1C0>  
  3. >>> e = enumerate(items)  
  4. >>> e.next()  
  5. (0, 'zero')  
  6. >>> e.next()  
  7. (1, 'one')  
  8. >>> e.next()  
  9. (2, 'two')  
  10. >>> e.next()  
  11. (3, 'three')  
  12. >>> e.next()  
  13. Traceback (most recent call last):  
  14.   File "<stdin>", line 1, in ?  
  15. StopIteration 

 

 

默認(rèn)參數(shù)值

這是對于一個初學(xué)者常犯的錯誤,甚至于一些高級開發(fā)人員也會遇到,因為他們并不了解 Python 中的 names.

Python代碼

  1. def bad_append(new_item, a_list=[]):  
  2.     a_list.append(new_item)  
  3.     return a_list 

 

 

這里的問題是,a_list是一個空列表,默認(rèn)值是在函數(shù)定義時進(jìn)行初始化。因此,每次調(diào)用該函數(shù),你會得到不相同的默認(rèn)值。嘗試了好幾次:

Python代碼

  1. >>> print bad_append('one')  
  2. ['one']  
  3. >>> print bad_append('two')  
  4. ['one', 'two'] 

 

 

列表是可變對象,你可以改變它們的內(nèi)容。正確的方式是先獲得一個默認(rèn)的列表(或dict,或sets)并在運行時創(chuàng)建它。

Python代碼

  1. def good_append(new_item, a_list=None):  
  2.     if a_list is None:  
  3.         a_list = []  
  4.     a_list.append(new_item)  
  5.     return a_list 

 

 

判斷 True 值

Python代碼

  1. # do this:        # not this:  
  2. if x:             if x == True:  
  3.     pass              pass 

 

 

它的優(yōu)勢在于效率和優(yōu)雅。

判斷一個list:

Python代碼

  1. # do this:        # not this:  
  2. if items:         if len(items) != 0:  
  3.     pass              pass 
  4.  
  5.                   # and definitely not this:  
  6.                   if items != []:  
  7.                       pass 

 

 

True 值

True和False是內(nèi)置的bool類型的布爾值的實例。誰都只有其中的一個實例。

False True
False (== 0) True (== 1)
"" (empty string) any string but "" (" ", "anything")
0, 0.0 any number but 0 (1, 0.1, -1, 3.14)
[], (), {}, set() any non-empty container ([0], (None,), [''])
None almost any object that's not explicitly False

簡單比復(fù)雜好

Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.

—Brian W. Kernighan

不要重新發(fā)明輪子

在寫任何代碼之前,

➔ ➔ ➔ ➔

檢查python 標(biāo)準(zhǔn)庫.http://docs.python.org/library/index.html

檢查Python的包索引 (the "Cheese Shop"):

http://cheeseshop.python.org/pypi

Search the web. Google is your friend.

原文:[urlhttp://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html][url]

【編輯推薦】

  1. 如何在NetBeans 7.0安裝Python插件
  2. Python入門之你必須了解的基礎(chǔ)知識
  3. Python如何備份目錄及目錄下的全部內(nèi)容
  4. Python編輯利器:PyCharm初探
  5. 推薦6本學(xué)習(xí)Python的免費電子書
責(zé)任編輯:陳貽新 來源: denger的博客
相關(guān)推薦

2020-04-08 17:10:03

GitHub代碼開源

2011-05-20 13:52:31

2011-08-03 09:20:30

Python

2022-09-15 07:05:09

Windows電腦技巧

2020-07-11 09:45:33

Python編程語言開發(fā)

2021-04-12 15:54:45

Android 開發(fā)技巧

2011-03-23 16:49:17

LAMP技巧linux命令

2019-11-25 10:12:59

Python技巧工具

2009-09-04 10:27:28

Linux實用技巧linux操作系統(tǒng)linux

2022-03-23 09:18:10

Git技巧Linux

2009-12-21 15:50:39

2018-12-25 08:58:46

2022-09-20 11:58:27

NpmNode.js

2024-05-22 09:29:43

2024-11-29 10:48:54

IDEA技巧Mac

2010-10-08 15:44:17

vim

2009-01-03 09:34:30

ASP.NET.NET性能優(yōu)化

2022-10-11 08:00:47

多線程開發(fā)技巧

2022-11-03 10:28:59

PandasSAC機(jī)制

2011-04-08 15:40:01

Oracle認(rèn)證
點贊
收藏

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

亚州欧美在线| 精品成人私密视频| 国产欧美日韩一级| 日韩一级高清毛片| 美美哒免费高清在线观看视频一区二区| 中文在线免费视频| 最全影音av资源中文字幕在线| 国产精品第3页| 99综合电影在线视频| 亚洲国产欧美日韩在线观看第一区| 天天做天天躁天天躁| 欧美精品自拍偷拍动漫精品| 校园春色另类视频| 日本在线视频站| 国产中文字幕二区| 高清无码视频直接看| 亚洲成av人影片在线观看| 国产精品妹子av| 色综合久久久888| 日本丶国产丶欧美色综合| 午夜精品视频一区二区三区在线看| av免费观看大全| 亚洲色图16p| 青青青手机在线视频观看| 成人免费观看网站| 久久午夜剧场 | 国产精品专区一| 欧美大荫蒂xxx| 热国产热中文视频二区| 4438x成人网全国最大| 激情小视频网站| xvideos成人免费中文版| 亚洲国产专区| 中文字幕乱码人妻综合二区三区| 亚洲xxxxx电影| 日韩一区二区三区在线播放| 一卡二卡三卡亚洲| 日韩av不卡一区二区| 一区二区成人| 国产特级黄色大片| 日韩网站在线观看| 国产精品香蕉国产| 国产污污在线观看| 亚洲 欧美 日韩 国产综合 在线| 伊人久久99| 亚洲娇小xxxx欧美娇小| 亚洲一本二本| 一本色道久久综合亚洲精品不卡 | 国产精品一区二区三区在线| 国产精品福利影院| 91综合在线| 久久久久久久性潮| 欧美xxxbbb| 3d动漫一区二区三区在线观看| 欧美一区=区三区| 亚洲美女在线一区| 欧美成人欧美edvon| 国产91成人video| 国产精品免费在线| 日韩一区二区三区精品视频第3页| 午夜在线a亚洲v天堂网2018| 欧美成人精品福利| 91精品论坛| 国产偷倩在线播放| 九色91在线| 国产亲近乱来精品视频| 亚洲高清不卡在线观看| 在线亚洲精品福利网址导航| 99re亚洲国产精品| 精品福利一区二区| 最近2019中文字幕第三页视频 | 亚洲网站情趣视频| 懂色av中文一区二区三区| 久久久一二三| 91av在线精品| 日本高清在线观看| 色爱精品视频一区| 欧美色图五月天| 日韩精品999| 日本天堂在线观看| 中文字幕在线成人| av中文字幕一区二区三区| 国产精品人人做人人爽人人添| 亚洲人成小说| 日韩美女av在线| √新版天堂资源在线资源| 一级做a爱片久久| www.玖玖玖| 国产一区二区三区久久| 青草青青在线视频| 青娱乐精品视频| 男人j桶女人的网站| 久久品道一品道久久精品| 日韩久久久久久久久久久久久| 欧美综合自拍| 日韩在线导航| 无码av免费一区二区三区试看| 大桥未久在线播放| 国产91一区二区三区| 国产精品永久| 激情欧美一区二区三区中文字幕| 国产精品一区视频网站| 综合久久99| 黄色一级视频片| 国产精品一区2区| 国产一区二区三区免费看| 精品伊人久久97| 另类图片激情| 精品亚洲精品福利线在观看| 亚洲综合色网| 丝袜足控免费网站xx网站| 国产日产欧美一区二区三区| av在线观看地址| 欧美福利一区二区| 91精品啪在线观看国产18| 交换国产精品视频一区| 欧美日韩国产影院| 秋霞av在线| 国产成+人+综合+亚洲欧洲| 欧美日韩中文一区二区| 91精品国产综合久久香蕉的用户体验| 国产日韩视频在线| 91久色国产| 一区二区三区国产盗摄| 深夜爽爽视频| 清纯唯美亚洲综合| 欧美中文一区二区| 成人做爰www免费看视频网站| 伊人久久大香线蕉精品组织观看| 亚洲中文字幕无码不卡电影| 亚洲欧美中文在线视频| 久久av影院| 免费日韩在线观看| 欧美高清激情brazzers| 欧美亚洲一区| 亚洲男同gay网站| xxx成人少妇69| 国产成人av电影在线| 中国黄色片免费看| 一本一道久久a久久精品综合蜜臀| 黄色在线小视频| 精品99999| 久久精品日产第一区二区 | 黄动漫在线免费观看| 国产精品亚发布| 亚洲6080在线| 在线免费激情视频| 欧美极品日韩| 18国产精品| 日韩美女视频一区二区在线观看| 成年人在线免费观看| 国产97在线亚洲| 欧美精品色网| 午夜精品美女久久久久av福利| 蜜臀国产一区二区三区在线播放| 亚洲国产一区二区精品视频| 免费观看成人av| 老司机成人在线| 97国产在线视频| 中文字幕日韩欧美精品高清在线| 免费观看成人高潮| 国产亚洲激情在线| 欧美在线91| 国产日韩精品视频| 久久综合给合久久狠狠狠97色69| 色妞ww精品视频7777| 天堂√8在线中文| 密臀av在线| 国产理论电影在线| 午夜视频在线看| 中文字幕无码精品亚洲35| 国产精品美女无圣光视频| 久久精品人人做人人爽电影蜜月| 精品国产一区二区三区av片| 国产精品国产自产拍高清av| 国产在线观看一区二区| 精品美女国产在线| 国产成人精品电影久久久| 欧美激情视频免费看| 精灵使的剑舞无删减版在线观看| 欧美r级电影| 免费看精品久久片| 狠狠色丁香久久婷婷综合_中| 污视频在线观看网站| 777精品久无码人妻蜜桃| 999www人成免费视频| 日韩一区二区在线观看视频| 粗大的内捧猛烈进出在线视频| 日韩三级.com| 91在线国产福利| 欧美伊人影院| 日韩久久一区| 国产原创av在线| 欧美极品欧美精品欧美图片| 99久久自偷自偷国产精品不卡| 国产日韩欧美a| 亚洲二区视频| 在线观看视频网站你懂得| 亚洲欧美日韩不卡| 欧美一区二区三区免费视频 |