日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python2 与 python3 语法区别--转

發布時間:2025/4/5 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python2 与 python3 语法区别--转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://old.sebug.net/paper/books/dive-into-python3/porting-code-to-python-3-with-2to3.html

使用2to3將代碼移植到Python 3

??Life is pleasant. Death is peaceful. It’s the transition that’s troublesome.??
— Isaac Asimov (attributed)

?

概述

幾乎所有的Python 2程序都需要一些修改才能正常地運行在Python 3的環境下。為了簡化這個轉換過程,Python 3自帶了一個叫做2to3的實用腳本(Utility Script),這個腳本會將你的Python 2程序源文件作為輸入,然后自動將其轉換到Python 3的形式。案例研究:將chardet移植到Python 3(porting chardet to Python 3)描述了如何運行這個腳本,然后展示了一些它不能自動修復的情況。這篇附錄描述了它能夠自動修復的內容。

print語句

在Python 2里,print是一個語句。無論你想輸出什么,只要將它們放在print關鍵字后邊就可以。在Python 3里,print()是一個函數。就像其他的函數一樣,print()需要你將想要輸出的東西作為參數傳給它。

NotesPython 2Python 3①②③④⑤
printprint()
print 1print(1)
print 1, 2print(1, 2)
print 1, 2,print(1, 2, end=' ')
print >>sys.stderr, 1, 2, 3print(1, 2, 3, file=sys.stderr)
  • 為輸出一個空白行,需要調用不帶參數的print()。
  • 為輸出一個單獨的值,需要將這這個值作為print()的一個參數就可以了。
  • 為輸出使用一個空格分隔的兩個值,用兩個參數調用print()即可。
  • 這個例子有一些技巧。在Python 2里,如果你使用一個逗號(,)作為print語句的結尾,它將會用空格分隔輸出的結果,然后在輸出一個尾隨的空格(trailing space),而不輸出回車(carriage return)。在Python 3里,通過把end=' '作為一個關鍵字參數傳給print()可以實現同樣的效果。參數end的默認值為'\n',所以通過重新指定end參數的值,可以取消在末尾輸出回車符。
  • 在Python 2里,你可以通過使用>>pipe_name語法,把輸出重定向到一個管道,比如sys.stderr。在Python 3里,你可以通過將管道作為關鍵字參數file的值傳遞給print()來完成同樣的功能。參數file的默認值為std.stdout,所以重新指定它的值將會使print()輸出到一個另外一個管道。
  • Unicode字符串

    Python 2有兩種字符串類型:Unicode字符串和非Unicode字符串。Python 3只有一種類型:Unicode字符串(Unicode strings)。

    NotesPython 2Python 3①②
    u'PapayaWhip''PapayaWhip'
    ur'PapayaWhip\foo'r'PapayaWhip\foo'
  • Python 2里的Unicode字符串在Python 3里即普通字符串,因為在Python 3里字符串總是Unicode形式的。
  • Unicode原始字符串(raw string)(使用這種字符串,Python不會自動轉義反斜線"\")也被替換為普通的字符串,因為在Python 3里,所有原始字符串都是以Unicode編碼的。
  • 全局函數unicode()

    Python 2有兩個全局函數可以把對象強制轉換成字符串:unicode()把對象轉換成Unicode字符串,還有str()把對象轉換為非Unicode字符串。Python 3只有一種字符串類型,Unicode字符串,所以str()函數即可完成所有的功能。(unicode()函數在Python 3里不再存在了。)

    NotesPython 2Python 3?
    unicode(anything)str(anything)

    long?長整型

    Python 2有為非浮點數準備的int和long類型。int類型的最大值不能超過sys.maxint,而且這個最大值是平臺相關的。可以通過在數字的末尾附上一個L來定義長整型,顯然,它比int類型表示的數字范圍更大。在Python 3里,只有一種整數類型int,大多數情況下,它很像Python 2里的長整型。由于已經不存在兩種類型的整數,所以就沒有必要使用特殊的語法去區別他們。

    進一步閱讀:PEP?237:統一長整型和整型。

    NotesPython 2Python 3①②③④⑤
    x = 1000000000000Lx = 1000000000000
    x = 0xFFFFFFFFFFFFLx = 0xFFFFFFFFFFFF
    long(x)int(x)
    type(x) is longtype(x) is int
    isinstance(x, long)isinstance(x, int)
  • 在Python 2里的十進制長整型在Python 3里被替換為十進制的普通整數。
  • 在Python 2里的十六進制長整型在Python 3里被替換為十六進制的普通整數。
  • 在Python 3里,由于長整型已經不存在了,自然原來的long()函數也沒有了。為了強制轉換一個變量到整型,可以使用int()函數。
  • 檢查一個變量是否是整型,獲得它的數據類型,并與一個int類型(不是long)的作比較。
  • 你也可以使用isinstance()函數來檢查數據類型;再強調一次,使用int,而不是long,來檢查整數類型。
  • <> 比較運算符

    Python 2支持<>作為!=的同義詞。Python 3只支持!=,不再支持<>了。

    NotesPython 2Python 3①②
    if x <> y:if x != y:
    if x <> y <> z:if x != y != z:
  • 簡單地比較。
  • 相對復雜的三個值之間的比較。
  • 字典類方法has_key()

    在Python 2里,字典對象的has_key()方法用來測試字典是否包含特定的鍵(key)。Python 3不再支持這個方法了。你需要使用in運算符。

    NotesPython 2Python 3①②③④⑤
    a_dictionary.has_key('PapayaWhip')'PapayaWhip' in a_dictionary
    a_dictionary.has_key(x) or a_dictionary.has_key(y)x in a_dictionary or y in a_dictionary
    a_dictionary.has_key(x or y)(x or y) in a_dictionary
    a_dictionary.has_key(x + y)(x + y) in a_dictionary
    x + a_dictionary.has_key(y)x + (y in a_dictionary)
  • 最簡單的形式。
  • 運算符or的優先級高于運算符in,所以這里不需要添加括號。
  • 另一方面,出于同樣的原因?—?or的優先級大于in,這里需要添加括號。(注意:這里的代碼與前面那行完全不同。Python會先解釋x or y,得到結果x(如果x在布爾上下文里的值是真)或者y。然后Python檢查這個結果是不是a_dictionary的一個鍵。)
  • 運算符in的優先級大于運算符+,所以代碼里的這種形式從技術上說不需要括號,但是2to3還是添加了。
  • 這種形式一定需要括號,因為in的優先級大于+。
  • 返回列表的字典類方法

    在Python 2里,許多字典類方法的返回值是列表。其中最常用方法的有keys,items和values。在Python 3里,所有以上方法的返回值改為動態視圖(dynamic view)。在一些上下文環境里,這種改變并不會產生影響。如果這些方法的返回值被立即傳遞給另外一個函數,并且那個函數會遍歷整個序列,那么以上方法的返回值是列表或者視圖并不會產生什么不同。在另外一些情況下,Python 3的這些改變干系重大。如果你期待一個能被獨立尋址元素的列表,那么Python 3的這些改變將會使你的代碼卡住(choke),因為視圖(view)不支持索引(indexing)。

    NotesPython 2Python 3①②③④⑤
    a_dictionary.keys()list(a_dictionary.keys())
    a_dictionary.items()list(a_dictionary.items())
    a_dictionary.iterkeys()iter(a_dictionary.keys())
    [i for i in a_dictionary.iterkeys()][i for i in a_dictionary.keys()]
    min(a_dictionary.keys())no change
  • 使用list()函數將keys()的返回值轉換為一個靜態列表,出于安全方面的考量,2to3可能會報錯。這樣的代碼是有效的,但是對于使用視圖來說,它的效率低一些。你應該檢查轉換后的代碼,看看是否一定需要列表,也許視圖也能完成同樣的工作。
  • 這是另外一種視圖(關于items()方法的)到列表的轉換。2to3對values()方法返回值的轉換也是一樣的。
  • Python 3里不再支持iterkeys()了。如果必要,使用iter()將keys()的返回值轉換成為一個迭代器。
  • 2to3能夠識別出iterkeys()方法在列表解析里被使用,然后將它轉換為Python 3里的keys()方法(不需要使用額外的iter()去包裝其返回值)。這樣是可行的,因為視圖是可迭代的。
  • 2to3也能識別出keys()方法的返回值被立即傳給另外一個會遍歷整個序列的函數,所以也就沒有必要先把keys()的返回值轉換到一個列表。相反的,min()函數會很樂意遍歷視圖。這個過程對min(),max(),sum(),list(),tuple(),set(),sorted(),any()和all()同樣有效。
  • 被重命名或者重新組織的模塊

    從Python 2到Python 3,標準庫里的一些模塊已經被重命名了。還有一些相互關聯的模塊也被組合或者重新組織,以使得這種關聯更有邏輯性。

    http

    在Python 3里,幾個相關的HTTP模塊被組合成一個單獨的包,即http。

    NotesPython 2Python 3①②③④
    import?httplibimport http.client
    import?Cookieimport http.cookies
    import?cookielibimport http.cookiejar
    import BaseHTTPServer import SimpleHTTPServer import CGIHttpServer import http.server
  • http.client模塊實現了一個底層的庫,可以用來請求HTTP資源,解析HTTP響應。
  • http.cookies模塊提供一個蟒樣的(Pythonic)接口來獲取通過HTTP頭部(HTTP?header)Set-Cookie發送的cookies
  • 常用的流行的瀏覽器會把cookies以文件形式存放在磁盤上,http.cookiejar模塊可以操作這些文件。
  • http.server模塊實現了一個基本的HTTP服務器
  • urllib

    Python 2有一些用來分析,編碼和獲取URL的模塊,但是這些模塊就像老鼠窩一樣相互重疊。在Python 3里,這些模塊被重構、組合成了一個單獨的包,即urllib。

    NotesPython 2Python 3①②③④⑤⑥
    import?urllibimport urllib.request, urllib.parse, urllib.error
    import?urllib2import urllib.request, urllib.error
    import?urlparseimport urllib.parse
    import?robotparserimport urllib.robotparser
    from urllib import FancyURLopener from urllib import urlencode from urllib.request import FancyURLopener from urllib.parse import urlencode
    from urllib2 import Request from urllib2 import HTTPError from urllib.request import Request from urllib.error import HTTPError
  • 以前,Python 2里的urllib模塊有各種各樣的函數,包括用來獲取數據的urlopen(),還有用來將URL分割成其組成部分的splittype(),splithost()和splituser()函數。在新的urllib包里,這些函數被組織得更有邏輯性。2to3將會修改這些函數的調用以適應新的命名方案。
  • 在Python 3里,以前的urllib2模塊被并入了urllib包。同時,以urllib2里各種你最喜愛的東西將會一個不缺地出現在Python 3的urllib模塊里,比如build_opener()方法,Request對象,HTTPBasicAuthHandler和friends。
  • Python 3里的urllib.parse模塊包含了原來Python 2里urlparse模塊所有的解析函數。
  • urllib.robotparse模塊解析robots.txt文件。
  • 處理HTTP重定向和其他狀態碼的FancyURLopener類在Python 3里的urllib.request模塊里依然有效。urlencode()函數已經被轉移到了urllib.parse里。
  • Request對象在urllib.request里依然有效,但是像HTTPError這樣的常量已經被轉移到了urllib.error里。
  • 我是否有提到2to3也會重寫你的函數調用?比如,如果你的Python 2代碼里導入了urllib模塊,調用了urllib.urlopen()函數獲取數據,2to3會同時修改import語句和函數調用。

    NotesPython 2Python 3?
    import urllib print urllib.urlopen('http://diveintopython3.org/').read() import urllib.request, urllib.parse, urllib.error print(urllib.request.urlopen('http://diveintopython3.org/').read())

    dbm

    所有的DBM克隆(DBM?clone)現在在單獨的一個包里,即dbm。如果你需要其中某個特定的變體,比如GNU?DBM,你可以導入dbm包中合適的模塊。

    NotesPython 2Python 3?????
    import?dbmimport dbm.ndbm
    import?gdbmimport dbm.gnu
    import?dbhashimport dbm.bsd
    import?dumbdbmimport dbm.dumb
    import anydbm import whichdb import dbm

    xmlrpc

    XML-RPC是一個通過HTTP協議執行遠程RPC調用的輕重級方法。一些XML-RPC客戶端和XML-RPC服務端的實現庫現在被組合到了獨立的包,即xmlrpc。

    NotesPython 2Python 3??
    import?xmlrpclibimport xmlrpc.client
    import DocXMLRPCServer import SimpleXMLRPCServer import xmlrpc.server

    其他模塊

    NotesPython 2Python 3①②③④⑤⑥⑦⑧⑨
    try:import cStringIO as StringIO except ImportError:import StringIO import io
    try:import cPickle as pickle except ImportError:import pickle import pickle
    import?__builtin__import builtins
    import?copy_regimport copyreg
    import?Queueimport queue
    import?SocketServerimport socketserver
    import?ConfigParserimport configparser
    import reprimport reprlib
    import?commandsimport subprocess
  • 在Python 2里,你通常會這樣做,首先嘗試把cStringIO導入作為StringIO的替代,如果失敗了,再導入StringIO。不要在Python 3里這樣做;io模塊會幫你處理好這件事情。它會找出可用的最快實現方法,然后自動使用它。
  • 在Python 2里,導入最快的pickle實現也是一個與上邊相似的能用方法。在Python 3里,pickle模塊會自動為你處理,所以不要再這樣做。
  • builtins模塊包含了在整個Python語言里都會使用的全局函數,類和常量。重新定義builtins模塊里的某個函數意味著在每處都重定義了這個全局函數。這聽起來很強大,但是同時也是很可怕的。
  • copyreg模塊為用C語言定義的用戶自定義類型添加了pickle模塊的支持。
  • queue模塊實現一個生產者消費者隊列(multi-producer, multi-consumer queue)。
  • socketserver模塊為實現各種socket server提供了通用基礎類。
  • configparser模塊用來解析INI-style配置文件。
  • reprlib模塊重新實現了內置函數repr(),并添加了對字符串表示被截斷前長度的控制。
  • subprocess模塊允許你創建子進程,連接到他們的管道,然后獲取他們的返回值。
  • 包內的相對導入

    包是由一組相關聯的模塊共同組成的單個實體。在Python 2的時候,為了實現同一個包內模塊的相互引用,你會使用import foo或者from foo import Bar。Python 2解釋器會先在當前目錄里搜索foo.py,然后再去Python搜索路徑(sys.path)里搜索。在Python 3里這個過程有一點不同。Python 3不會首先在當前路徑搜索,它會直接在Python的搜索路徑里尋找。如果你想要包里的一個模塊導入包里的另外一個模塊,你需要顯式地提供兩個模塊的相對路徑。

    假設你有如下包,多個文件在同一個目錄下:

    chardet/ | +--__init__.py | +--constants.py | +--mbcharsetprober.py | +--universaldetector.py

    現在假設universaldetector.py需要整個導入constants.py,另外還需要導入mbcharsetprober.py的一個類。你會怎樣做?

    NotesPython 2Python 3①②
    import constantsfrom . import constants
    from mbcharsetprober import MultiByteCharSetProberfrom .mbcharsetprober import MultiByteCharsetProber
  • 當你需要從包的其他地方導入整個模塊,使用新的from . import語法。這里的句號(.)即表示當前文件(universaldetector.py)和你想要導入文件(constants.py)之間的相對路徑。在這個樣例中,這兩個文件在同一個目錄里,所以使用了單個句號。你也可以從父目錄(from .. import anothermodule)或者子目錄里導入。
  • 為了將一個特定的類或者函數從其他模塊里直接導入到你的模塊的名字空間里,在需要導入的模塊名前加上相對路徑,并且去掉最后一個斜線(slash)。在這個例子中,mbcharsetprober.py與universaldetector.py在同一個目錄里,所以相對路徑名就是一個句號。你也可以從父目錄(from .. import anothermodule)或者子目錄里導入。
  • 迭代器方法next()

    在Python 2里,迭代器有一個next()方法,用來返回序列里的下一項。在Python 3里這同樣成立,但是現在有了一個新的全局的函數next(),它使用一個迭代器作為參數。

    NotesPython 2Python 3①②③④⑤
    anIterator.next()next(anIterator)
    a_function_that_returns_an_iterator().next()next(a_function_that_returns_an_iterator())
    class A:def next(self):pass class A:def __next__(self):pass
    class A:def next(self, x, y):pass no change
    next = 42 for an_iterator in a_sequence_of_iterators:an_iterator.next() next = 42 for an_iterator in a_sequence_of_iterators:an_iterator.__next__()
  • 最簡單的例子,你不再調用一個迭代器的next()方法,現在你將迭代器自身作為參數傳遞給全局函數next()。
  • 假如你有一個返回值是迭代器的函數,調用這個函數然后把結果作為參數傳遞給next()函數。(2to3腳本足夠智能以正確執行這種轉換。)
  • 假如你想定義你自己的類,然后把它用作一個迭代器,在Python 3里,你可以通過定義特殊方法__next__()來實現。
  • 如果你定義的類里剛好有一個next(),它使用一個或者多個參數,2to3執行的時候不會動它。這個類不能被當作迭代器使用,因為它的next()方法帶有參數。
  • 這一個有些復雜。如果你恰好有一個叫做next的本地變量,在Python 3里它的優先級會高于全局函數next()。在這種情況下,你需要調用迭代器的特別方法__next__()來獲取序列里的下一個元素。(或者,你也可以重構代碼以使這個本地變量的名字不叫next,但是2to3不會為你做這件事。)
  • 全局函數filter()

    在Python 2里,filter()方法返回一個列表,這個列表是通過一個返回值為True或者False的函數來檢測序列里的每一項得到的。在Python 3里,filter()函數返回一個迭代器,不再是列表。

    NotesPython 2Python 3①②③④⑤
    filter(a_function, a_sequence)list(filter(a_function, a_sequence))
    list(filter(a_function, a_sequence))no change
    filter(None, a_sequence)[i for i in a_sequence if i]
    for i in filter(None, a_sequence):no change
    [i for i in filter(a_function, a_sequence)]no change
  • 最簡單的情況下,2to3會用一個list()函數來包裝filter(),list()函數會遍歷它的參數然后返回一個列表。
  • 然而,如果filter()調用已經被list()包裹,2to3不會再做處理,因為這種情況下filter()的返回值是否是一個迭代器是無關緊要的。
  • 為了處理filter(None, ...)這種特殊的語法,2to3會將這種調用從語法上等價地轉換為列表解析。
  • 由于for循環會遍歷整個序列,所以沒有必要再做修改。
  • 與上面相同,不需要做修改,因為列表解析會遍歷整個序列,即使filter()返回一個迭代器,它仍能像以前的filter()返回列表那樣正常工作。
  • 全局函數map()

    跟filter()作的改變一樣,map()函數現在返回一個迭代器。(在Python 2里,它返回一個列表。)

    NotesPython 2Python 3①②③④⑤
    map(a_function, 'PapayaWhip')list(map(a_function, 'PapayaWhip'))
    map(None, 'PapayaWhip')list('PapayaWhip')
    map(lambda x: x+1, range(42))[x+1 for x in range(42)]
    for i in map(a_function, a_sequence):no change
    [i for i in map(a_function, a_sequence)]no change
  • 類似對filter()的處理,在最簡單的情況下,2to3會用一個list()函數來包裝map()調用。
  • 對于特殊的map(None, ...)語法,跟filter(None, ...)類似,2to3會將其轉換成一個使用list()的等價調用
  • 如果map()的第一個參數是一個lambda函數,2to3會將其等價地轉換成列表解析。
  • 對于會遍歷整個序列的for循環,不需要做改變。
  • 再一次地,這里不需要做修改,因為列表解析會遍歷整個序列,即使map()的返回值是迭代器而不是列表它也能正常工作。
  • 全局函數reduce()

    在Python 3里,reduce()函數已經被從全局名字空間里移除了,它現在被放置在fucntools模塊里。

    NotesPython 2Python 3?
    reduce(a, b, c) from functools import reduce reduce(a, b, c)

    全局函數apply()

    Python 2有一個叫做apply()的全局函數,它使用一個函數f和一個列表[a, b, c]作為參數,返回值是f(a, b, c)。你也可以通過直接調用這個函數,在列表前添加一個星號(*)作為參數傳遞給它來完成同樣的事情。在Python 3里,apply()函數不再存在了;必須使用星號標記法。

    NotesPython 2Python 3①②③④
    apply(a_function, a_list_of_args)a_function(*a_list_of_args)
    apply(a_function, a_list_of_args, a_dictionary_of_named_args)a_function(*a_list_of_args, **a_dictionary_of_named_args)
    apply(a_function, a_list_of_args + z)a_function(*a_list_of_args + z)
    apply(aModule.a_function, a_list_of_args)aModule.a_function(*a_list_of_args)
  • 最簡單的形式,可以通過在參數列表(就像[a, b, c]一樣)前添加一個星號來調用函數。這跟Python 2里的apply()函數是等價的。
  • 在Python 2里,apply()函數實際上可以帶3個參數:一個函數,一個參數列表,一個字典命名參數(dictionary of named arguments)。在Python 3里,你可以通過在參數列表前添加一個星號(*),在字典命名參數前添加兩個星號(**)來達到同樣的效果。
  • 運算符+在這里用作連接列表的功能,它的優先級高于運算符*,所以沒有必要在a_list_of_args + z周圍添加額外的括號。
  • 2to3腳本足夠智能來轉換復雜的apply()調用,包括調用導入模塊里的函數。
  • 全局函數intern()

    在Python 2里,你可以用intern()函數作用在一個字符串上來限定(intern)它以達到性能優化。在Python 3里,intern()函數被轉移到sys模塊里了。

    NotesPython 2Python 3?
    intern(aString)sys.intern(aString)

    exec語句

    就像print語句在Python 3里變成了一個函數一樣,exec語句也是這樣的。exec()函數使用一個包含任意Python代碼的字符串作為參數,然后就像執行語句或者表達式一樣執行它。exec()跟eval()是相似的,但是exec()更加強大并更具有技巧性。eval()函數只能執行單獨一條表達式,但是exec()能夠執行多條語句,導入(import),函數聲明?—?實際上整個Python程序的字符串表示也可以。

    NotesPython 2Python 3①②③
    exec codeStringexec(codeString)
    exec codeString in a_global_namespaceexec(codeString, a_global_namespace)
    exec codeString in a_global_namespace, a_local_namespaceexec(codeString, a_global_namespace, a_local_namespace)
  • 在最簡單的形式下,因為exec()現在是一個函數,而不是語句,2to3會把這個字符串形式的代碼用括號圍起來。
  • Python 2里的exec語句可以指定名字空間,代碼將在這個由全局對象組成的私有空間里執行。Python 3也有這樣的功能;你只需要把這個名字空間作為第二個參數傳遞給exec()函數。
  • 更加神奇的是,Python 2里的exec語句還可以指定一個本地名字空間(比如一個函數里聲明的變量)。在Python 3里,exec()函數也有這樣的功能。
  • execfile語句

    就像以前的exec語句,Python 2里的execfile語句也可以像執行Python代碼那樣使用字符串。不同的是exec使用字符串,而execfile則使用文件。在Python 3里,execfile語句已經被去掉了。如果你真的想要執行一個文件里的Python代碼(但是你不想導入它),你可以通過打開這個文件,讀取它的內容,然后調用compile()全局函數強制Python解釋器編譯代碼,然后調用新的exec()函數。

    NotesPython 2Python 3?
    execfile('a_filename')exec(compile(open('a_filename').read(), 'a_filename', 'exec'))

    repr(反引號)

    在Python 2里,為了得到一個任意對象的字符串表示,有一種把對象包裝在反引號里(比如`x`)的特殊語法。在Python 3里,這種能力仍然存在,但是你不能再使用反引號獲得這種字符串表示了。你需要使用全局函數repr()。

    NotesPython 2Python 3①②
    `x`repr(x)
    `'PapayaWhip' + `2``repr('PapayaWhip' + repr(2))
  • 記住,x可以是任何東西?—?一個類,函數,模塊,基本數據類型,等等。repr()函數可以使用任何類型的參數。
  • 在Python 2里,反引號可以嵌套,導致了這種令人費解的(但是有效的)表達式。2to3足夠智能以將這種嵌套調用轉換到repr()函數。
  • try...except語句

    從Python 2到Python 3,捕獲異常的語法有些許變化。

    NotesPython 2Python 3①②③④
    try:import mymodule except ImportError, epass try:import mymodule except ImportError as e:pass
    try:import mymodule except (RuntimeError, ImportError), epass try:import mymodule except (RuntimeError, ImportError) as e:pass
    try:import mymodule except ImportError:pass no change
    try:import mymodule except:pass no change
  • 相對于Python 2里在異常類型后添加逗號,Python 3使用了一個新的關鍵字,as。
  • 關鍵字as也可以用在一次捕獲多種類型異常的情況下。
  • 如果你捕獲到一個異常,但是并不在意訪問異常對象本身,Python 2和Python 3的語法是一樣的。
  • 類似地,如果你使用一個保險方法(fallback)來捕獲所有異常,Python 2和Python 3的語法是一樣的。
  • ?在導入模塊(或者其他大多數情況)的時候,你絕對不應該使用這種方法(指以上的fallback)。不然的話,程序可能會捕獲到像KeyboardInterrupt(如果用戶按Ctrl-C來中斷程序)這樣的異常,從而使調試變得更加困難。

    raise語句

    Python 3里,拋出自定義異常的語法有細微的變化。

    NotesPython 2Python 3①②③④
    raise?MyExceptionunchanged
    raise MyException, 'error message'raise MyException('error message')
    raise MyException, 'error message', a_tracebackraise MyException('error message').with_traceback(a_traceback)
    raise 'error message'unsupported
  • 拋出不帶用戶自定義錯誤信息的異常,這種最簡單的形式下,語法沒有改變。
  • 當你想要拋出一個帶用戶自定義錯誤信息的異常時,改變就顯而易見了。Python 2用一個逗號來分隔異常類和錯誤信息;Python 3把錯誤信息作為參數傳遞給異常類。
  • Python 2支持一種更加復雜的語法來拋出一個帶用戶自定義回溯(stack trace,堆棧追蹤)的異常。在Python 3里你也可以這樣做,但是語法完全不同。
  • 在Python 2里,你可以拋出一個不帶異常類的異常,僅僅只有一個異常信息。在Python 3里,這種形式不再被支持。2to3將會警告你它不能自動修復這種語法。
  • 生成器的throw方法

    在Python 2里,生成器有一個throw()方法。調用a_generator.throw()會在生成器被暫停的時候拋出一個異常,然后返回由生成器函數獲取的下一個值。在Python 3里,這種功能仍然可用,但是語法上有一點不同。

    NotesPython 2Python 3①②③
    a_generator.throw(MyException)no change
    a_generator.throw(MyException, 'error message')a_generator.throw(MyException('error message'))
    a_generator.throw('error message')unsupported
  • 最簡單的形式下,生成器拋出不帶用戶自定義錯誤信息的異常。這種情況下,從Python 2到Python 3語法上沒有變化 。
  • 如果生成器拋出一個帶用戶自定義錯誤信息的異常,你需要將這個錯誤信息字符串(error string)傳遞給異常類來以實例化它。
  • Python 2還支持拋出只有異常信息的異常。Python 3不支持這種語法,并且2to3會顯示一個警告信息,告訴你需要手動地來修復這處代碼。
  • 全局函數xrange()

    在Python 2里,有兩種方法來獲得一定范圍內的數字:range(),它返回一個列表,還有range(),它返回一個迭代器。在Python 3里,range()返回迭代器,xrange()不再存在了。

    NotesPython 2Python 3①②③④⑤
    xrange(10)range(10)
    a_list = range(10)a_list = list(range(10))
    [i for i in xrange(10)][i for i in range(10)]
    for i in range(10):no change
    sum(range(10))no change
  • 在最簡單的情況下,2to3會簡單地把xrange()轉換為range()。
  • 如果你的Python 2代碼使用range(),2to3不知道你是否需要一個列表,或者是否一個迭代器也行。出于謹慎,2to3可能會報錯,然后使用list()把range()的返回值強制轉換為列表類型。
  • 如果在列表解析里有xrange()函數,就沒有必要將其返回值轉換為一個列表,因為列表解析對迭代器同樣有效。
  • 類似的,for循環也能作用于迭代器,所以這里也沒有改變任何東西。
  • 函數sum()能作用于迭代器,所以2to3也沒有在這里做出修改。就像返回值為視圖(view)而不再是列表的字典類方法一樣,這同樣適用于min(),max(),sum(),list(),tuple(),set(),sorted(),any(),all()。
  • 全局函數raw_input()和input()

    Python 2有兩個全局函數,用來在命令行請求用戶輸入。第一個叫做input(),它等待用戶輸入一個Python表達式(然后返回結果)。第二個叫做raw_input(),用戶輸入什么它就返回什么。這讓初學者非常困惑,并且這被廣泛地看作是Python語言的一個“肉贅”(wart)。Python 3通過重命名raw_input()為input(),從而切掉了這個肉贅,所以現在的input()就像每個人最初期待的那樣工作。

    NotesPython 2Python 3①②③
    raw_input()input()
    raw_input('prompt')input('prompt')
    input()eval(input())
  • 最簡單的形式,raw_input()被替換成input()。
  • 在Python 2里,raw_input()函數可以指定一個提示符作為參數。Python 3里保留了這個功能。
  • 如果你真的想要請求用戶輸入一個Python表達式,計算結果,可以通過調用input()函數然后把返回值傳遞給eval()。
  • 函數屬性func_*

    在Python 2里,函數的里的代碼可以訪問到函數本身的特殊屬性。在Python 3里,為了一致性,這些特殊屬性被重新命名了。

    NotesPython 2Python 3①②③④⑤⑥⑦
    a_function.func_namea_function.__name__
    a_function.func_doca_function.__doc__
    a_function.func_defaultsa_function.__defaults__
    a_function.func_dicta_function.__dict__
    a_function.func_closurea_function.__closure__
    a_function.func_globalsa_function.__globals__
    a_function.func_codea_function.__code__
  • __name__屬性(原func_name)包含了函數的名字。
  • __doc__屬性(原funcdoc)包含了你在函數源代碼里定義的文檔字符串(docstring)
  • __defaults__屬性(原func_defaults)是一個保存參數默認值的元組。
  • __dict__屬性(原func_dict)是一個支持任意函數屬性的名字空間。
  • __closure__屬性(原func_closure)是一個由cell對象組成的元組,它包含了函數對自由變量(free variable)的綁定。
  • __globals__屬性(原func_globals)是一個對模塊全局名字空間的引用,函數本身在這個名字空間里被定義。
  • __code__屬性(原func_code)是一個代碼對象,表示編譯后的函數體。
  • I/O方法xreadlines()

    在Python 2里,文件對象有一個xreadlines()方法,它返回一個迭代器,一次讀取文件的一行。這在for循環中尤其有用。事實上,后來的Python 2版本給文件對象本身添加了這樣的功能。

    在Python 3里,xreadlines()方法不再可用了。2to3可以解決簡單的情況,但是一些邊緣案例則需要人工介入。

    NotesPython 2Python 3①②
    for line in a_file.xreadlines():for line in a_file:
    for line in a_file.xreadlines(5):no change (broken)
  • 如果你以前調用沒有參數的xreadlines(),2to3會把它轉換成文件對象本身。在Python 3里,這種轉換后的代碼可以完成前同樣的工作:一次讀取文件的一行,然后執行for循環的循環體。
  • 如果你以前使用一個參數(每次讀取的行數)調用xreadlines(),2to3不能為你完成從Python 2到Python 3的轉換,你的代碼會以這樣的方式失敗:AttributeError: '_io.TextIOWrapper' object has no attribute 'xreadlines'。你可以手工的把xreadlines()改成readlines()以使代碼能在Python 3下工作。(readline()方法在Python 3里返回迭代器,所以它跟Python 2里的xreadlines()效率是不相上下的。)
  • ?

    使用元組而非多個參數的lambda函數

    在Python 2里,你可以定義匿名lambda函數(anonymous?lambda?function),通過指定作為參數的元組的元素個數,使這個函數實際上能夠接收多個參數。事實上,Python 2的解釋器把這個元組“解開”(unpack)成命名參數(named arguments),然后你可以在lambda函數里引用它們(通過名字)。在Python 3里,你仍然可以傳遞一個元組作為lambda函數的參數,但是Python解釋器不會把它解析成命名參數。你需要通過位置索引(positional index)來引用每個參數。

    NotesPython 2Python 3①②③④
    lambda (x,): x + f(x)lambda x1: x1[0] + f(x1[0])
    lambda (x, y): x + f(y)lambda x_y: x_y[0] + f(x_y[1])
    lambda (x, (y, z)): x + y + zlambda x_y_z: x_y_z[0] + x_y_z[1][0] + x_y_z[1][1]
    lambda x, y, z: x + y + zunchanged
  • 如果你已經定義了一個lambda函數,它使用包含一個元素的元組作為參數,在Python 3里,它會被轉換成一個包含到x1[0]的引用的lambda函數。x1是2to3腳本基于原來元組里的命名參數自動生成的。
  • 使用含有兩個元素的元組(x, y)作為參數的lambda函數被轉換為x_y,它有兩個位置參數,即x_y[0]和x_y[1]。
  • 2to3腳本甚至可以處理使用嵌套命名參數的元組作為參數的lambda函數。產生的結果代碼有點難以閱讀,但是它在Python 3下跟原來的代碼在Python 2下的效果是一樣的。
  • 你可以定義使用多個參數的lambda函數。如果沒有括號包圍在參數周圍,Python 2會把它當作一個包含多個參數的lambda函數;在這個lambda函數體里,你通過名字引用這些參數,就像在其他類型的函數里所做的一樣。這種語法在Python 3里仍然有效。
  • 特殊的方法屬性

    在Python 2里,類方法可以訪問到定義他們的類對象(class object),也能訪問方法對象(method object)本身。im_self是類的實例對象;im_func是函數對象,im_class是類本身。在Python 3里,這些屬性被重新命名,以遵循其他屬性的命名約定。

    NotesPython 2Python 3???
    aClassInstance.aClassMethod.im_funcaClassInstance.aClassMethod.__func__
    aClassInstance.aClassMethod.im_selfaClassInstance.aClassMethod.__self__
    aClassInstance.aClassMethod.im_classaClassInstance.aClassMethod.__self__.__class__

    __nonzero__特殊方法

    在Python 2里,你可以創建自己的類,并使他們能夠在布爾上下文(boolean context)中使用。舉例來說,你可以實例化這個類,并把這個實例對象用在一個if語句中。為了實現這個目的,你定義一個特別的__nonzero__()方法,它的返回值為True或者False,當實例對象處在布爾上下文中的時候這個方法就會被調用 。在Python 3里,你仍然可以完成同樣的功能,但是這個特殊方法的名字變成了__bool__()。

    NotesPython 2Python 3①②
    class A:def __nonzero__(self):pass class A:def __bool__(self):pass
    class A:def __nonzero__(self, x, y):pass no change
  • 當在布爾上下文使用一個類對象時,Python 3會調用__bool__(),而非__nonzero__()。
  • 然而,如果你有定義了一個使用兩個參數的__nonzero__()方法,2to3腳本會假設你定義的這個方法有其他用處,因此不會對代碼做修改。
  • 八進制類型

    在Python 2和Python 3之間,定義八進制(octal)數的語法有輕微的改變。

    NotesPython 2Python 3?
    x = 0755x = 0o755

    sys.maxint

    由于長整型和整型被整合在一起了,sys.maxint常量不再精確。但是因為這個值對于檢測特定平臺的能力還是有用處的,所以它被Python 3保留,并且重命名為sys.maxsize。

    NotesPython 2Python 3①②
    from sys import?maxintfrom sys import?maxsize
    a_function(sys.maxint)a_function(sys.maxsize)
  • maxint變成了maxsize。
  • 所有的sys.maxint都變成了sys.maxsize。
  • 全局函數callable()

    在Python 2里,你可以使用全局函數callable()來檢查一個對象是否可調用(callable,比如函數)。在Python 3里,這個全局函數被取消了。為了檢查一個對象是否可調用,可以檢查特殊方法__call__()的存在性。

    NotesPython 2Python 3?
    callable(anything)hasattr(anything, '__call__')

    全局函數zip()

    在Python 2里,全局函數zip()可以使用任意多個序列作為參數,它返回一個由元組構成的列表。第一個元組包含了每個序列的第一個元素;第二個元組包含了每個序列的第二個元素;依次遞推下去。在Python 3里,zip()返回一個迭代器,而非列表。

    NotesPython 2Python 3①②
    zip(a, b, c)list(zip(a, b, c))
    d.join(zip(a, b, c))no change
  • 最簡單的形式,你可以通過調用list()函數包裝zip()的返回值來恢復zip()函數以前的功能,list()函數會遍歷這個zip()函數返回的迭代器,然后返回結果的列表表示。
  • 在已經會遍歷序列所有元素的上下文環境里(比如這里對join()方法的調用),zip()返回的迭代器能夠正常工作。2to3腳本會檢測到這些情況,不會對你的代碼作出改變。
  • StandardError異常

    在Python 2里,StandardError是除了StopIteration,GeneratorExit,KeyboardInterrupt,SystemExit之外所有其他內置異常的基類。在Python 3里,StandardError已經被取消了;使用Exception替代。

    NotesPython 2Python 3??
    x = StandardError()x = Exception()
    x = StandardError(a, b, c)x = Exception(a, b, c)

    types模塊中的常量

    types模塊里各種各樣的常量能幫助你決定一個對象的類型。在Python 2里,它包含了代表所有基本數據類型的常量,如dict和int。在Python 3里,這些常量被已經取消了。只需要使用基礎類型的名字來替代。

    NotesPython 2Python 3???????????????????
    types.UnicodeTypestr
    types.StringTypebytes
    types.DictTypedict
    types.IntTypeint
    types.LongTypeint
    types.ListTypelist
    types.NoneTypetype(None)
    types.BooleanTypebool
    types.BufferTypememoryview
    types.ClassTypetype
    types.ComplexTypecomplex
    types.EllipsisTypetype(Ellipsis)
    types.FloatTypefloat
    types.ObjectTypeobject
    types.NotImplementedTypetype(NotImplemented)
    types.SliceTypeslice
    types.TupleTypetuple
    types.TypeTypetype
    types.XRangeTyperange

    ?types.StringType被映射為bytes,而非str,因為Python 2里的“string”(非Unicode編碼的字符串,即普通字符串)事實上只是一些使用某種字符編碼的字節序列(a sequence of bytes)。

    全局函數isinstance()

    isinstance()函數檢查一個對象是否是一個特定類(class)或者類型(type)的實例。在Python 2里,你可以傳遞一個由類型(types)構成的元組給isinstance(),如果該對象是元組里的任意一種類型,函數返回True。在Python 3里,你依然可以這樣做,但是不推薦使用把一種類型作為參數傳遞兩次。

    NotesPython 2Python 3?
    isinstance(x, (int, float, int))isinstance(x, (int, float))

    basestring數據類型

    Python 2有兩種字符串類型:Unicode編碼的字符串和非Unicode編碼的字符串。但是其實還有另外 一種類型,即basestring。它是一個抽象數據類型,是str和unicode類型的超類(superclass)。它不能被直接調用或者實例化,但是你可以把它作為isinstance()的參數來檢測一個對象是否是一個Unicode字符串或者非Unicode字符串。在Python 3里,只有一種字符串類型,所以basestring就沒有必要再存在了。

    NotesPython 2Python 3?
    isinstance(x, basestring)isinstance(x, str)

    itertools模塊

    Python 2.3引入了itertools模塊,它定義了全局函數zip(),map(),filter()的變體(variant),這些變體的返回類型為迭代器,而非列表。在Python 3里,由于這些全局函數的返回類型本來就是迭代器,所以這些itertools里的這些變體函數就被取消了。(在itertools模塊里仍然還有許多其他的有用的函數,而不僅僅是以上列出的這些。)

    NotesPython 2Python 3①②③④
    itertools.izip(a, b)zip(a, b)
    itertools.imap(a, b)map(a, b)
    itertools.ifilter(a, b)filter(a, b)
    from itertools import imap, izip, foofrom itertools import foo
  • 使用全局的zip()函數,而非itertools.izip()。
  • 使用map()而非itertools.imap()。
  • itertools.ifilter()變成了filter()。
  • itertools模塊在Python 3里仍然存在,它只是不再包含那些已經轉移到全局名字空間的函數。2to3腳本能夠足夠智能地去移除那些不再有用的導入語句,同時保持其他的導入語句的完整性。
  • sys.exc_type,?sys.exc_value,?sys.exc_traceback

    處理異常的時候,在sys模塊里有三個你可以訪問的變量:sys.exc_type,sys.exc_value,sys.exc_traceback。(實際上這些在Python 1的時代就有。)從Python 1.5開始,由于新出的sys.exc_info,不再推薦使用這三個變量了,這是一個包含所有以上三個元素的元組。在Python 3里,這三個變量終于不再存在了;這意味著,你必須使用sys.exc_info。

    NotesPython 2Python 3???
    sys.exc_typesys.exc_info()[0]
    sys.exc_valuesys.exc_info()[1]
    sys.exc_tracebacksys.exc_info()[2]

    對元組的列表解析

    在Python 2里,如果你需要編寫一個遍歷元組的列表解析,你不需要在元組值的周圍加上括號。在Python 3里,這些括號是必需的。

    NotesPython 2Python 3?
    [i for i in 1, 2][i for i in (1, 2)]

    os.getcwdu()函數

    Python 2有一個叫做os.getcwd()的函數,它將當前的工作目錄作為一個(非Unicode編碼的)字符串返回。由于現代的文件系統能夠處理能何字符編碼的目錄名,Python 2.3引入了os.getcwdu()函數。os.getcwdu()函數把當前工作目錄用Unicode編碼的字符串返回。在Python 3里,由于只有一種字符串類型(Unicode類型的),所以你只需要os.getcwd()就可以了。

    NotesPython 2Python 3?
    os.getcwdu()os.getcwd()

    元類(metaclass)

    在Python 2里,你可以通過在類的聲明中定義metaclass參數,或者定義一個特殊的類級別的(class-level)__metaclass__屬性,來創建元類。在Python 3里,__metaclass__屬性已經被取消了。

    NotesPython 2Python 3①②③
    class C(metaclass=PapayaMeta):pass unchanged
    class Whip:__metaclass__ = PapayaMeta class Whip(metaclass=PapayaMeta):pass
    class C(Whipper, Beater):__metaclass__ = PapayaMeta class C(Whipper, Beater, metaclass=PapayaMeta):pass
  • 在聲明類的時候聲明metaclass參數,這在Python 2和Python 3里都有效,它們是一樣的。
  • 在類的定義里聲明__metaclass__屬性在Python 2里有效,但是在Python 3里不再有效。
  • 2to3能夠構建一個有效的類聲明,即使這個類繼承自多個父類。
  • 關于代碼風格

    以下所列的“修補”(fixes)實質上并不算真正的修補。意思就是,他們只是代碼的風格上的事情,而不涉及到代碼的本質。但是Python的開發者們在使得代碼風格盡可能一致方面非常有興趣(have a vested interest)。為此,有一個專門o描述Python代碼風格的官方指導手冊?—?細致到能使人痛苦?—?都是一些你不太可能關心的在各種各樣的細節上的挑剔。鑒于2to3為轉換代碼提供了一個這么好的條件,腳本的作者們添加了一些可選的特性以使你的代碼更具可讀性。

    set()字面值(literal)(顯式的)

    在Python 2城,定義一個字面值集合(literal set)的唯一方法就是調用set(a_sequence)。在Python 3里這仍然有效,但是使用新的標注記號(literal notation):大括號({})是一種更清晰的方法。這種方法除了空集以外都有效,因為字典也用大括號標記,所以{}表示一個空的字典,而不是一個空集。

    ?2to3腳本默認不會修復set()字面值。為了開啟這個功能,在命令行調用2to3的時候指定-f set_literal參數。

    NotesBeforeAfter???
    set([1, 2, 3]){1, 2, 3}
    set((1, 2, 3)){1, 2, 3}
    set([i for i in a_sequence]){i for i in a_sequence}

    全局函數buffer()(顯式的)

    用C實現的Python對象可以導出一個“緩沖區接口”(buffer interface),它允許其他的Python代碼直接讀寫一塊內存。(這聽起來很強大,它也同樣可怕。)在Python 3里,buffer()被重新命名為memoryview()。(實際的修改更加復雜,但是你幾乎可以忽略掉這些不同之處。)

    ?2to3腳本默認不會修復buffer()函數。為了開啟這個功能,在命令行調用2to3的時候指定-f buffer參數。

    NotesBeforeAfter?
    x =?buffer(y)x =?memoryview(y)

    逗號周圍的空格(顯式的)

    盡管Python對用于縮進和凸出(indenting and outdenting)的空格要求很嚴格,但是對于空格在其他方面的使用Python還是很自由的。在列表,元組,集合和字典里,空格可以出現在逗號的前面或者后面,這不會有什么壞影響。但是,Python代碼風格指導手冊上指出,逗號前不能有空格,逗號后應該包含一個空格。盡管這純粹只是一個美觀上的考量(代碼仍然可以正常工作,在Python 2和Python 3里都可以),但是2to3腳本可以依據手冊上的標準為你完成這個修復。

    ?2to3腳本默認不會修復逗號周圍的空格。為了開啟這個功能,在命令行調用2to3的時候指定-f wscomma參數。

    NotesBeforeAfter??
    a ,ba, b
    {a :b}{a: b}

    慣例(Common idioms)(顯式的)

    在Python社區里建立起來了許多慣例。有一些比如while 1:?loop,它可以追溯到Python 1。(Python直到Python 2.3才有真正意義上的布爾類型,所以開發者以前使用1和0替代。)當代的Python程序員應該鍛煉他們的大腦以使用這些慣例的現代版。

    ?2to3腳本默認不會為這些慣例做修復。為了開啟這個功能,在命令行調用2to3的時候指定-f idioms參數。

    NotesBeforeAfter????
    while 1:do_stuff() while True:do_stuff()
    type(x) == Tisinstance(x, T)
    type(x) is Tisinstance(x, T)
    a_list = list(a_sequence) a_list.sort() do_stuff(a_list) a_list = sorted(a_sequence) do_stuff(a_list)

    ?

    轉載于:https://www.cnblogs.com/davidwang456/p/7493795.html

    總結

    以上是生活随笔為你收集整理的python2 与 python3 语法区别--转的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    欧美日韩在线精品 | 国产精品一区免费在线观看 | 天天草夜夜 | av品善网 | 国产精品成久久久久三级 | а天堂中文最新一区二区三区 | 激情综合一区 | 91麻豆.com | 蜜臀av夜夜澡人人爽人人 | 夜夜夜草 | 欧美日韩高清在线一区 | 国产在线小视频 | 91大神免费视频 | 亚洲一级片免费观看 | 中文字幕av一区二区三区四区 | 狠狠色丁香婷婷综合基地 | 麻豆成人在线观看 | 天天综合网 天天 | 国产精品av一区二区 | 日韩成人av在线 | 日日麻批40分钟视频免费观看 | 成人av动漫在线 | 欧美一区二区在线免费观看 | 亚洲mv大片欧洲mv大片免费 | 色香蕉视频 | 在线观看精品 | 国产精品久久久久久久久久尿 | 黄色影院在线免费观看 | 亚洲成人精品 | 欧美片网站yy | 日韩免费久久 | 精品国产电影一区二区 | 欧美整片sss | 欧美韩日在线 | 五月天色丁香 | 国产高清久久久 | 日韩中文字幕免费视频 | 日韩二区在线播放 | 国产中文 | 丁香高清视频在线看看 | 国产精品s色 | 成年人国产精品 | 黄视频色网站 | 亚洲va在线va天堂va偷拍 | 免费看一级一片 | 国产在线欧美日韩 | 国产精成人品免费观看 | 99热只有精品在线观看 | 在线看v片 | 久热国产视频 | 国产视频一区精品 | 中文字幕在线观看播放 | 国产黄影院色大全免费 | 国产在线精品福利 | 欧美视频网址 | 亚洲深爱激情 | 久久综合之合合综合久久 | 少妇视频一区 | 国产精成人品免费观看 | 日韩理论电影在线观看 | 婷婷中文字幕综合 | 日韩精品久久一区二区三区 | 久久久久 | 国产成人免费观看久久久 | 99精品免费久久久久久久久日本 | 精品一区二区免费视频 | 精品国产一区二区久久 | 久久精品官网 | 欧美一二在线 | 夜夜躁日日躁狠狠久久av | 特级毛片在线免费观看 | 亚洲视频网站在线观看 | 激情视频一区二区 | 亚洲狠狠操 | 欧美成人中文字幕 | 日b视频在线观看网址 | 国产精品ssss在线亚洲 | 91av在线不卡 | 99精品视频观看 | 久久怡红院 | 成人小视频在线免费观看 | 久久综合九色综合97_ 久久久 | 黄色a大片| 国产麻豆成人传媒免费观看 | 国产精品久久二区 | 99精品视频在线免费观看 | 日韩精品一区二区三区免费观看 | 久久激情久久 | 国产区免费 | 精品黄色在线观看 | 日本精品二区 | 亚州激情视频 | 在线午夜av| 成人在线免费av | 亚洲精品在线观看中文字幕 | 91黄色免费看 | 午夜国产一区二区三区四区 | 国内小视频在线观看 | 97超碰在线播放 | 91福利视频久久久久 | 又黄又爽的视频在线观看网站 | 国产成人精品999在线观看 | av天天在线观看 | 国产精品久久久久久久久费观看 | 国产美女无遮挡永久免费 | 日韩欧美在线观看 | 欧美aaaxxxx做受视频 | 国产香蕉久久精品综合网 | 国产高清亚洲 | 成人黄在线 | 欧美国产日韩一区二区三区 | 午夜av不卡 | 一级精品视频在线观看宜春院 | 视频福利在线 | 日日干日日色 | 天天干天天色2020 | 国产少妇在线观看 | 波多野结衣电影一区二区三区 | 国色天香在线观看 | 蜜臀av性久久久久蜜臀av | 欧美激情视频免费看 | 最近高清中文字幕 | 日日碰狠狠躁久久躁综合网 | 色资源在线 | 久久99精品国产麻豆婷婷 | 国产成人精品电影久久久 | 国产这里只有精品 | 中文字幕av全部资源www中文字幕在线观看 | 成人永久免费 | 黄色91免费观看 | 国产尤物视频在线 | 狠狠88综合久久久久综合网 | 99久热在线精品视频成人一区 | 在线免费观看欧美日韩 | 中文字幕欧美激情 | 三级黄色免费片 | 日韩午夜高清 | 国产精品毛片一区二区 | 香蕉视频久久久 | 黄网站色成年免费观看 | 一区二区在线不卡 | 97国产大学生情侣白嫩酒店 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | h文在线观看免费 | 中文字幕亚洲国产 | 国产一在线精品一区在线观看 | 91九色porny蝌蚪主页 | 麻豆视频免费播放 | 亚洲欧美国产精品va在线观看 | 日日干美女 | 激情欧美一区二区三区 | 国产黄a三级 | 日韩欧美一区二区三区视频 | 国产色在线视频 | 欧美一级性生活片 | 射射射综合网 | 超碰人人国产 | 国产区在线 | 国产视频2区| 国产精品国产亚洲精品看不卡15 | 天天干天天怕 | 日本中文字幕久久 | 国产精品久免费的黄网站 | 亚洲在线视频播放 | 久久乐九色婷婷综合色狠狠182 | 最新日韩在线 | 天天拍天天色 | 欧美天天综合网 | 最近最新最好看中文视频 | 亚洲黄色激情小说 | 久久精品99北条麻妃 | 激情网站| av福利在线 | 国产精品亚洲片夜色在线 | 国产亚洲va综合人人澡精品 | 午夜av网站| 国产午夜精品一区二区三区 | 国产精品99久久久久人中文网介绍 | 亚洲韩国一区二区三区 | 久久精久久精 | 久久国产二区 | 日本精品久久久久影院 | 91欧美视频网站 | 亚洲片在线 | 99精品国产福利在线观看免费 | 日韩免费观看av | 国产亚洲精品久久久久久电影 | 在线观看色网站 | 色偷偷男人的天堂av | 国产福利av | 亚洲精品久久久久中文字幕二区 | 国内精品二区 | 久艹在线免费观看 | 四虎成人精品在永久免费 | 午夜在线观看影院 | 涩五月婷婷 | 国产精品成人国产乱一区 | 国产视频一区精品 | 亚洲一级久久 | 亚洲永久av | 欧美色综合久久 | 国产成人精品午夜在线播放 | 亚洲三级在线 | 国产在线观看xxx | 91福利影院在线观看 | 日韩高清久久 | 久久精品99久久 | 中文字幕国产亚洲 | 永久免费精品视频网站 | 婷婷色综| 中文字幕欧美日韩va免费视频 | 天天视频亚洲 | 亚洲视频播放 | 天天干天天插伊人网 | 亚洲一级免费观看 | 一级片视频免费观看 | 色婷婷av一区二 | 色资源在线观看 | 中文字幕日韩一区二区三区不卡 | av免费看看 | 在线观看日韩av | 亚洲精品日韩一区二区电影 | 久久国产一区 | 日韩在线视频一区二区三区 | 成人av电影网址 | 久99久精品视频免费观看 | 欧美成人猛片 | 免费国产黄线在线观看视频 | 日韩欧美一二三 | 欧美做受69 | 国产又粗又猛又黄又爽视频 | 亚洲影院色 | 国产高清免费在线观看 | 日韩伦理一区二区三区av在线 | 91人人澡人人爽人人精品 | 亚洲精品456在线播放乱码 | 日日操天天爽 | 91视频在线免费看 | 国产偷在线 | 1区2区视频| 成人理论电影 | 久久久精品免费观看 | 免费久草视频 | 日韩精品一区二区在线视频 | 久久久久久麻豆 | 国产亲近乱来精品 | 国产精品 中文字幕 亚洲 欧美 | 97涩涩视频 | 国产无遮挡又黄又爽馒头漫画 | 在线 欧美 日韩 | 国产精品美女www爽爽爽视频 | 国产中文字幕视频在线观看 | 日韩免费在线看 | 亚洲国产小视频在线观看 | 99成人在线视频 | www免费网站在线观看 | 欧美日韩在线观看一区二区 | www.亚洲精品 | 国内亚洲精品 | 九九九热精品免费视频观看网站 | 欧美日韩视频在线观看免费 | 色干综合| 天天操天操| 欧美aⅴ在线观看 | 欧美精品亚洲精品日韩精品 | 久久国色夜色精品国产 | 国产免费高清 | 亚洲人成精品久久久久 | 91漂亮少妇露脸在线播放 | 超碰久热| 色综合中文综合网 | 99国产精品久久久久久久久久 | a级免费观看 | 午夜免费久久看 | 久久国色夜色精品国产 | 91看成人 | 狠狠久久| 精品国产欧美一区二区三区不卡 | 成人久久18免费网站图片 | 国产精品www| 在线天堂中文在线资源网 | 国产高清视频免费最新在线 | 在线看毛片网站 | 黄色av电影在线 | 色五月成人| 蜜臀aⅴ国产精品久久久国产 | 免费看片黄色 | 日韩免费区 | 免费在线a | 国产成人精品午夜在线播放 | 91正在播放| 日操操 | 日本成址在线观看 | 免费a v视频 | 五月婷婷中文网 | 欧美不卡视频在线 | 国产精品一区二区三区99 | 国产69精品久久99的直播节目 | 国产精品日韩在线观看 | 亚洲国产精品电影在线观看 | 91福利视频一区 | 91精品秘密在线观看 | 99热播精品 | 天天操天天操天天操天天操天天操天天操 | 天天天天天天操 | 欧美国产高清 | 久久精品国产一区二区 | 天天激情在线 | 992tv人人网tv亚洲精品 | 91视频com | 成人av资源网站 | 国产成人在线综合 | 国产一级在线视频 | 日韩特黄av | 亚洲日韩中文字幕在线播放 | 亚洲国产成人久久 | 欧美日韩伦理在线 | 国产视频一区二区在线观看 | 麻豆精品传媒视频 | 91精品国产91p65 | 日韩免费观看视频 | 久久av免费电影 | 国产精品热视频 | 久久一视频 | 亚洲女同ⅹxx女同tv | 国产精品乱码久久 | 天堂在线视频中文网 | 综合网久久 | 国产精品一区二区三区电影 | 最近中文字幕高清字幕免费mv | 亚洲日本va午夜在线电影 | 婷婷久久久久 | 91.精品高清在线观看 | 亚洲va欧洲va国产va不卡 | 99精品网站 | 午夜三级毛片 | 国产精品久久久久久久久久久久午夜 | 国产亚洲精品日韩在线tv黄 | 亚洲精品国产免费 | av日韩在线网站 | 久草综合视频 | 精品国产乱码一区二区三区在线 | 在线免费视频a | 6080yy午夜一二三区久久 | 97色国产| 97碰在线 | 五月天激情综合 | www91在线观看| 亚洲免费av一区二区 | 波多野结衣一区三区 | 日日爽视频 | 国产成人精品电影久久久 | 国产一区二区精品91 | 亚洲年轻女教师毛茸茸 | 日韩高清三区 | 日韩videos | 成片视频在线观看 | 久久视频在线观看免费 | 98精品国产自产在线观看 | 91探花国产综合在线精品 | 成人黄色大片网站 | 伊人久久国产 | 中文字幕免费在线看 | 国产福利一区二区三区视频 | 欧美日韩一级在线 | 欧美黑人性猛交 | 久草在线视频新 | 日本中文乱码卡一卡二新区 | 国产午夜精品一区二区三区在线观看 | 黄色一级大片免费看 | 久久午夜网 | 国产精品mv在线观看 | 亚洲永久国产精品 | 国产偷国产偷亚洲清高 | 日本久久综合视频 | 综合伊人av | 蜜臀av性久久久久蜜臀aⅴ四虎 | 日韩精品不卡 | 狠狠插天天干 | 日日夜夜草 | 国产裸体视频网站 | 婷婷伊人综合 | 日韩av不卡在线观看 | 欧美性生活一级片 | 久久精品中文字幕一区二区三区 | 亚洲精品视频在线播放 | 亚洲精品白浆高清久久久久久 | 欧美在线一二区 | 精品产品国产在线不卡 | 亚洲黄色一级大片 | 国产不卡视频在线播放 | 精品久久久久国产 | 天天操夜夜操国产精品 | 欧美性受极品xxxx喷水 | 天天干中文字幕 | 福利视频网站 | 五月婷婷综合激情网 | 色吊丝在线永久观看最新版本 | 国产一区二区日本 | 久久九九免费视频 | 91精品在线视频观看 | 中文字幕乱码亚洲精品一区 | 免费婷婷| 久草在线最新视频 | 久久黄色a级片 | 丁香六月国产 | 久久精品国产精品亚洲 | 成人午夜精品福利免费 | 激情视频免费在线 | 成年在线观看 | 亚洲精品美女在线观看播放 | 日韩在线在线 | 午夜一级免费电影 | 国产最新91 | 狠狠干成人综合网 | 激情五月色播五月 | 1024手机基地在线观看 | 亚洲综合小说电影qvod | 成人黄色小说在线观看 | 深夜免费福利 | 中文字幕日韩免费视频 | 四虎在线免费观看 | 四虎影视成人永久免费观看视频 | 午夜精品福利在线 | 国产一级黄大片 | 天天操夜夜爱 | 97干com | 99久久精品日本一区二区免费 | 国产又粗又猛又黄又爽 | 精品电影一区 | 黄色不卡av | 在线免费观看一区二区三区 | 日日日干 | 久久国产精品色av免费看 | 91超碰免费在线 | av在观看 | 91成人免费观看视频 | 亚洲精品乱码久久久久久按摩 | 国产裸体永久免费视频网站 | 免费99精品国产自在在线 | 91九色视频导航 | 国产原创av片 | 欧美日高清视频 | 久久国产精品免费一区二区三区 | 免费观看全黄做爰大片国产 | 成人精品电影 | 精品视频在线免费 | 黄色网中文字幕 | 一区二区激情 | 国产视频二区三区 | 亚洲综合色av | 国产精品青草综合久久久久99 | 成人国产精品av | 在线观看国产区 | 亚洲永久国产精品 | 日韩视频中文字幕 | 狠狠色噜噜狠狠狠狠2022 | 国产在线中文 | 天堂网av在线 | 韩国av免费在线 | 又湿又紧又大又爽a视频国产 | 亚洲在线| 日韩久久一区二区 | 中文av在线天堂 | 97在线视 | 网站免费黄色 | 中文字幕av免费观看 | av色综合 | 色吊丝av中文字幕 | 有码中文字幕在线观看 | 国产女人40精品一区毛片视频 | 久久久亚洲网站 | 欧美日本一区 | av久久久久久 | 亚洲国产中文字幕在线观看 | av久久久 | 成人av免费电影 | 奇米网777 | www中文在线 | 免费黄色激情视频 | 国产精品乱码在线 | 中文字幕在线观看播放 | 免费男女羞羞的视频网站中文字幕 | 天天久久夜夜 | 久久成人高清 | 精品免费观看视频 | 国产女人18毛片水真多18精品 | 干天天 | 久久久久久草 | 成人av在线看 | 中文成人字幕 | 91干干干| 欧美日韩视频精品 | 亚洲综合精品视频 | 探花视频在线版播放免费观看 | 夜色资源站wwwcom | 97色婷婷人人爽人人 | 91xav| 久久天天躁狠狠躁亚洲综合公司 | 婷婷丁香五 | 日韩精品一卡 | 成全在线视频免费观看 | 国产精品99久久久精品免费观看 | 久久一区二区三区四区 | 91精品一区二区三区久久久久久 | 一本一本久久a久久 | 中文字幕网站视频在线 | 国产99re| 久久久久亚洲国产精品 | 欧美大片在线看免费观看 | 欧美在线一 | 五月激情视频 | 日韩欧美视频一区二区 | 免费看片网页 | 国产成人精品av | 在线免费av电影 | 国产露脸91国语对白 | 91大神精品视频在线观看 | 99人成在线观看视频 | 亚洲精品国产精品乱码不99热 | 81国产精品久久久久久久久久 | 日韩av在线免费看 | 日韩黄色一区 | 黄色av影院| 亚洲国产中文字幕在线视频综合 | 国产亚洲亚洲 | 国产精品中文在线 | 亚洲精品456在线播放 | 狠狠色丁香久久婷婷综 | 久久理伦片 | 国产玖玖精品视频 | av不卡在线看| 亚洲妇女av | 国产精品视频内 | 国产99在线免费 | 日韩伦理片一区二区三区 | 日本精品视频一区 | 992tv在线观看 | 日本黄色a级大片 | 国产成人高清 | 91丨精品丨蝌蚪丨白丝jk | 国产精品露脸在线 | 五月亚洲婷婷 | 免费黄色a网站 | 开心色插 | 永久免费视频国产 | 日韩在线观看视频一区二区三区 | 国产精品美女久久久久久 | 国产亚洲小视频 | 特级西西444www大精品视频免费看 | 亚洲人成人在线 | 欧美日韩一区二区免费在线观看 | 日韩av二区 | 狠狠狠色丁香婷婷综合久久五月 | 成人免费在线观看电影 | 日韩精品视频免费专区在线播放 | 午夜精选视频 | 狠狠躁日日躁狂躁夜夜躁av | 美女网站黄在线观看 | 激情喷水 | 91久久国产露脸精品国产闺蜜 | 欧美成人xxx | 在线观看免费av片 | 五月天网站在线 | 一本色道久久综合亚洲二区三区 | 99精品一区二区三区 | 在线成人免费电影 | 国产高清视频色在线www | 成人小视频在线观看免费 | 天天做天天爱夜夜爽 | 亚洲精品中文在线资源 | 91探花国产综合在线精品 | 99亚洲精品在线 | 97视频资源 | 亚洲成人免费 | 欧美日韩一区二区三区视频 | 日本精品小视频 | 国产亚洲精品久久久久久无几年桃 | 亚洲精品一区二区精华 | 国产欧美在线一区 | 亚洲精品在线视频 | 国产男女无遮挡猛进猛出在线观看 | 国产精品免费视频久久久 | 久久精品国产精品亚洲 | 午夜av在线| 草久久久久久久 | 国产一级淫片免费看 | 一区精品久久 | 国产录像在线观看 | 91传媒在线| 日韩在线网 | 精品一区二区视频 | 久久精品一区二区 | 精品国产_亚洲人成在线 | 亚洲国产美女久久久久 | 人人爽久久久噜噜噜电影 | 国产亚洲精品久久久久秋 | 日韩在线一区二区免费 | 亚洲综合小说 | av三级av| 国产精品精品国产婷婷这里av | 中文字幕韩在线第一页 | 精品国产一区二区三区免费 | 久久精品视频99 | 国产中文字幕久久 | 黄色成人av | 高潮久久久久久 | 国产一级二级视频 | 9草在线| 久草在线综合 | 99视频在线精品国自产拍免费观看 | 91九色在线观看视频 | 国产成人三级三级三级97 | 久久精品久久久久久久 | 久久黄色影视 | 97精品一区 | 久久久国产一区二区 | 国产xxxx做受性欧美88 | 欧美一级乱黄 | 美女黄色网在线播放 | 日韩网站中文字幕 | 午夜狠狠干 | 日韩欧美在线不卡 | 就色干综合| 91免费试看 | www.天天综合| 最新日本中文字幕 | 国产美女主播精品一区二区三区 | 国产精品亚 | 国产一区二区在线免费播放 | 午夜 久久 tv | 91九色综合 | 在线看小早川怜子av | av黄网站| 2000xxx影视| 国产精品久久二区 | 久久久影院官网 | 91理论电影 | av中文字幕不卡 | 久久成人免费 | 日韩欧美在线观看 | 国产伦精品一区二区三区无广告 | 国产视频精品免费 | 最近免费中文字幕mv在线视频3 | www.国产视频 | 欧美激情精品久久久久久 | 免费观看丰满少妇做爰 | 在线免费观看麻豆视频 | 27xxoo无遮挡动态视频 | 国产涩涩在线观看 | 天天爽天天爽夜夜爽 | 久久国产精品一国产精品 | 精品人人爽| 国产涩涩在线观看 | 久久久久久蜜av免费网站 | 久久午夜精品影院一区 | 国产青草视频在线观看 | 亚洲另类视频在线观看 | 91av亚洲 | 97成人在线观看视频 | 天天干天天操天天拍 | 成人国产精品av | 女人18毛片a级毛片一区二区 | 久久久精品成人 | 日韩av中文 | 在线观看视频中文字幕 | 亚洲人天堂 | 久久av免费| 久久国产精品99久久久久久进口 | 日韩av黄| 麻豆视频国产精品 | 国产精品免费观看网站 | 在线观看中文字幕网站 | 丁香视频全集免费观看 | www.福利视频 | 日韩av有码在线 | 99久久夜色精品国产亚洲96 | 精品国产视频在线 | 一本一道久久a久久精品蜜桃 | 婷婷丁香色| 国际精品久久久 | 99久久久久成人国产免费 | 成人av免费看| 免费久久网站 | 久久久久久久久久网站 | 欧美成天堂网地址 | 在线观看视频精品 | 1024手机看片国产 | 日本精品视频在线播放 | 久久99热这里只有精品国产 | 久久精品久久精品久久39 | 四虎影视国产精品免费久久 | 日韩免费 | 亚洲精品视频免费观看 | 日韩一级黄色片 | 国产三级精品三级在线观看 | 免费高清在线视频一区· | 337p欧美 | 亚洲欧洲精品一区二区精品久久久 | 天天操天天干天天操天天干 | 中文字字幕在线 | 国产在线视频导航 | 99精品国产一区二区三区麻豆 | 成人在线一区二区三区 | a黄色大片 | 国产精品久久久久久久久久直播 | 日日夜夜免费精品视频 | av在线电影网站 | 中文字幕激情 | 亚洲高清视频在线观看 | 射久久 | 亚洲女裸体 | www最近高清中文国语在线观看 | 日韩精品久久一区二区三区 | 天天射夜夜爽 | 国产精品成人一区二区 | 国产最新91 | 日韩精品一区二区三区免费视频观看 | 久久久国产精品亚洲一区 | 在线国产视频 | 国产丝袜高跟 | 精品国产一区二区三区久久久久久 | 日韩在线观看三区 | 亚洲精品国精品久久99热一 | 深夜免费小视频 | 中文字幕制服丝袜av久久 | 欧美日本在线视频 | 国产精品99蜜臀久久不卡二区 | 国产91精品久久久久 | 少妇性色午夜淫片aaaze | 亚洲欧洲久久久 | 91精品蜜桃| 在线不卡中文字幕播放 | 日韩视频专区 | 97热久久免费频精品99 | 麻豆国产视频 | 亚洲国产日韩av | 久草在线官网 | 天天插日日插 | 最近中文字幕免费av | 久久成人免费电影 | 亚洲精品高清在线 | 粉嫩av一区二区三区四区在线观看 | 91精品黄色 | 91成人在线网站 | 超碰人人乐 | 国产91对白在线播 | 四虎在线观看网址 | 91av看片| 丁香影院在线 | 国产精品久久一卡二卡 | 中文字幕网址 | 久久综合九色九九 | 91在线精品秘密一区二区 | 久久久久久久久久伊人 | 日韩一级片观看 | 久久久影院官网 | 国产96av| 亚洲一区天堂 | 亚洲aⅴ一区二区三区 | 国产字幕在线观看 | 久久公开视频 | 在线观看你懂的网址 | 激情在线免费视频 | 久久精品国产亚洲a | 四虎www | 人人舔人人射 | 国产亚洲一区二区在线观看 | 美女网站视频色 | 97超碰在线人人 | 成人免费观看网址 | 国产精品久久久久一区二区国产 | 粉嫩aⅴ一区二区三区 | av青草| 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 天堂网一区二区三区 | 国产手机在线播放 | 日韩av在线网站 | 一区二区欧美激情 | 91精品视频一区二区三区 | 中文字幕一区二区三 | 综合网天天色 | 色综合亚洲精品激情狠狠 | av三级在线免费观看 | 日色在线视频 | 久久激情视频免费观看 | 国产午夜剧场 | av 在线观看 | 黄色大片免费网站 | 国产资源精品在线观看 | 成人免费视频免费观看 | 五月婷婷av在线 | 免费观看黄 | 毛片3 | 国产999精品久久久久久 | av在线成人 | 麻豆精品传媒视频 | 超碰在线资源 | 国产精品久久久久久久久久久久午夜片 | 国产精品免费av | 色五月色开心色婷婷色丁香 | 91麻豆网站 | 麻豆久久精品 | 九草在线观看 | 玖玖在线资源 | 久久久国产精品一区二区中文 | 亚洲综合欧美日韩狠狠色 | 999久久久久久久久久久 | 久久国产精品99国产精 | 在线看av网址 | www.久草视频| 国产福利一区二区在线 | 2019免费中文字幕 | 日韩资源视频 | 日韩一区在线免费观看 | 中文字幕在线观看亚洲 | av一区二区三区在线 | 98超碰在线 | 天堂网一区二区 | 国产麻豆剧传媒免费观看 | 亚洲九九九 | 伊人色综合网 | 国产一级一级国产 | 久久国产精品免费一区二区三区 | 欧美福利视频 | 国产亚洲在线视频 | 手机在线日韩视频 | 久草视频免费 | 97涩涩视频 | 欧美激情综合五月色丁香 | 激情网婷婷 | 日韩理论影院 | 人人躁| 国内精品久久久久久久久久清纯 | 日韩精品视频久久 | 视频在线一区二区三区 | av国产网站 | 在线看国产精品 | 国产精品原创视频 | 午夜色站 | 香蕉一区 | 色国产精品 | 亚洲精品一区中文字幕乱码 | 激情网站| 国产综合婷婷 | 91在线porny国产在线看 | 99久久精品国产欧美主题曲 | 午夜免费视频网站 | 在线免费观看欧美日韩 | 国产 成人 久久 | 九九热久久免费视频 | 久久视频6 | 婷婷免费在线视频 | 日韩高清在线一区二区三区 | 久草免费在线视频 | 免费99视频 | 久久久久中文 | 国产精品不卡在线观看 | 欧美一区二区三区在线视频观看 | 精品国内自产拍在线观看视频 | 伊人av综合 | 91在线观看黄 | 久久久久成 | 一区二区观看 | 免费三级骚 | 国产一区二区高清不卡 | 亚洲热久久 | 精品国产一区二区三区久久久久久 | 日韩精品播放 | 亚洲免费av观看 | 91视频黄色 | 婷婷久久婷婷 | 在线观看视频免费播放 | 国产精品二区在线 | 久久精品网站视频 | 少妇自拍av | 中国一级特黄毛片大片久久 | 久久精品99久久 | 日韩理论| 午夜精品视频在线 | 久人人| 97超碰在线播放 | 日本在线观看中文字幕 | www.天天干.com | 国产一区不卡在线 | 国产色女| 国产精品黑丝在线观看 | 人人视频网站 | 精品国产乱码久久 | 日韩三级视频在线看 | 国产精品久久久久久久久免费 | 人人干人人添 | av888av.com| 精品久久中文 | 精品久久久免费视频 | 日本婷婷色 | 97视频成人| 成人av午夜 | 又黄又色又爽 | 欧美色综合天天久久综合精品 | 中文字幕中文字幕在线一区 | 极品久久久久 | 麻豆视频91 | 久久免费播放视频 | 日韩av网站在线播放 | 中文在线字幕观看电影 | 国产91精品高清一区二区三区 | 不卡的一区二区三区 | 午夜视频在线观看一区二区 | www.五月激情.com| 亚洲日韩中文字幕 | 在线精品视频免费观看 | 中文字幕免费成人 | 久久免费精品国产 | 国产精品黑丝在线观看 | 亚洲精品乱码久久久久久高潮 | 中文字幕中文字幕在线中文字幕三区 | 国产免费成人av | 久久国产视频网站 | 在线观看国产成人av片 | 五月天最新网址 | 久久国产乱| 日日夜夜av | 色综合人人 | 免费在线一区二区 | 国产精品女人久久久久久 | 一区在线观看视频 | 国产做a爱一级久久 | 91精品视频免费在线观看 | 最新极品jizzhd欧美 | 最近高清中文字幕在线国语5 | 久久国产露脸精品国产 | 日日夜夜精品视频天天综合网 | 久久五月婷婷综合 | 天天干夜夜爽 | 日韩精品极品视频 | 婷婷丁香七月 | 亚洲欧美日韩精品一区二区 | 欧美精品九九 | 黄色三级免费观看 | a视频在线 | 婷婷久久综合九色综合 | 色妞久久福利网 | 国产特级毛片aaaaaa毛片 | 麻豆久久精品 | 久久国产影视 | 日本激情中文字幕 | 色婷婷骚婷婷 | 色无五月 | 国产精品一区二区久久精品爱涩 | 国产特级毛片aaaaaaa高清 | 国产特级毛片aaaaaaa高清 | 日日干夜夜骑 | 五月婷激情| 波多野结衣综合网 | 国产午夜一区 | 国产精品岛国久久久久久久久红粉 | 国产精品一区二区三区在线播放 | 久久99精品国产麻豆婷婷 | 五月网婷婷 | 最近中文字幕免费av | 热久久视久久精品18亚洲精品 | 欧美一区二区视频97 | 亚洲欧美国产精品va在线观看 | 久久视频精品在线 | 天天操天天干天天综合网 | 日韩大片在线看 | 久久国产精品一二三区 | 久久99视频精品 | 国产精品丝袜久久久久久久不卡 | 免费日韩一区二区三区 | 天天干天天做 | 日本爱爱免费视频 | 久久人人爽人人片av | 91丨九色丨蝌蚪丨老版 | 九九热1 | 国产精品1区2区在线观看 | 亚洲精品字幕 | 伊人六月 | 国产精品9区 | 国产经典 欧美精品 | 日韩在线观看网址 | 国内亚洲精品 | 久久国产精品久久久久 | 黄色三级网站在线观看 | 久草视频在线看 | 久久精品—区二区三区 | 在线蜜桃视频 | www激情com | 久久久久久久久久久久久国产精品 | 欧美日韩在线看 | a视频免费看 | 久久久久久久久久久免费视频 | 午夜性福利| 中文字幕字幕中文 | 久久精品之 | 色婷婷综合久久久久中文字幕1 | 婷婷六月综合网 |