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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

《简明Python教程》学习笔记

發(fā)布時(shí)間:2023/12/20 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《简明Python教程》学习笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基本知識(shí)

第一個(gè)Python程序:

print("hello world")

如何退出Python的解釋器提示符:

? 在Linux或OS X的shell程序中,可以通過(guò)按下[ctrl+d]或輸入exit()。

? 在windows命令提示符中,可以按下[ctrl+z]組合鍵,然后敲擊[center]鍵來(lái)退出。

注意:

Python 是區(qū)分大小寫的,如 print 和 Print 是不同的——注意前者的 p 是小寫的,而后者的 P 是大寫的。此外,你需要確保每一行的第一個(gè)字符前面都沒(méi)有任何空格或制表格。

注釋

? 注釋 是任何存在于 # 號(hào)右側(cè)的文字,其主要用作寫給程序讀者看的筆記。

? 舉個(gè)例子:

print('hello world') #注意到 print 是一個(gè)函數(shù)

? 或者:

# 注意到 print 是一個(gè)函數(shù) print('hello world')

字面常量

? 可以直接表示其字面意思的量,例如5、1.23這樣的數(shù)字或字符串文本。

數(shù)字

? 數(shù)字主要分為兩種類型——整數(shù)(Integers)與浮點(diǎn)數(shù)(Floats)。

? 針對(duì)有經(jīng)驗(yàn)的程序員的提示
? 沒(méi)有單獨(dú)的 long 類型。 int 類型可以指任何大小的整數(shù)。

字符串

? 一串字符串(String)是 字符(Characters) 的 序列(Sequence)。基本上,字符串就是一串詞匯。

? 單引號(hào)和雙引號(hào)的作用差不多,都是指定字符串:

? '我是一個(gè)字符串’和“我是一個(gè)字符串”的效果一樣。

? 三引號(hào),主要用于多行字符串,在三引號(hào)中可以任意使用單引號(hào)和雙引號(hào)。例如:

'''這是一段多行字符串。這是它的第一行。 This is the second line. "What's your name?," I asked. He said "Bond, James Bond." '''

? 字符串是不可變的。

? format可以使用內(nèi)容填充字符串中的占位符(格式)。

? print輸出字符串時(shí),會(huì)在末尾自動(dòng)加上換行符“\n”,可以使用end參數(shù)替換掉換行符。例如:

print('a',end='') print('b',end='')

? 輸出結(jié)果如下:

ab

? 轉(zhuǎn)義序列

? 對(duì)于有特殊含義的字符出現(xiàn)在字符串中,需要使用轉(zhuǎn)義序列""來(lái)進(jìn)行轉(zhuǎn)義,例如’What’s your name’在python中會(huì)報(bào)錯(cuò),你需要對(duì)其中的但引號(hào)進(jìn)行轉(zhuǎn)義,‘What’s your name’。

? 最重要的轉(zhuǎn)義序列:\n代表?yè)Q行,\t代表制表符

? 在一個(gè)字符串中,一個(gè)放置在末尾的反斜杠表示字符串將在下一行繼續(xù),但不會(huì)添加新的一行。來(lái)看看例子:

"This is the first sentence. \ This is the second sentence."

相當(dāng)于:

"This is the first sentence. This is the second sentence."

原始字符串

在字符串前面使用r或R可以表示這個(gè)字符串沒(méi)有經(jīng)過(guò)任何處理,也就是原樣輸出。

r"Newlines are indicated by \n"

在使用正則表達(dá)式時(shí),應(yīng)該全程使用原樣字符串。舉例說(shuō)明的話,反向引用可以通過(guò) ‘\1’ 或 r’\1’ 來(lái)實(shí)現(xiàn)。

變量

? 可以存儲(chǔ)任何信息,并且也能夠操作它們。

標(biāo)識(shí)符命名

? 就是給某些東西一個(gè)名稱。標(biāo)識(shí)符命名規(guī)則和C語(yǔ)言、Java的一樣,標(biāo)識(shí)符中只能有字母、數(shù)字、下劃線,并且開(kāi)頭只能是字母或數(shù)字。

數(shù)據(jù)類型

? 變量可以將各種形式的值保存為不同的數(shù)據(jù)類型(Data Type)。基本的類型是我們已經(jīng)討論過(guò)的數(shù)字與字符串。

對(duì)象

? Python將程序中的任何內(nèi)容統(tǒng)稱為對(duì)象(Object)。

? 針對(duì)面向?qū)ο缶幊陶Z(yǔ)言用戶的提示:
? Python 是強(qiáng)(Strongly)面向?qū)ο蟮?#xff0c;因?yàn)樗械囊磺卸际菍?duì)象, 包括數(shù)字、字符串與
? 函數(shù)。

? 針對(duì)靜態(tài)編程語(yǔ)言程序員的提示:變量只需被賦予某一值。不需要聲明或定義數(shù)據(jù)類型。

物理行與邏輯行

? 在編輯器中看到的一行代碼就是物理行,Python所讀到的一個(gè)語(yǔ)句就是一個(gè)邏輯行。

? Python隱藏的期望是在一行中只寫一個(gè)語(yǔ)句,也就是盡量不要使用分號(hào)。

? 如果一行代碼實(shí)在是太長(zhǎng)了,可以使用反斜杠""將其拆分成多個(gè)物理行,這被稱作顯式行連接。

? 例如:

i=\ 5 #等價(jià)于 i=5

? 在某些情況下,會(huì)存在一個(gè)隱含的假設(shè),允許你不使用反斜杠。這一情況即邏輯行以括號(hào)開(kāi)始,它可以是方括號(hào)或花括號(hào),但不能是右括號(hào)。

縮進(jìn)

? 每個(gè)語(yǔ)句 前面的空白區(qū)就是縮進(jìn),空白區(qū)可以確定邏輯行的縮進(jìn)級(jí)別,而縮進(jìn)級(jí)別又可以用于確定語(yǔ)句的分組。

? 有一件事你需要記住:錯(cuò)誤的縮進(jìn)可能會(huì)導(dǎo)致錯(cuò)誤。

? Python官方的建議是使用四個(gè)空格來(lái)縮進(jìn)。

運(yùn)算符與表達(dá)式

? 表達(dá)式可以拆分成運(yùn)算符(Operators)與操作數(shù)(Operands)。

? 各個(gè)操作符的詳細(xì)信息參考《簡(jiǎn)明Python教程》的p45-46的運(yùn)算符的速覽。

? 基本的操作符都和Java的一樣,需要注意的是邏輯非用“not”、邏輯與用“and”、邏輯或用“or”。

數(shù)值運(yùn)算與賦值的快捷方式

? 其實(shí)就是Python的數(shù)值運(yùn)算支持乘賦“*=”等快捷操作。例如:

a=2 a=a*3 #等價(jià)于 a=2 a *= 3

求值順序

? Python中對(duì)于運(yùn)算符的優(yōu)先級(jí)也是有規(guī)定的,《簡(jiǎn)明Python教程》中有說(shuō)明,在P47頁(yè),也可以參考Python的手冊(cè)。最好是使用圓括號(hào)對(duì)運(yùn)算符和表達(dá)式進(jìn)行分組。

控制流

? 在Python中有三種控制流語(yǔ)句——if、for和while。

if 語(yǔ)句

示例:

number = 23 guess = int(input('Enter an integer : '))if guess == number : # 我們借助這個(gè)冒號(hào)向Python指定接下來(lái)會(huì)有一塊語(yǔ)句在后頭# 新塊從這里開(kāi)始print('Congratulations, you guessed it.')print('(but you do not win any prizes!)') elif guess < number :# 另一代碼塊print('No, it is a little higher than that ')# 你可以在此做任何你希望在改代碼塊內(nèi)進(jìn)行的事情 else :print('No, it is a little lower than that')# 你必須通過(guò)猜測(cè)一個(gè)大于(>)設(shè)置數(shù)的數(shù)字來(lái)到達(dá)這里。print('Done') # 這最后一句話將在 if 語(yǔ)句執(zhí)行完畢后執(zhí)行

輸出:

$ python if.py Enter an integer : 50 No, it is a little lower than that Done $ python if.py Enter an integer : 22 No, it is a little higher than that Done $ python if.py Enter an integer : 23 Congratulations, you guessed it. (but you do not win any prizes!) Done

針對(duì) C/C++ 程序員的提示
Python 中不存在 switch 語(yǔ)句。你可以通過(guò)使用 if…elif…else 語(yǔ)句來(lái)實(shí)現(xiàn)同樣的事情(在某些情況下,使用一部字典能夠更快速地完成)。

while 語(yǔ)句

? while語(yǔ)句是循環(huán)語(yǔ)句的一種。while語(yǔ)句同樣可以擁有else子句作為可選項(xiàng)。

number = 23 running = Truewhile running :guess = int(input('Enter an integer : '))if guess == number :print('Congratulations, you guessed it. ')# 這將導(dǎo)致while循環(huán)終止running = Falseelif guess < number :print('No, it is a little higher than that. ')else :print('No, it is a little lower than that. ') else : # 用冒號(hào)告訴Python下面有語(yǔ)句塊print('The while loop is over. ')# 在這里你可以做你想做的任何事情print('Done')

輸出:

$ python while.py Enter an integer : 50 No, it is a little lower than that. Enter an integer : 22 No, it is a little higher than that. Enter an integer : 23 Congratulations, you guessed it. The while loop is over. Done

? 如果 while 循環(huán)中存在一個(gè) else 代碼塊,它將總是被執(zhí)行,除非你通過(guò) break 語(yǔ)句來(lái)中斷這一循環(huán)。

針對(duì) C/C++ 程序員的提示
你可以在 while 循環(huán)中使用 else 從句。

for 循環(huán)

? for…in 語(yǔ)句是另一種循環(huán)語(yǔ)句,其特點(diǎn)是會(huì)在一系列對(duì)象上進(jìn)行迭代(Iterates),意即它會(huì)遍歷序列中的每一個(gè)項(xiàng)目。

案例:

for i in range(1, 5) :print(i) else:print('The for loop is over')

輸出:

$ python for.py 1 2 3 4 The for loop is over

? 要記住, else 部分是可選的。當(dāng)循環(huán)中包含他時(shí),它總會(huì)在 for 循環(huán)結(jié)束后開(kāi)始執(zhí)行,除非程序遇到了 break 語(yǔ)句。

break 語(yǔ)句

? break語(yǔ)句用以中斷循環(huán)語(yǔ)句,即使循環(huán)條件沒(méi)有變成False,也可以被終止。

? 需要注意的是,如果你中斷了一個(gè)For或while循環(huán),任何相應(yīng)循環(huán)中的else塊都將不會(huì)被執(zhí)行。

示例:

while True :s = input('Enter something : ')if s == 'quit' : #zhg: 注意字符串判斷相等的方式breakprint('Length of the string is', len(s)) print('Done')

輸出:

$ python break.py Enter something : Programming is fun Length of the string is 18 Enter something : When the work is done Length of the string is 21 Enter something : if you wanna make your work also fun: Length of the string is 37 Enter something : use Python! Length of the string is 11 Enter something : quit Done

? 記住, break 語(yǔ)句同樣可以適用于 for 循環(huán)。

Continue語(yǔ)句

? continue 語(yǔ)句用以告訴 Python 跳過(guò)當(dāng)前循環(huán)塊中的剩余語(yǔ)句,并繼續(xù)該循環(huán)的下一次迭代。

示例:

while True :s = input('Enter something : ')if s == 'quit' :breakif len(s) < 3 :print('Too small')continueprint('Input is of sufficient length')# 自此處起繼續(xù)進(jìn)行其它任何處理

輸出:

$ python continue.py Enter something : a Too small Enter something : 12 Too small Enter something : abc Input is of sufficient length Enter something : quit

? 要注意 continue 語(yǔ)句同樣能用于 for 循環(huán)。

函數(shù)

? 函數(shù)(Functions)是指可重復(fù)使用的程序片段。

? 函數(shù)可以通過(guò)關(guān)鍵字 def 來(lái)定義。這一關(guān)鍵字后跟一個(gè)函數(shù)的標(biāo)識(shí)符名稱,再跟一對(duì)圓括號(hào),其中可以包括一些變量的名稱,再以冒號(hào)結(jié)尾,結(jié)束這一行。隨后而來(lái)的語(yǔ)句塊是函數(shù)的一部分。下面的案例將會(huì)展示出這其實(shí)非常簡(jiǎn)單:

def say_hello() :# 該塊屬于這一函數(shù)print('hello world') # 函數(shù)結(jié)束say_hello() # 調(diào)用函數(shù) say_hello() # 再次調(diào)用函數(shù)

輸出:

$ python function1.py hello world hello world

函數(shù)參數(shù)

? 函數(shù)的參數(shù)就是定義在那個(gè)圓括號(hào)中變量,通過(guò)它們可以向函數(shù)傳遞信息。

? 在定義函數(shù)時(shí)給定的名稱稱作“形參”(Parameters),在調(diào)用函數(shù)時(shí)你所提供給函數(shù)的值稱作“實(shí)參”(Arguments)。
? 案例:

def print_max(a, b) :if a > b :print(a, 'is maximum')elif a == b :print(a, 'is equal to', b)else :print(b, 'is maximum')#直接傳遞字面值 print_max(3,4)x=5 y=7# 以參數(shù)的形式傳遞變量 print_max(x, y)

輸出:

$ python function_param.py 4 is maximum 7 is maximum

局部變量

? 在函數(shù)定義中聲明的變量就是局部變量,它們不會(huì)以任何形式與函數(shù)外的同名變量發(fā)生聯(lián)系。

? 所有變量的作用域是它們被定義的塊,從定義它們的名字的定義點(diǎn)開(kāi)始。

? 示例:

x = 50def func(x) :print('x is', x)x = 2print('changed local x to', x)func(x) print('x is still', x)

輸出:

$ python function_local.py x is 50 Changed local x to 2 x is still 50

zhg: python的函數(shù)也是遵從值傳遞規(guī)則,即傳遞給函數(shù)參數(shù)的是值,而不是地址。

global 語(yǔ)句

? 使用global語(yǔ)句可以使用并更改函數(shù)之外的變量的值。

? 案例:

x = 50def func() :global xprint('x is', x)x = 2print('changed global x to', x)func() print('value of x is', x)

輸出:

$ python function_global.py x is 50 Changed global x to 2 Value of x is 2

? global 語(yǔ)句用以聲明 x 是一個(gè)全局變量——因此,當(dāng)我們?cè)诤瘮?shù)中為 x 進(jìn)行賦值時(shí),這一改動(dòng)將影響到我們?cè)谥鞔a塊中使用的 x 的值。

? 你可以在同一句 global 語(yǔ)句中指定不止一個(gè)的全局變量,例如 global x, y, z 。

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

? 你可以通過(guò)在函數(shù)定義時(shí)附加一個(gè)賦值運(yùn)算符( = )來(lái)為參數(shù)指定默認(rèn)參數(shù)值。

? 默認(rèn)參數(shù)值應(yīng)該是常量,即是不可變的。

? 示例:

def say(message, times=1):print(message * times)say('Hello') say('World', 5)

輸出:

$ python function_default.py Hello WorldWorldWorldWorldWorld

注意
只有那些位于參數(shù)列表末尾的參數(shù)才能被賦予默認(rèn)參數(shù)值,意即在函數(shù)的參數(shù)列表中擁
有默認(rèn)參數(shù)值的參數(shù)不能位于沒(méi)有默認(rèn)參數(shù)值的參數(shù)之前。
這是因?yàn)橹凳前磪?shù)所處的位置依次分配的。舉例來(lái)說(shuō), def func(a, b=5) 是有效的,
但 def func(a=5, b) 是無(wú)效的。

關(guān)鍵字參數(shù)

? 可以通過(guò)命名的防止給制定參數(shù)賦值。

? 示例:

def func(a, b=5, c=10):print('a is', a, 'and b is', b, 'and c is', c)func(3, 7) func(25, c=24) func(c=50, a=100)

? 輸出:

$ python function_keyword.py a is 3 and b is 7 and c is 10 a is 25 and b is 5 and c is 24 a is 100 and b is 5 and c is 50

可變參數(shù)

? 可以通過(guò)星號(hào)來(lái)實(shí)現(xiàn)任意數(shù)量的變量

? 示例:

def total(a=5, *numbers, **phonebook):print('a', a)#遍歷元組中的所有項(xiàng)目for single_item in numbers :print('single_item', single_item)#遍歷字典中的所有項(xiàng)目for first_part, second_part in phonebook.items() :print(first_part, second_part)print(total(10, 1, 2, 3, Jack=1123, John=2231, Inge=1560))

? 輸出:

$ python function_varargs.py a 10 single_item 1 single_item 2 single_item 3 Inge 1560 John 2231 Jack 1123 None

? 當(dāng)我們聲明一個(gè)諸如 *param 的星號(hào)參數(shù)時(shí),從此處開(kāi)始直到結(jié)束的所有位置參數(shù)(Positional Arguments)都將被收集并匯集成一個(gè)稱為“param”的元組(Tuple)。

? 類似地,當(dāng)我們聲明一個(gè)諸如 **param 的雙星號(hào)參數(shù)時(shí),從此處開(kāi)始直至結(jié)束的所有關(guān)鍵字參數(shù)都將被收集并匯集成一個(gè)名為 param 的字典(Dictionary)。

return 語(yǔ)句

? return語(yǔ)句用于在函數(shù)中返回,我們可以選擇從函數(shù)中返回一個(gè)值。

? 示例:

def maximum(x, y):if x > y :return xelif x == y :return 'The numbers are equal'else :return yprint(maximum(2, 3))

? 輸出:

$ python function_return.py 3

? 如果return語(yǔ)句沒(méi)有搭配任何一個(gè)值,則代表返回None。None在Python中是一個(gè)特殊的類型,代表著虛無(wú)。

? 每一個(gè)函數(shù)都在其末尾隱含了一句 return None ,除非你寫了你自己的 return 語(yǔ)句。你可以運(yùn)行 print(some_function()) ,其中 some_function 函數(shù)不使用 return 語(yǔ)句,就像這樣:

def some_function(): pass

? Python 中的 pass 語(yǔ)句用于指示一個(gè)沒(méi)有內(nèi)容的語(yǔ)句塊。

提示:有一個(gè)名為 max 的內(nèi)置函數(shù)已經(jīng)實(shí)現(xiàn)了“找到最大數(shù)”這一功能,所以盡可能地使
用這一內(nèi)置函數(shù)。

DocStrings

? 文檔字符串就是對(duì)函數(shù)的一個(gè)說(shuō)明,其實(shí)和Java的類似,就是位置和規(guī)范不同。

? 示例:

def print_max(x, y) :'''打印兩個(gè)數(shù)值中的最大數(shù)這兩個(gè)數(shù)都應(yīng)該是整數(shù)'''# 如果可能,將其轉(zhuǎn)換成整數(shù)類型x = int(x)y = int(y)if x > y :print(x, 'is maximum')else :print(y, 'is maximum')print_max(3, 5) print(print_max.__doc__)

? 輸出:

$ python function_docstring.py 5 is maximum 打印兩個(gè)數(shù)值中的最大數(shù)。這兩個(gè)數(shù)都應(yīng)該是整數(shù)

? 函數(shù)的第一行邏輯行中的字符串是該函數(shù)的 文檔字符串(DocString)。

? 該文檔字符串所約定的是一串多行字符串,其中第一行以某一大寫字母開(kāi)始,以句號(hào)結(jié)束。第二行為空行,后跟的第三行開(kāi)始是任何詳細(xì)的解釋說(shuō)明。在此強(qiáng)烈建議你在你所有重要功能的所有文檔字符串中都遵循這一約定。

? 我們可以通過(guò)使用函數(shù)的 doc (注意其中的雙下劃綫)屬性(屬于函數(shù)的名稱)來(lái)獲取函數(shù) print_max 的文檔字符串屬性。Python將所有東西都視為一個(gè)對(duì)象,其中包括函數(shù)。

? help()函數(shù)所做的便是獲取函數(shù)的 doc 屬性并以一種整潔的方式將其呈現(xiàn)給你。

? Python發(fā)行版中附帶的pydoc 命令與 help() 使用文檔字符串的方式類似。

模塊

? 模塊就是在不同程序間復(fù)用代碼的手段。

? 編寫模塊有很多種方法,其中最簡(jiǎn)單的一種便是創(chuàng)建一個(gè)包含函數(shù)與變量、以 .py 為后綴的文件。
? 另一種方法是使用撰寫 Python 解釋器本身的本地語(yǔ)言來(lái)編寫模塊。

? 一個(gè)模塊可以被其它程序?qū)氩⑦\(yùn)用其功能。

? 案例:

import sysprint('The command line arguments are:') for i in sys.argv:print(i)print('\n\nThe PYTHONPATH is', sys.path, '\n')

? 輸出:

$ python module_using_sys.py we are arguments The command line arguments are: module_using_sys.py we are argumentsThe PYTHONPATH is ['/tmp/py', # many entries here, not shown here '/Library/Python/2.7/site-packages', '/usr/local/lib/python2.7/site-packages']

需要注意的是,運(yùn)行的腳本名稱在 sys.argv 的列表中總會(huì)位列第一。

按字節(jié)碼編譯的 .pyc 文件

? 可以將Python文件按字節(jié)編譯成中間文件,這樣有利于模塊的加載速度。

from…import語(yǔ)句

? from…import語(yǔ)句可以避免每次使用argv時(shí)都要輸入"sys.",即使用from sys import argv 語(yǔ)句來(lái)實(shí)現(xiàn)這一點(diǎn)。

? 示例:

from math import sqrt print("Square root of 16 is", sqrt(16))

模塊的__name__

? 每個(gè)模塊都有一個(gè)名稱,可以通過(guò)模塊的名稱來(lái)確定它是獨(dú)立運(yùn)行的還是被導(dǎo)入進(jìn)來(lái)的,這可以通過(guò)使用模塊的__name__ 屬性來(lái)實(shí)現(xiàn)。。

? 案例:

if __name__ == '__main__' :print('This program is being run by itself') else:print('I am being imported from another module')

? 輸出:

$ python module_using_name.py This program is being run by itself $ python >>> import module_using_name I am being imported from another module >>>

? 每一個(gè) Python 模塊都定義了它的 name 屬性。如果它與 main 屬性相同則代表這一模塊是由用戶獨(dú)立運(yùn)行的。

編寫你自己的模塊

? 每一個(gè) Python 程序同時(shí)也是一個(gè)模塊。你只需要保證它以 .py 為擴(kuò)展名即可。

? 案例:

def say_hi():print('Hi, this is mymodule speaking.')__version__ = '0.1'

? 注意:自己定義的模塊要放在要導(dǎo)入該模塊的程序的所在目錄,或者在sys.path所列出的某個(gè)目錄下。

? 另一個(gè)模塊:

import mymodulemymodule.say_hi() print('Version', mymodule.__version__)

? 輸出:

$ python mymodule_demo.py Hi, this is mymodule speaking. Version 0.1

? 下面是一個(gè)使用 from…import 語(yǔ)法的范本:

from mymodule import say_hi, __version__say_hi() print('Version', __version__)

? 你還可以使用:

from mymodule import *

? 這將導(dǎo)入諸如 say_hi 等所有公共名稱,但不會(huì)導(dǎo)入 __version__ 名稱,因?yàn)楹笳咭噪p下劃線開(kāi)頭。

? 警告:盡量不要使用from…import形式,容易引起變量名沖突。

dir 函數(shù)

? 內(nèi)置的 dir() 函數(shù)能夠返回由對(duì)象所定義的名稱列表。

? 該函數(shù)接受參數(shù)。 如果參數(shù)是模塊名稱,函數(shù)將返回這一指定模塊的名稱列表。 如果沒(méi)有提供參數(shù),函數(shù)將返回當(dāng)前模塊的名稱列表。

案例:

$ python >>> import sys # 給出 sys 模塊中的屬性名稱 >>> dir(sys) ['__displayhook__', '__doc__', 'argv', 'builtin_module_names', 'version', 'version_info'] # 此處只展示部分條目 # 給出當(dāng)前模塊的屬性名稱 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__','sys'] # 創(chuàng)建一個(gè)新的變量 'a' >>> a = 5 >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'a'] # 刪除或移除一個(gè)名稱 >>> del a >>> dir() ['__builtins__', '__doc__', '__name__','__package__']

? 關(guān)于 del 的一個(gè)小小提示——這一語(yǔ)句用于刪除一個(gè)變量或名稱,當(dāng)這一語(yǔ)句運(yùn)行后,在本例中即 del a ,你便不再能訪問(wèn)變量 a ——它將如同從未存在過(guò)一般。

? 包是指一個(gè)包含模塊與一個(gè)特殊的 __init__.py 文件的文件夾,后者向 Python 表明這一文件夾是特別的,因?yàn)槠浒?Python 模塊。

? 讓我們這樣設(shè)想:你想創(chuàng)建一個(gè)名為“world”的包,其中還包含著 “asia”、“africa”等其它子包,同時(shí)這些子包都包含了諸如“india”、 “madagascar”等模塊。

? 下面是你會(huì)構(gòu)建出的文件夾的結(jié)構(gòu):

- <some folder present in the sys.path>/- world/- __init__.py- asia/- __init__.py- india/- __init__.py- foo.py- africa/- __init__.py- madagascar/- __init__.py- bar.py

? 包是一種能夠方便地分層組織模塊的方式。你將在 標(biāo)準(zhǔn)庫(kù) 中看到許多有關(guān)于此的實(shí)例。

總結(jié)

? 如同函數(shù)是程序中的可重用部分那般,模塊是一種可重用的程序。包是用以組織模塊的另一種層次結(jié)構(gòu)。Python 所附帶的標(biāo)準(zhǔn)庫(kù)就是這樣一組有關(guān)包與模塊的例子。

數(shù)據(jù)結(jié)構(gòu)

? 數(shù)據(jù)結(jié)構(gòu)是用來(lái)存儲(chǔ)一系列相關(guān)數(shù)據(jù)的集合。

? Python 中有四種內(nèi)置的數(shù)據(jù)結(jié)構(gòu)——列表(List)、元組(Tuple)、字典(Dictionary)和集合(Set)。

列表

? 列表 是一種用于保存一系列有序項(xiàng)目的集合。項(xiàng)目的列表應(yīng)該用方括號(hào)括起來(lái),這樣 Python 才能理解到你正在指定一張列表。

? 列表對(duì)應(yīng)的類型是list

? 示例:

# This is my shopping list shoplist = ['apple', 'mango', 'carrot', 'banana']print('I have', len(shoplist), 'item to purchase.')print('These items are:', end=' ') for item in shoplist :print(item, end=' ')print('\nI also have to buy rice.') shoplist.append('rice') print('My shopping list is now', shoplist)print('I will sort my list now') shoplist.sort() print('Sorted shopping list is', shoplist)print('The first item I will buy is', shoplist[0]) olditem = shoplist[0] del shoplist[0] print('I bought the', olditem) print('My shopping list is now', shoplist)

? 輸出:

$ python ds_using_list.py I have 4 items to purchase. These items are: apple mango carrot banana I also have to buy rice. My shopping list is now ['apple', 'mango', 'carrot', 'banana', 'rice'] I will sort my list now Sorted shopping list is ['apple', 'banana', 'carrot', 'mango', 'rice'] The first item I will buy is apple I bought the apple My shopping list is now ['banana', 'carrot', 'mango', 'rice']

元組

? 元組(Tuple)用于將多個(gè)對(duì)象保存到一起。元組的一大特征類似于字符串,它們是不可變的,也就是說(shuō),你不能編輯或更改元組。

? 元組對(duì)應(yīng)的類型是tuple

? 案例:

# 我會(huì)推薦你總是使用括號(hào) # 來(lái)指明元組的開(kāi)始與結(jié)束 # 盡管括號(hào)是一個(gè)可選選項(xiàng)。 # 明了勝過(guò)晦澀,顯式優(yōu)于隱式。 zoo = ('python', 'elephant', 'penguin') print('Number of animals in the zoo is', len(zoo))new_zoo = 'monkey', 'camel', zoo print('Number of cages in the new zoo is', len(new_zoo)) print('All animals in new zoo are', new_zoo) print('Animals brought from old zoo are', new_zoo[2]) print('Last animal brought from old zoo is', new_zoo[2][2]) print('Number of animals in the new zoo is',len(new_zoo)-1+len(new_zoo[2]))

? 輸出:

$ python ds_using_tuple.py Number of animals in the zoo is 3 Number of cages in the new zoo is 3 All animals in new zoo are ('monkey', 'camel', ('python', 'elephant', 'penguin')) Animals brought from old zoo are ('python', 'elephant', 'penguin') Last animal brought from old zoo is penguin Number of animals in the new zoo is 5

包含 0 或 1 個(gè)項(xiàng)目的元組
一個(gè)空的元組由一對(duì)圓括號(hào)構(gòu)成,就像 myempty = () 這樣。然而,一個(gè)只擁有一個(gè)項(xiàng)目的元組并不像這樣簡(jiǎn)單。你必須在第一個(gè)(也是唯一一個(gè))項(xiàng)目的后面加上一個(gè)逗號(hào)來(lái)指定它,如此一來(lái) Python 才可以識(shí)別出在這個(gè)表達(dá)式想表達(dá)的究竟是一個(gè)元組還是只是一個(gè)被括號(hào)所環(huán)繞的對(duì)象,也就是說(shuō),如果你想指定一個(gè)包含項(xiàng)目 2 的元組,你必須指定 singleton = (2, ) 。

字典

? 字典其實(shí)就是一個(gè)映射。在字典中鍵不能重復(fù),并且鍵必須是不可變的對(duì)象,而對(duì)應(yīng)的值可以是可變的或不可變的。

? 另外需要記住,字典中的成對(duì)的鍵—值配對(duì)不會(huì)以任何方式進(jìn)行排序。

? 下面使用的字典是屬于dict類下的實(shí)例或?qū)ο蟆?/p> # “ab”是地址(Address)簿(Book)的縮寫ab = {'Swaroop':'swaroop@swaroopch.com','Larry' : 'larry@qq.com','Matsumoto':'matz@163.com','Spammer':'spammer@hotmail.com' }print("Swaroop's address is", ab['Swaroop'])# 刪除一對(duì)鍵值—值配對(duì) del ab['Spammer']print('\nThere are {} contacts in the address-book\n'.format(len(ab)))for name, address in ab.items() :print('Contact {} at {} '.format(name, address))# 添加一堆鍵——值配對(duì) ab['Guido']='guido@python.org'if 'Guido' in ab :print("\nGuido's address is", ab['Guido'])

? 輸出:

$ python ds_using_dict.py Swaroop's address is swaroop@swaroopch.comThere are 3 contacts in the address-bookContact Swaroop at swaroop@swaroopch.com Contact Matsumoto at matz@ruby-lang.org Contact Larry at larry@wall.orgGuido's address is guido@python.org

序列

? 序列的主要功能就是判斷是否存在和索引操作。

? 列表、元組和字符串都是序列,它們都擁有切片操作。切片操作可以獲取序列中的一部分。

? 案例:

shoplist = ['apple', 'mango', 'carrot', 'banana'] name = 'swaroop'# Indexing or 'Subscription' operation # # 索引或“下標(biāo)(Subscription)”操作符 # print('Item 0 is', shoplist[0]) print('Item 1 is', shoplist[1]) print('Item 2 is', shoplist[2]) print('Item 3 is', shoplist[3]) print('Item -1 is', shoplist[-1]) print('Item -2 is', shoplist[-2]) print('Character 0 is', name[0])# Slicing on a list # print('Item 1 to 3 is', shoplist[1:3]) print('Item 2 to end is', shoplist[2:]) print('Item 1 to -1 is', shoplist[1:-1]) print('Item start to end is', shoplist[:])# 從某一字符串中切片 # print('characters 1 to 3 is', name[1:3]) print('characters 2 to end is', name[2:]) print('characters 1 to -1 is', name[1:-1]) print('characters start to end is', name[:])

? 輸出:

$ python ds_seq.py Item 0 is apple Item 1 is mango Item 2 is carrot Item 3 is banana Item -1 is banana Item -2 is carrot Character 0 is s Item 1 to 3 is ['mango', 'carrot'] Item 2 to end is ['carrot', 'banana'] Item 1 to -1 is ['mango', 'carrot'] Item start to end is ['apple', 'mango', 'carrot', 'banana'] characters 1 to 3 is wa characters 2 to end is aroop characters 1 to -1 is waroo characters start to end is swaroop

? 切片時(shí)可以提供第三個(gè)數(shù)字,這數(shù)字就是步長(zhǎng),如果不提供的話就默認(rèn)為1。

? 案例:

>>> shoplist = ['apple', 'mango', 'carrot', 'banana'] >>> shoplist[::1] ['apple', 'mango', 'carrot', 'banana'] >>> shoplist[::2] ['apple', 'carrot'] >>> shoplist[::3] ['apple', 'banana'] >>> shoplist[::-1] ['banana', 'carrot', 'mango', 'apple']

? 你會(huì)注意到當(dāng)步長(zhǎng)為 2 時(shí),我們得到的是第 0、2、4…… 位項(xiàng)目。當(dāng)步長(zhǎng)為 3 時(shí),我們得到的是第 0、3……位項(xiàng)目。

集合

? 集合(Set)是簡(jiǎn)單對(duì)象的無(wú)序集合(Collection)。集合中元素?zé)o序且唯一,集合主要是用來(lái)測(cè)試項(xiàng)目是否存在,子集判斷和交集運(yùn)算等。

? 案例:

>>> bri = set(['brazil', 'russia', 'india']) >>> 'india' in bri True >>> 'usa' in bri False >>> bric = bri.copy() >>> bric.add('china') >>> bric.issuperset(bri) True >>> bri.remove('russia') >>> bri & bric # OR bri.intersection(bric) {'brazil', 'india'}

引用

? 就是將一個(gè)變量綁定到一個(gè)對(duì)象。這個(gè)變量不是代表那個(gè)對(duì)象本身,只是指向了內(nèi)存中存儲(chǔ)相應(yīng)對(duì)象的那一部分。

? 案例:

print('Simple Assignment') shoplist = ['apple', 'mango', 'carrot', 'banana'] # mylist 只是指向同一對(duì)象的另一種名稱 mylist = shoplist# 我購(gòu)買了第一項(xiàng)項(xiàng)目,所以我將其從列表中刪除 del shoplist[0]print('shoplist is', shoplist) print('mylist is', mylist) # 注意到 shoplist 和 mylist 二者都 # 打印出了其中都沒(méi)有 apple 的同樣的列表,以此我們確認(rèn) # 它們指向的是同一個(gè)對(duì)象print('Copy by making a full slice') # 通過(guò)生成一份完整的切片制作一份列表的副本 mylist = shoplist[:] # 刪除第一個(gè)項(xiàng)目 del mylist[0]print('shoplist is', shoplist) print('mylist is', mylist)

? 輸出:

$ python ds_reference.py Simple Assignment shoplist is ['mango', 'carrot', 'banana'] mylist is ['mango', 'carrot', 'banana'] Copy by making a full slice shoplist is ['mango', 'carrot', 'banana'] mylist is ['carrot', 'banana']

有關(guān)字符串的更多內(nèi)容

? 你在程序中使用的所有字符串都是 str 類下的對(duì)象。可以查閱help(str)獲得更多關(guān)于字符串的信息。

? 案例:

# 這是一個(gè)字符串對(duì)象 name = 'Swaroop'if name.startswith('Swa') :print('Yes, the string starts with "Swa"')if 'a' in name :print('Yes, it contains the string "a"')if name.find('war') != -1 :print('Yes, it contains the string "war"')delimiter = '_*_' mylist = ['Brazil', 'Russia', 'India', 'China'] print(delimiter.join(mylist))

? 輸出:

$ python ds_str_methods.py Yes, the string starts with "Swa" Yes, it contains the string "a" Yes, it contains the string "war" Brazil_*_Russia_*_India_*_China

? startswith 方法用于查找字符串是否以給定的字符串內(nèi)容開(kāi)頭。 in 運(yùn)算符用以檢查給定的字符串是否是查詢的字符串中的一部分。
? find 方法用于定位字符串中給定的子字符串的位置。如果找不到相應(yīng)的子字符串, find會(huì)返回 -1。 str 類同樣還擁有一個(gè)簡(jiǎn)潔的方法用以 聯(lián)結(jié)(Join) 序列中的項(xiàng)目,其中字符串將會(huì)作為每一項(xiàng)目之間的分隔符,并以此生成并返回一串更大的字符串。

解決問(wèn)題

待解決的問(wèn)題:

我想要一款程序來(lái)備份我所有的重要文件。

《簡(jiǎn)明Python教程》解決問(wèn)題的方式:

  • 先分析問(wèn)題,提出一些需要解決的問(wèn)題。

  • 設(shè)計(jì)穩(wěn)定的方案,確定步驟

  • 進(jìn)行編碼實(shí)現(xiàn)

  • 進(jìn)行測(cè)試

  • 解決方案:

    import os import time# 1. 需要備份的文件與目錄將被 # 指定在一個(gè)列表中。 # 例如在 Windows 下: # source = ['"C:\\My Documents"', 'C:\\Code'] # 又例如在 Mac OS X 與 Linux 下: source = ['/Users/swa/notes'] # 在這里要注意到我們必須在字符串中使用雙引號(hào) # 用以括起其中包含空格的名稱。#2. 備份文件必須存儲(chǔ)在一個(gè) #主備份目錄中 #例如在 Windows 下: # target_dir = 'E:\\Backup' # 又例如在 Mac OS X 和 Linux 下: target_dir = '/Users/swa/backup' # 要記得將這里的目錄地址修改至你將使用的路徑# 3. 備份文件將打包壓縮成 zip 文件。 # 4. zip 壓縮文件的文件名由當(dāng)前日期與時(shí)間構(gòu)成。 target = target_dir + os.sep + \ time.strftime('%Y%m%d%H%M%S') + '.zip'# 如果目標(biāo)目錄還不存在,則進(jìn)行創(chuàng)建 if not os.path.exists(target_dir): os.mkdir(target_dir) # 創(chuàng)建目錄# 5. 我們使用 zip 命令將文件打包成 zip 格式 zip_command = 'zip -r {0} {1}'.format(target, ' '.join(source))# 運(yùn)行備份 print('Zip command is:') print(zip_command) print('Running:') if os.system(zip_command) == 0: print('Successful backup to', target) else: print('Backup FAILED')

    ? 輸出:

    $ python backup_ver1.py Zip command is: zip -r /Users/swa/backup/20140328084844.zip /Users/swa/notes Running: adding: Users/swa/notes/ (stored 0%) adding: Users/swa/notes/blah1.txt (stored 0%) adding: Users/swa/notes/blah2.txt (stored 0%) adding: Users/swa/notes/blah3.txt (stored 0%) Successful backup to /Users/swa/backup/20140328084844.zip

    針對(duì) Windows 用戶的提示
    除了使用雙反斜杠轉(zhuǎn)義序列,你還可以使用原始字符串。例如使用 ‘C:\Documents’ 或
    r’C:\Documents’ 。然而,不要使用 ‘C:\Documents’ ,因?yàn)樗鼘⒈蛔R(shí)別為你使用了一個(gè)
    未知的轉(zhuǎn)義序列 \D 來(lái)結(jié)束路徑的輸入。

    可以對(duì)上述的程序持續(xù)的改進(jìn),參照《簡(jiǎn)明Python教程》的P94.

    軟件開(kāi)發(fā)流程

    ? 我們已經(jīng)經(jīng)歷了開(kāi)發(fā)一款軟件的流程中的各個(gè) 階段(Phases) 。現(xiàn)在可以將這些階段總結(jié)如下:

  • What/做什么(分析)
  • How/怎么做(設(shè)計(jì))
  • Do It/開(kāi)始做(執(zhí)行)
  • Test/測(cè)試(測(cè)試與修復(fù)錯(cuò)誤)
  • Use/使用(操作或開(kāi)發(fā))
  • Maintain/維護(hù)(改進(jìn))
  • ? 編寫程序時(shí)推薦的一種方式是遵循我們?cè)诰帉憘浞菽_本時(shí)所經(jīng)歷的步驟:進(jìn)行分析與設(shè)計(jì);開(kāi)始實(shí)現(xiàn)一個(gè)簡(jiǎn)單版本;測(cè)試并修復(fù)錯(cuò)誤;開(kāi)始使用以確保工作狀況皆如期望那般。現(xiàn)在,你可以添加任何你所希望擁有的功能,并繼續(xù)去重復(fù)這一“開(kāi)始做—測(cè)試—使用”循環(huán),需要做多少次就去做多少次。

    要記住:

    程序是成長(zhǎng)起來(lái)的,不是搭建出來(lái)的。 (Software is grown, not built.) ——Bill dehóra

    zhg: 這一章節(jié)非常的重要,強(qiáng)烈建議看一下《簡(jiǎn)明Python教程》的“解決問(wèn)題”章節(jié)。

    面向?qū)ο缶幊?/h2>

    ? 類與對(duì)象是面向?qū)ο缶幊痰膬蓚€(gè)主要方面。一個(gè)類(Class)能夠創(chuàng)建一種新的類型(Type),其中對(duì)象(Object)就是類的實(shí)例(Instance)。可以這樣來(lái)類比:你可以擁有類型 int 的變量,也就是說(shuō)存儲(chǔ)整數(shù)的變量是 int 類的實(shí)例(對(duì)象)。

    ? 需要注意的是:在Python中int也是一個(gè)類型,整數(shù)也會(huì)被視為對(duì)象。

    ? 在對(duì)象中存儲(chǔ)數(shù)據(jù)的普通變量稱作“字段”。對(duì)象可以調(diào)用類的函數(shù)來(lái)實(shí)現(xiàn)功能,這些函數(shù)叫做“方法”。

    ? 總之,字段與方法通稱類的屬性(Attribute)。

    ? 字段有兩種類型——它們屬于某一類的各個(gè)實(shí)例或?qū)ο?#xff0c;或是從屬于某一類本身。它們被分別稱作實(shí)例變量(Instance Variables)與類變量(Class Variables)。

    ? 通過(guò) class 關(guān)鍵字可以創(chuàng)建一個(gè)類。這個(gè)類的字段與方法可以在縮進(jìn)代碼塊中予以列出。

    self

    ? 類方法與普通函數(shù)只有一種特定的區(qū)別——前者必須多加一個(gè)參數(shù)在參數(shù)列表開(kāi)頭,這個(gè)名字必須添加到參數(shù)列表的開(kāi)頭,但是你不用在你調(diào)用這個(gè)功能時(shí)為這個(gè)參數(shù)賦值,Python 會(huì)為它提供。這種特定的變量引用的是對(duì)象本身,按照慣例,它被賦予 self 這一名稱。

    ? 上述參數(shù)也可以指定為其他的名稱,但是強(qiáng)烈建議使用self,方便其他人識(shí)別,也有利于IDE提供編程提示。

    ? 你一定會(huì)在想 Python 是如何給 self 賦值的,以及為什么你不必給它一個(gè)值。一個(gè)例子或許會(huì)讓這些疑問(wèn)得到解答。假設(shè)你有一個(gè) MyClass 的類,這個(gè)類下有一個(gè)實(shí)例 myobject 。當(dāng)你調(diào)用一個(gè)這個(gè)對(duì)象的方法,如 myobject.method(arg1, arg2) 時(shí),Python 將會(huì)自動(dòng)將其轉(zhuǎn)換成 MyClass.method(myobject, arg1, arg2) ——這就是 self 的全部特殊之處所在。

    ? 這同時(shí)意味著,如果你有一個(gè)沒(méi)有參數(shù)的方法,你依舊必須擁有一個(gè)參數(shù)—— self 。

    ? 最簡(jiǎn)單的類如下:

    class Person:pass # 一個(gè)空的代碼塊p = Person() print(p)

    ? 輸出:

    $ python oop_simplestclass.py <__main__.Person instance at 0x10171f518>

    方法

    ? 類和對(duì)象都可以帶有方法,但是需要多一個(gè)額外的參數(shù)。

    ? 案例:

    class Person:def say_hi(self):print('Hello, how are you?')p = Person() p.say_hi() # 前面兩行同樣可以寫作 # Person().say_hi()

    ? 輸出:

    $ python oop_method.py Hello, how are you?

    ? 要注意到 say_hi 這一方法不需要參數(shù),但是依舊在函數(shù)定義中擁有 self 變量。

    __init__方法

    ? 這個(gè)方法會(huì)在對(duì)象被示例化的時(shí)候被調(diào)用,其實(shí)就相當(dāng)于是構(gòu)造函數(shù)。

    ? 案例:

    class Person:def __init__(self, name):self.name = namedef say_hi(self):print('Hello, my name is', self.name)p = Person('Swaroop') p.say_hi() # 前面兩行同時(shí)也能寫作 # Person('Swaroop').say_hi()

    ? 輸出:

    $ python oop_init.py Hello, my name is Swaroop

    ? self.name 中的點(diǎn)號(hào)意味著這個(gè)叫作“name”的東西是某個(gè)叫作“self”的對(duì)象的一部分,而另一個(gè) name 則是一個(gè)局部變量。

    ? zhg: 注意上面這個(gè)案例中創(chuàng)建對(duì)象字段的方式,根本就沒(méi)先定義,而是直接就開(kāi)始賦值了。

    類變量與對(duì)象變量

    ? 數(shù)據(jù)部分——也就是字段——只不過(guò)是綁定(Bound)到類與對(duì)象的命名空間(Namespace)的普通變量。這些名稱僅在這些類與對(duì)象所在的上下文中有效,這就是它們被稱作“命名空間”的原因。

    ? 字段有兩種類型——類變量和對(duì)象變量。

    ? 類變量是屬于類的,所有類的實(shí)例可以共享這個(gè)變量,類變量只有一個(gè)副本,當(dāng)一個(gè)類的實(shí)例對(duì)類變量進(jìn)行改變時(shí),其他的實(shí)例都可以看到這種改變。

    ? 對(duì)象變量是屬于實(shí)例或?qū)ο蟮?#xff0c;每個(gè)實(shí)例都會(huì)有對(duì)象變量的一個(gè)單獨(dú)副本,在一個(gè)實(shí)例中對(duì)對(duì)象變量進(jìn)行改變時(shí),其他實(shí)例中的同名對(duì)象變量不會(huì)有任何的變化。

    ? 案例:

    # coding=UTF-8 class Robot:"""表示有一個(gè)帶名字的機(jī)器人"""# 一個(gè)類變量, 用來(lái)計(jì)數(shù)機(jī)器人的數(shù)量population = 0def __init__(self, name):"""初始化數(shù)據(jù)"""self.name = nameprint("(Initializing {})".format(self.name))# 當(dāng)有人被創(chuàng)建時(shí),機(jī)器人# 將會(huì)增加人口數(shù)量Robot.population += 1def die(self):"""我掛了"""print("{} is being destroyed!".format(self.name))Robot.population -= 1if Robot.population == 0:print("{} was the last one.".format(self.name))else:print("There are still {:d} robots working.".format(Robot.population))def say_hi(self):"""來(lái)自機(jī)器人的誠(chéng)摯問(wèn)候沒(méi)問(wèn)題,你做得到。"""print("Greetings, my masters call me {}.".format(self.name))@classmethoddef how_many(cls):"""打印出當(dāng)前的人口數(shù)量"""print("We have {:d} robots.".format(cls.population))droid1 = Robot("R2-D2") droid1.say_hi() Robot.how_many()droid2 = Robot("C-3P0") droid2.say_hi() Robot.how_many()print("\nRobots can do some work here.\n")print("Robots have finished their work. So let's destroy them.") droid1.die() droid2.die()Robot.how_many()

    ? 輸出:

    $ python oop_objvar.py (Initializing R2-D2) Greetings, my masters call me R2-D2. We have 1 robots. (Initializing C-3PO) Greetings, my masters call me C-3PO. We have 2 robots.Robots can do some work here.Robots have finished their work. So let's destroy them. R2-D2 is being destroyed! There are still 1 robots working. C-3PO is being destroyed! C-3PO was the last one. We have 0 robots.

    ? 除了 Robot.popluation ,我們還可以使用 self.__class__.population ,因?yàn)槊總€(gè)對(duì)象都通過(guò)
    self.__class__ 屬性來(lái)引用它的類。

    ? 我們使用裝飾器(Decorator)將 how_many 方法標(biāo)記為類方法。

    ? 你可以將裝飾器想象為調(diào)用一個(gè)包裝器(Wrapper)函數(shù)的快捷方式,因此啟用@classmethod 裝飾器等價(jià)于調(diào)用:

    how_many = classmethod(how_many)

    ? 你需要記住你只能使用 self 來(lái)引用同一對(duì)象的變量與方法。這被稱作屬性引用(Attribute Reference)。

    ? 所有的類成員都是公開(kāi)的,但是如果使用雙下劃線作為名稱前綴,例如__privatevar,那么Python 會(huì)使用名稱調(diào)整(Namemangling)來(lái)使其有效地成為一個(gè)私有變量。

    針對(duì) C++/Java/C# 程序員的提示
    所有類成員(包括數(shù)據(jù)成員)都是公開(kāi)的,并且 Python 中所有的方法都是虛擬的(Virtual)。

    繼承

    ? 面向?qū)ο缶幊痰囊淮髢?yōu)點(diǎn)是對(duì)代碼的重用(Reuse),重用的一種實(shí)現(xiàn)方法就是通過(guò)繼承(Inheritance)機(jī)制。繼承最好是想象成在類之間實(shí)現(xiàn)類型與子類型(Type and Subtype)關(guān)系的工具。

    ? 對(duì)于基類的改動(dòng)會(huì)自動(dòng)反映到子類型中。在某些情況下可以將子類型對(duì)象看作是基類對(duì)象,這叫做多態(tài)性。

    ? 案例:

    # coding=UTF-8class SchoolMember:'''代表任何學(xué)校里的成員'''def __init__(self, name, age):self.name = nameself.age = ageprint('(Initialized SchoolMember: {})'.format(self.name))def tell(self):'''告訴我有關(guān)我的細(xì)節(jié)'''print('Name:"{}" Age:"{}"'.format(self.name, self.age), end=" ")class Teacher(SchoolMember) :'''代表一位老師。'''def __init__(self, name, age, salary):SchoolMember.__init__(self, name, age)self.salary = salaryprint('(Initialized Teacher: {})'.format(self.name))def tell(self):SchoolMember.tell(self)print('Salary: "{:d}"'.format(self.salary))class Student(SchoolMember):'''代表一位學(xué)生'''def __init__(self, name, age, marks):SchoolMember.__init__(self, name, age)self.marks = marksprint('(Initialized Student: {})'.format(self.name))def tell(self):SchoolMember.tell(self)print('Marks: "{:d}"'.format(self.marks))t = Teacher('Mrs.Shrividya', 40, 30000) s =Student('Swaroop', 25, 75)#打印一行空白行 print()members = [t, s] for member in members :#對(duì)全體師生工作member.tell()

    ? 輸出:

    $ python oop_subclass.py (Initialized SchoolMember: Mrs. Shrividya) (Initialized Teacher: Mrs. Shrividya) (Initialized SchoolMember: Swaroop) (Initialized Student: Swaroop)Name:"Mrs. Shrividya" Age:"40" Salary: "30000" Name:"Swaroop" Age:"25" Marks: "75"

    ? 下面這一點(diǎn)很重要,需要牢記——因?yàn)槲覀冊(cè)?Teacher 和 Student 子類中定義了__init__ 方法,Python 不會(huì)自動(dòng)調(diào)用基類 SchoolMember 的構(gòu)造函數(shù),你必須自己顯式地調(diào)用它。

    ? 相反,如果我們沒(méi)有在一個(gè)子類中定義一個(gè) init 方法,Python 將會(huì)自動(dòng)調(diào)用基類的構(gòu)造函數(shù)。

    ? 定義子類時(shí),子類名稱后的括號(hào)是一個(gè)元組,稱作繼承元組。

    ? 這里有一條有關(guān)術(shù)語(yǔ)的注釋——如果繼承元組(Inheritance Tuple)中有超過(guò)一個(gè)類,這種情況就會(huì)被稱作多重繼承(Multiple Inheritance)。

    總結(jié):

    ? Python是高度面向?qū)ο?#xff0c;所有的東西都可以看作是對(duì)象,包括函數(shù)。所以有必要清楚的知道類與對(duì)象的知識(shí)。

    輸入與輸出

    ? 可以用input()獲取用戶輸入,print()打印輸出。

    ? 對(duì)于輸入,我們還可以使用 str (String,字符串)類的各種方法。

    ? 下面主要是探討文件的輸入與輸出。

    用戶輸入內(nèi)容

    ? 案例:

    def reverse(text):return text[::-1]def is_palindrome(text): # 判斷是否是回文return text == reverse(text)something = input('Enter text: ') if is_palindrome(something) :print('Yes, it is a palindrome') else:print('No, it is not a palindrome')

    ? 輸出:

    $ python3 io_input.py Enter text: sir No, it is not a palindrome$ python3 io_input.py Enter text: madam Yes, it is a palindrome$ python3 io_input.py Enter text: racecar Yes, it is a palindrome

    ? input() 函數(shù)可以接受一個(gè)字符串作為參數(shù),并將其展示給用戶。爾后它將等待用戶輸入內(nèi)容或敲擊返回鍵。一旦用戶輸入了某些內(nèi)容并敲下返回鍵, input() 函數(shù)將返回用戶輸入的文本。

    文件

    ? 你可以通過(guò)創(chuàng)建一個(gè)屬于 file 類的對(duì)象并適當(dāng)使用它的 read 、 readline 、 write 方法來(lái)打開(kāi)或使用文件,并對(duì)它們進(jìn)行讀取或?qū)懭搿Wx取或?qū)懭胛募哪芰θQ于你指定以何種方式打開(kāi)文件。

    ? 當(dāng)完成文件操作后,要調(diào)用close()方法關(guān)閉文件。

    ? 案例:

    poem = '''\ Programming is fun When the work is done if you wanna make your work also fun:use Python! '''# 打開(kāi)文件以編輯('w'riting) f = open('poem.txt', 'w') # 向文件中編寫文本 f.write(poem) # 關(guān)閉文件 f.close()# 如果沒(méi)有特別指定, # 將假定啟用默認(rèn)的閱讀('r'ead)模式 f = open('poem.txt') while True :line = f.readline()# 零長(zhǎng)度指示 EOFif len(line) == 0:break# 每行(`line`)的末尾# 都已經(jīng)有了換行符#因?yàn)樗菑囊粋€(gè)文件中進(jìn)行讀取的print(line, end='')#關(guān)閉文件 f.close()

    ? 輸出:

    $ python3 io_using_file.py Programming is fun When the work is done if you wanna make your work also fun:use Python!

    ? open()函數(shù)會(huì)以指定的模式打開(kāi)文件,有關(guān)更多詳細(xì)的模式,可以用help(open)進(jìn)行查看。

    Pickle

    ? 可以將Python對(duì)象輸出到文件中,并且稍后可以取回。這叫作持久地存儲(chǔ)對(duì)象。

    ? 案例:

    import pickle# 我們存儲(chǔ)相關(guān)對(duì)象的文件的名稱 shoplistfile = 'shoplist.data' # 需要購(gòu)買的物品清單 shoplist = ['apple', 'mango', 'carrot']# 準(zhǔn)備寫入文件 f = open(shoplistfile, 'wb') # 轉(zhuǎn)儲(chǔ)對(duì)象至文件 pickle.dump(shoplist, f) f.close()# 清除 shoplist 變量 del shoplist# 重新打開(kāi)存儲(chǔ)文件 f = open(shoplistfile, 'rb') # 從文件中載入對(duì)象 storedlist = pickle.load(f) print(storedlist)

    ? 輸出:

    $ python io_pickle.py ['apple', 'mango', 'carrot']

    ? 要想將一個(gè)對(duì)象存儲(chǔ)到一個(gè)文件中,我們首先需要通過(guò) open 以寫入(write)二進(jìn)制(binary)模式打開(kāi)文件,然后調(diào)用 pickle 模塊的 dump 函數(shù)。這一過(guò)程被稱作封裝(Pickling)。

    ? 接著,我們通過(guò) pickle 模塊的 load 函數(shù)接收返回的對(duì)象。這個(gè)過(guò)程被稱作拆封(Unpickling)。

    Unicode

    ? 前面使用和操作字符串的時(shí)候都沒(méi)關(guān)關(guān)注編碼問(wèn)題。

    注意:如果你正在使用 Python 2,我們又希望能夠讀寫其它非英語(yǔ)語(yǔ)言,我們需要使用
    unicode 類型,它全都以字母 u 開(kāi)頭,例如 u"hello world"

    >>> "hello world" 'hello world' >>> type("hello world") <class 'str'> >>> u"hello world" 'hello world' >>> type(u"hello world") <class 'str'>

    ? zhg: 上述案例中,type()可以查看對(duì)象的類型。

    ? 若需要制定打開(kāi)文件的編碼是UTF-8,則在open()函數(shù)中添加一個(gè)關(guān)鍵字參數(shù)就可以完成。

    ? 案例:

    # encoding=utf-8 import io f = io.open("abc.txt", "wt", encoding="utf-8") f.write(u"Imagine non-English language here") f.close() text = io.open("abc.txt", encoding="utf-8").read() print(text)

    ? 每當(dāng)我們諸如上面那番使用 Unicode 字面量編寫一款程序時(shí),我們必須確保 Python 程序已經(jīng)被告知我們使用的是 UTF-8,因此我們必須將 # encoding=utf-8 這一注釋放置在我們程序的頂端。

    異常

    ? 當(dāng)程序發(fā)生錯(cuò)誤的時(shí)候,Python就會(huì)通過(guò)異常來(lái)告訴你哪兒出現(xiàn)了錯(cuò)誤。

    錯(cuò)誤

    >>> Print("Hello World") Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'Print' is not defined >>> print("Hello World") Hello World

    ? 你會(huì)注意到一個(gè) NameError 錯(cuò)誤被拋出,同時(shí) Python 還會(huì)打印出檢測(cè)到的錯(cuò)誤發(fā)生的位置。這就是一個(gè)錯(cuò)誤錯(cuò)誤處理器(Error Handler) 為這個(gè)錯(cuò)誤所做的事情。

    異常

    ? 我們將嘗試(Try)去讀取用戶的輸入內(nèi)容。按下 [ctrl-d] 來(lái)看看會(huì)發(fā)生什么事情。

    >>> s = input('Enter something --> ') Enter something --> Traceback (most recent call last): File "<stdin>", line 1, in <module> EOFError

    處理異常

    ? 可以通過(guò)使用 try…except 來(lái)處理異常狀況。一般來(lái)說(shuō)我們會(huì)把通常的語(yǔ)句放在 try 代碼塊中,將我們的錯(cuò)誤處理器代碼放置在 except 代碼塊中。

    ? 類似于Java的try{}catch(){}機(jī)制。

    ? 案例:

    try:text = input('Enter something --> ') except EOFError:print('why did you do an EOF on me?') except KeyboardInterrupt:print('You cancelled the operation. ') else: # 沒(méi)有異常發(fā)生print('You entered {}'.format(text))

    ? 輸出:

    # Press ctrl + d windows下是ctrl + z代表輸入結(jié)束 $ python exceptions_handle.py Enter something --> Why did you do an EOF on me? # Press ctrl + c $ python exceptions_handle.py Enter something --> ^CYou cancelled the operation. $ python exceptions_handle.py Enter something --> No exceptions You entered No exceptions

    ? 將所有可能引發(fā)異常或錯(cuò)誤的語(yǔ)句放在 try 代碼塊中,并將相應(yīng)的錯(cuò)誤或異常的處理器(Handler)放在 except 子句或代碼塊中。 except 子句可以處理某種特定的錯(cuò)誤或異常,或者是一個(gè)在括號(hào)中列出的錯(cuò)誤或異常。如果沒(méi)有提供錯(cuò)誤或異常的名稱,它將處理所有錯(cuò)誤與異常。

    ? 必須至少有一句 except 字句與每一句 try 字句相關(guān)聯(lián)。不然,有一個(gè) try 代碼塊又有什么意義?

    拋出異常

    ? 可以通過(guò) raise 語(yǔ)句來(lái)引發(fā)一次異常。

    ? 你能夠引發(fā)的錯(cuò)誤或異常必須是直接或間接從屬于 Exception (異常) 類的派生類。

    ? 案例:

    # encoding=utf-8class ShortInputException(Exception):'''一個(gè)由用戶定義的異常類'''def __init__(self, length, atleast):Exception.__init__(self)self.length = lengthself.atleast = atleasttry:text = input('Enter something -->')if len(text) < 3:raise ShortInputException(len(text), 3)# 其他工作能在此處繼續(xù)正常運(yùn)行 except EOFError:print('Why did you do an EOF on me?') except ShortInputException as ex: # 注意這兒的asprint(('ShortInputException: The input was '+'{0} long, expected ad least {1}').format(ex.length, ex.atleast)) else:print('No exception was raised.')

    ? 輸出:

    $ python exceptions_raise.py Enter something --> a ShortInputException: The input was 1 long, expected at least 3$ python exceptions_raise.py Enter something --> abc No exception was raised.

    Try … Finally

    ? Try…Finally塊可以確保打開(kāi)的文件一定被正常的關(guān)閉,也就是說(shuō)無(wú)論是否發(fā)生異常,finally子句中的代碼塊都會(huì)被執(zhí)行。

    ? 案例:

    import sys import timef = None try:f = open("poem.txt")# 我們常用的文件閱讀風(fēng)格while True:line = f.readline()if len(line) == 0:breakprint(line, end='')sys.stdout.flush()print("Press ctrl+c now")# 為了確保它能運(yùn)行一段時(shí)間time.sleep(3) except IOError:print("Could not find file poem.txt") except KeyboardInterrupt:print("!! You cancelled the reading from the file.") finally:if f:f.close()print("(Cleaning up: closed the file)")

    ? 輸出:

    $ python exceptions_finally.py Programming is fun Press ctrl+c now ^C!! You cancelled the reading from the file. (Cleaning up: Closed the file)

    with語(yǔ)句

    ? 在 try 塊中獲取資源,然后在 finally 塊中釋放資源是一種常見(jiàn)的模式。因此,還有一個(gè)with 語(yǔ)句使得這一過(guò)程可以以一種干凈的姿態(tài)得以完成。

    ? 案例:

    with open("poem.txt") as f :for line in f:print(line, end='')

    ? 我們使用的是 open 函數(shù)與 with 語(yǔ)句——我們將關(guān)閉文件的操作交由 with open 來(lái)自動(dòng)完成。

    ? 其實(shí)是with使用了一個(gè)協(xié)議,總會(huì)在代碼塊開(kāi)始之前調(diào)用 thefile.__enter__ 函數(shù),并且總會(huì)在代碼塊執(zhí)行完畢之后調(diào)用 thefile.__exit__ 。

    標(biāo)準(zhǔn)庫(kù)

    ? Python 標(biāo)準(zhǔn)庫(kù)(Python Standrad Library)中包含了大量有用的模塊,同時(shí)也是每個(gè)標(biāo)準(zhǔn)的Python 安裝包中的一部分。

    Sys模塊

    ? sys 模塊包括了一些針對(duì)特定系統(tǒng)的功能。我們已經(jīng)了解過(guò) sys.argv 列表中包括了命令行參數(shù)。

    日志模塊

    ? logging 模塊可以記錄日志。

    ? 案例:

    import os import platform import loggingif platform.platform().startswith('Windows'):logging_file = os.path.join(os.getenv('HOMEDRIVE'),os.getenv('HOMEPATH'),'test.log') else:logging_file = os.path.join(os.getenv('HOME'),'test.log')print("logging to", logging_file)logging.basicConfig(level=logging.DEBUG,format='%(asctime)s : %(levelname)s : %(message)s',filename=logging_file,filemode='w', )logging.debug("Start of the program") logging.info("Doing something") logging.warning("Dying now")

    ? 輸出:

    $ python stdlib_logging.py Logging to /Users/swa/test.log$ cat /Users/swa/test.log 2014-03-29 09:27:36,660 : DEBUG : Start of the program 2014-03-29 09:27:36,660 : INFO : Doing something 2014-03-29 09:27:36,660 : WARNING : Dying now

    ? 我們使用了三款標(biāo)準(zhǔn)庫(kù)中的模塊—— os 模塊用以和操作系統(tǒng)交互, platform 模塊用以獲取平臺(tái)——操作系統(tǒng)——的信息, logging 模塊用來(lái)記錄(Log)信息。

    每周模塊系列:標(biāo)準(zhǔn)庫(kù)中還有非常多的有用模塊,可以閱讀Doug Hellmann撰寫的優(yōu)秀的Python Module of the Week或者閱讀Python的官方文檔。

    更多

    ? 前面的部分涵蓋了將使用到的Python的大部分方面,下面介紹一些其他部分,使得對(duì)Python的認(rèn)識(shí)更加全面。

    傳遞元組

    ? 你可曾希望從一個(gè)函數(shù)中返回兩個(gè)不同的值?你能做到的。只需要使用一個(gè)元組。

    >>> def get_error_details(): ... return (2, 'details') ... >>> errnum, errstr = get_error_details() >>> errnum 2 >>> errstr 'details'

    ? 要注意到 a, b = <some expression> 的用法會(huì)將表達(dá)式的結(jié)果解釋為具有兩個(gè)值的一個(gè)元組。

    ? 這也意味著在 Python 中交換兩個(gè)變量的最快方法是:

    >>> a = 5; b = 8 >>> a, b (5, 8) >>> a, b = b, a >>> a, b (8, 5)

    特殊方法

    ? 諸如 __init__ 和 __del__ 等一些方法對(duì)于類來(lái)說(shuō)有特殊意義。

    ? 特殊方法用來(lái)模擬內(nèi)置類型的某些行為。如果你希望為你的類使用 x[key] 索引操作(就像你在列表與元組中使用的那樣),那么你所需要做的只不過(guò)是實(shí)現(xiàn)__getitem__() 方法,然后你的工作就完成了。如果你試圖理解它,就想想 Python 就是對(duì)list 類這樣做的!

    ? 如果想了解更多的特殊方法,可以參閱Python手冊(cè)

    單語(yǔ)句塊

    ? 每個(gè)語(yǔ)句塊都是由其自身的縮進(jìn)級(jí)別與其他部分進(jìn)行區(qū)分。如果你的語(yǔ)句塊只有單獨(dú)的一句,那么你可以在同一行指定它,例如條件語(yǔ)句與循環(huán)語(yǔ)句。

    ? 案例:

    >>> flag = True >>> if flag: print('Yes') ... Yes

    ? 注意,單個(gè)語(yǔ)句是在原地立即使用的,它不會(huì)被看作一個(gè)單獨(dú)的塊。雖然這個(gè)方式可以使得程序更加小巧,但是除非是為了檢查錯(cuò)誤,建議避免使用這種快捷方式。

    Lambda表格

    ? lambda 語(yǔ)句可以創(chuàng)建一個(gè)新的函數(shù)對(duì)象。從本質(zhì)上說(shuō), lambda 需要一個(gè)參數(shù),后跟一個(gè)表達(dá)式作為函數(shù)體,這一表達(dá)式執(zhí)行的值將作為這個(gè)新函數(shù)的返回值。

    ? 案例:

    points = [{'x': 2, 'y': 3},{'x': 4, 'y': 1}] points.sort(key=lambda i : i['y']) print(points)

    ? 輸出:

    $ python more_lambda.py [{'y': 1, 'x': 4}, {'y': 3, 'x': 2}]

    ? 要注意到一個(gè) list 的 sort 方法可以獲得一個(gè) key 參數(shù),用以決定列表的排序方式(通常我們只知道升序與降序)。在我們的案例中,我們希望進(jìn)行一次自定義排序,為此我們需要編寫一個(gè)函數(shù),但是又不是為函數(shù)編寫一個(gè)獨(dú)立的 def 塊,只在這一個(gè)地方使用,因此我們使用 Lambda 表達(dá)式來(lái)創(chuàng)建一個(gè)新函數(shù)。

    列表推導(dǎo)

    ? 列表推導(dǎo)(List Comprehension)用于從一份現(xiàn)有的列表中得到一份新列表。想象一下,現(xiàn)在你已經(jīng)有了一份數(shù)字列表,你想得到一個(gè)相應(yīng)的列表,其中的數(shù)字在大于 2 的情況下將乘以2。列表推導(dǎo)就是這類情況的理想選擇。

    ? 案例:

    listone = [2, 3, 4] listtwo = [2*i for i in listone if i > 2] print(listtwo)

    ? 輸出:

    $ python more_list_comprehension.py [6, 8]

    ? 在本案例中,當(dāng)滿足了某些條件時(shí)( if i > 2 ),我們進(jìn)行指定的操作( 2*i ),以此來(lái)獲得一份新的列表。要注意到原始列表依舊保持不變。

    ? 使用列表推導(dǎo)的優(yōu)點(diǎn)在于可以減少代碼。

    在函數(shù)中接收元組與字典

    ? 有一種特殊方法,即分別使用 * 或 ** 作為元組或字典的前綴,來(lái)使它們作為一個(gè)參數(shù)為函數(shù)所接收。當(dāng)函數(shù)需要一個(gè)可變數(shù)量的實(shí)參時(shí),這將頗為有用。

    >>> def powersum(power, *args): ... '''Return the sum of each argument raised to the specified power.''' ... total = 0 ... for i in args: ... total += pow(i, power) ... return total ... >>> powersum(2, 3, 4) 25 >>> powersum(2, 10) 100

    ? 我們?cè)?args 變量前添加了一個(gè) * 前綴,函數(shù)的所有其它的額外參數(shù)都將傳遞到args 中,并作為一個(gè)元組予以儲(chǔ)存。如果采用的是 ** 前綴,則額外的參數(shù)將被視為字典的鍵值—值配對(duì)。

    assert語(yǔ)句

    ? assert 語(yǔ)句用以斷言(Assert)某事是真的。

    ? 當(dāng)assert判斷事實(shí)為真時(shí),則會(huì)繼續(xù)執(zhí)行后續(xù)代碼,如果判斷其不是真的,那么就會(huì)拋出一個(gè)錯(cuò)誤。當(dāng)語(yǔ)句斷言失敗時(shí),將會(huì)拋出 AssertionError 。

    ? 案例:

    >>> mylist = ['item'] >>> assert len(mylist) >= 1 >>> mylist.pop() 'item' >>> assert len(mylist) >= 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> AssertionError

    ? zhg: 自己的理解,這個(gè)assert就是用來(lái)驗(yàn)證自己的猜測(cè)和假設(shè)的,如果猜測(cè)和假設(shè)是真的,那么后續(xù)的基于假設(shè)和猜測(cè)的邏輯就不會(huì)有有問(wèn)題,那么assert會(huì)通過(guò),并繼續(xù)執(zhí)行后續(xù)代碼;如果猜測(cè)和假設(shè)是錯(cuò)誤的,那么后續(xù)的基于假設(shè)和猜測(cè)的邏輯就是有問(wèn)題的,那么assert就不會(huì)通過(guò),則會(huì)拋出錯(cuò)誤,進(jìn)而阻止后續(xù)代碼的運(yùn)行。

    裝飾器

    ? 裝飾器(Decorators)是應(yīng)用包裝函數(shù)的快捷方式。這有助于將某一功能與一些代碼一遍又一遍地“包裝”。

    ? 案例:

    from time import sleep from functools import wraps import logginglogging.basicConfig() log = logging.getLogger("retry")def retry(f):@wraps(f)def wrapped_f(*args, **kwargs):MAX_ATTEMPS = 5for attempt in range(1, MAX_ATTEMPS + 1):try:return f(*args, **kwargs)except:log.exception("Attemp %s/%s failed :%s",attempt,MAX_ATTEMPS,(args, kwargs))sleep(10 * attempt)log.critical("All %s attemps failed : %s",MAX_ATTEMPS,(args, kwargs))return wrapped_fcounter = 0@retry def save_to_database(arg):print("Write to a database or make a network call or etc.")print("This will be automatically retried if exception is thrown.")global countercounter += 1# 這將在第一次調(diào)用時(shí)拋出異常# 在第二次運(yùn)行時(shí)將正常工作(也就是重試)if counter < 2:raise ValueError(arg)if __name__ == '__main__':save_to_database("Some bad value")

    ? 輸出:

    $ python more_decorator.py Write to a database or make a network call or etc. This will be automatically retried if exception is thrown. ERROR:retry:Attempt 1/5 failed : (('Some bad value',), {}) Traceback (most recent call last):File "more_decorator.py", line 14, in wrapped_freturn f(*args, **kwargs)File "more_decorator.py", line 39, in save_to_databaseraise ValueError(arg) ValueError: Some bad value Write to a database or make a network call or etc. This will be automatically retried if exception is thrown.

    總結(jié)

    以上是生活随笔為你收集整理的《简明Python教程》学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    日本成人黄色片 | 麻豆视频免费播放 | 国产高清不卡av | 丁香婷婷久久 | 国产欧美精品在线观看 | av资源网在线播放 | 亚洲自拍av在线 | 在线观看日韩精品视频 | 午夜aaaa| 亚洲精品日韩一区二区电影 | 五月婷影院| 国产精品九色 | 美国av片在线观看 | 91中文字幕在线 | 色婷婷综合成人av | 成人a视频| 永久免费视频国产 | 国产精品99久久免费观看 | 天天草天天干天天射 | 高清精品视频 | 美女免费黄网站 | 国产 一区二区三区 在线 | 欧美久久久久久久久 | av电影在线观看完整版一区二区 | 成年人在线免费看片 | 99av国产精品欲麻豆 | 久久精品亚洲综合专区 | 91久久国产露脸精品国产闺蜜 | 国产午夜精品理论片在线 | av不卡在线看 | 国产精品理论在线观看 | 91看片淫黄大片在线播放 | 91精品免费在线 | 欧美在线久久 | 欧美一级久久久 | 91成人在线免费观看 | 国产97在线播放 | 狠狠干 狠狠操 | 国产成人精品电影久久久 | 国产精品久久久久久久久费观看 | 国产手机免费视频 | 中文字幕在线视频一区二区 | 91精品久久久久久久99蜜桃 | 久久国产精品视频免费看 | av久久在线 | 91看片淫黄大片在线播放 | 最近中文字幕免费大全 | 免费一级黄色 | 国产日产av | 四虎影视成人 | 97热在线观看 | 91网免费看| 亚洲精品高清一区二区三区四区 | 99视频这里只有 | 天天操天天爱天天爽 | 国产高清在线一区 | 五月综合网站 | 欧美成人影音 | 91精品国产麻豆 | 免费无遮挡动漫网站 | 天海翼一区二区三区免费 | www免费视频com| 日韩免费在线观看网站 | 国产精品 欧美 日韩 | 国产精品精品国产婷婷这里av | 国产精品不卡在线观看 | 日日干天天操 | 中文视频一区二区 | 久久久综合九色合综国产精品 | 天天透天天插 | 国产精品高清免费在线观看 | 国产中文字幕国产 | 免费观看视频的网站 | 韩国在线一区 | 顶级欧美色妇4khd | 九九久久在线看 | 日韩欧美一级二级 | 在线观看免费版高清版 | 亚洲三级黄色 | 中文字幕在线播出 | 亚洲精品久久久久久中文传媒 | 日韩欧美高清一区二区 | 久久99热精品 | www亚洲精品 | 视频精品一区二区三区 | 欧美日韩性生活 | 91精品国产综合久久婷婷香蕉 | 成人中心免费视频 | 成人精品视频久久久久 | 天天干天天插伊人网 | 国产精品系列在线 | 免费看一级特黄a大片 | 婷婷国产精品 | 最近中文字幕在线播放 | 黄网站免费大全入口 | 99精品久久只有精品 | 国产资源| 91精品高清| 狠狠操夜夜操 | 香蕉免费在线 | 菠萝菠萝蜜在线播放 | 日韩精品一区二区三区在线播放 | 精品国产乱码久久久久 | 成人理论在线观看 | 在线a人片免费观看视频 | www久久com| 成人h动漫精品一区二 | 亚洲精品一区二区精华 | 国产美女精品人人做人人爽 | 天天操天天射天天舔 | www五月| 久草视频在线播放 | 国产 日韩 欧美 自拍 | 国产成人精品一区一区一区 | 五月婷香蕉久色在线看 | 99色网站 | 欧美日韩国产一区二区在线观看 | 中文字幕av在线播放 | 8x成人在线 | 亚洲一区免费在线 | 久久人人爽人人片av | 福利二区视频 | 国产精品成人品 | 国色综合 | 天天操天天射天天爱 | 一本一道久久a久久精品蜜桃 | 国产午夜精品免费一区二区三区视频 | 美女网站黄在线观看 | 五月婷婷激情五月 | 久久国产精品99久久久久 | 日韩美在线观看 | 五月天激情视频 | 性色av免费看 | 精品国产成人在线 | 欧美analxxxx | 97在线精品国自产拍中文 | 97超碰国产精品女人人人爽 | 欧美精品你懂的 | 久久综合色天天久久综合图片 | 在线亚洲高清视频 | 911久久香蕉国产线看观看 | 日韩在线播放欧美字幕 | 欧美久草网 | 日韩在线网 | 亚洲黄色在线 | 精品96久久久久久中文字幕无 | 人人添人人| 日日日操 | 天天色天天爱天天射综合 | 青春草视频 | 91亚洲精品在线观看 | 精品亚洲男同gayvideo网站 | 波多野结衣小视频 | 久久久久久久久久久免费av | 人人爱爱 | 国产精品18毛片一区二区 | 久久精品日产第一区二区三区乱码 | 久久久99精品免费观看app | 91精品国产成人 | 激情深爱 | 一区二区视频在线免费观看 | 伊香蕉大综综综合久久啪 | 国产福利中文字幕 | 国产成人一区二区三区在线观看 | 国产污视频在线观看 | 99综合影院在线 | 色先锋av资源中文字幕 | av在线免费观看黄 | 国产高清在线一区 | 综合中文字幕 | 国产在线播放一区二区 | 久久国色夜色精品国产 | 亚洲a免费 | 欧美激情视频免费看 | 91资源在线播放 | 九九久久精品 | 亚洲成人av一区 | 婷婷在线免费 | 成人a免费 | 久久久99精品免费观看 | 亚洲国产精品va在线看黑人动漫 | 国产高清视频 | 97操碰| 在线国产高清 | 欧美日韩国产综合一区二区 | 一区二区三区日韩在线观看 | 色国产精品一区在线观看 | 亚洲,国产成人av | 欧美三级高清 | 91在线免费播放视频 | 欧美日韩免费一区二区三区 | 综合久久精品 | 天天综合色天天综合 | 一区二区欧美日韩 | 成人播放器| 久草在线费播放视频 | 亚洲精品字幕在线观看 | 天天搞夜夜骑 | 国产精品二区三区 | 91激情在线视频 | 国产精品麻豆果冻传媒在线播放 | 在线看v片| 91污污视频在线观看 | 菠萝菠萝蜜在线播放 | 久久精品观看 | 高清av免费一区中文字幕 | 国产粉嫩在线观看 | 久久成人午夜 | 久久爽久久爽久久av东京爽 | 婷婷九九 | 中文区中文字幕免费看 | 国产日韩精品欧美 | 日韩av综合网站 | 亚洲精品影视在线观看 | 国产精品久久久久久久久久三级 | 日韩亚洲精品电影 | 日本黄色大片儿 | av电影一区二区三区 | 久久av免费观看 | 国产老熟 | 日韩视频图片 | 在线观看小视频 | 在线黄频 | 国产精品久久中文字幕 | 九九久久影院 | 色偷偷888欧美精品久久久 | 在线观看视频国产 | 一区在线观看 | 免费高清在线观看成人 | 国产96精品 | 国产麻豆精品免费视频 | 五月天婷婷综合 | 免费久久99精品国产婷婷六月 | 久久久亚洲麻豆日韩精品一区三区 | 亚洲资源片 | 精品久久久久久亚洲综合网 | 日日躁天天躁 | 欧美日韩18 | 免费日韩av片 | 精品免费 | 成人av在线资源 | 免费成人在线电影 | 国产精品久久久久毛片大屁完整版 | 久久99视频 | 人人讲| 日韩av区| 欧美精品乱码久久久久久按摩 | 亚洲视频456 | 日韩在线色| 激情网综合 | a在线一区| 天天综合网久久综合网 | 一级片免费在线 | 免费a v在线 | 亚洲 中文 欧美 日韩vr 在线 | 四虎成人网| 免费观看成人 | 婷婷在线色 | 中文字幕在线久一本久 | 91精品婷婷国产综合久久蝌蚪 | 99这里只有精品视频 | 91在线免费观看网站 | 国产一区二区三区免费在线 | 日本久久中文 | 久久久久久99精品 | 丁香花在线视频观看免费 | 日av免费| 天天干天天操天天干 | 91免费看黄 | 高清av免费观看 | av电影免费观看 | 激情九九 | 中文字幕在线免费播放 | 久久久久五月 | www亚洲一区| 成人av直播| 欧美日韩精品在线观看 | 久热久草在线 | 中文字幕影片免费在线观看 | 久操视频在线观看 | 一区三区在线欧 | 久久久精品午夜 | 91麻豆看国产在线紧急地址 | av免费观看高清 | www.久久精品视频 | 69av视频在线| 一级性视频 | 日批网站在线观看 | 久久影院午夜论 | 日韩乱码在线 | 国产精品美女久久久久久免费 | 色欧美日韩 | 欧美性生活久久 | 成人精品一区二区三区电影免费 | 四虎影院在线观看av | 黄色大片网 | 婷婷五月情 | 二区三区中文字幕 | 亚洲欧美视频网站 | 99久久久久成人国产免费 | 国内精品在线一区 | 国产中文在线播放 | 国产不卡视频 | 成年人免费在线观看网站 | 国产高清视频免费观看 | 中文字幕在线中文 | 人人澡人人澡人人 | 免费观看v片在线观看 | 麻豆免费精品视频 | 精品久久1| 操久| 一区二区三区不卡在线 | 久久国产午夜精品理论片最新版本 | 色综合欧洲 | 麻豆传媒视频在线播放 | 久久9999久久免费精品国产 | 欧美日韩国内在线 | 在线免费视频一区 | 狠狠狠狠狠狠干 | 亚洲综合色视频 | 99色视频在线 | 亚洲视频h | 超碰人人乐 | 国产91勾搭技师精品 | 久久精品国产精品亚洲 | 国产成人精品一区二区三区福利 | 亚洲午夜av久久乱码 | 中文字幕三区 | 极品美女被弄高潮视频网站 | 2018好看的中文在线观看 | 天天操天天射天天插 | 久热色超碰 | 精品国产成人在线影院 | 天天艹天天 | 亚洲一区二区三区毛片 | 手机看片午夜 | 97超碰中文字幕 | 97日日碰人人模人人澡分享吧 | 免费一区在线 | 免费日韩三级 | 亚洲理论在线观看电影 | 国产91aaa| 亚洲精品国产第一综合99久久 | 99中文视频在线 | 91一区啪爱嗯打偷拍欧美 | 精品国产免费人成在线观看 | 中文字幕乱码亚洲精品一区 | 国产尤物视频在线 | 精品亚洲国产视频 | 婷婷激情综合五月天 | 亚洲精品综合一二三区在线观看 | 在线精品视频免费观看 | av品善网| 激情视频在线高清看 | 欧美a级一区二区 | 午夜久久久久久久久久久 | 日本三级全黄少妇三2023 | 天天干天天射天天爽 | 六月丁香激情综合 | 国产精品原创av片国产免费 | 欧美日韩性 | 国精产品一二三线999 | 亚洲精品国产综合久久 | 久久久久免费精品国产小说色大师 | 天天拍天天干 | 亚洲色图色 | 国产少妇在线观看 | 又黄又刺激的视频 | 黄色小说免费观看 | 久久精视频 | 日本免费一二三区 | 国产香蕉视频 | 色在线视频 | 久久综合九色综合欧美狠狠 | 国内久久精品 | 一二三四精品 | 操综合| 欧美一区视频 | www夜夜操com| 国产一区二区三区在线免费观看 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 999视频精品 | 伊人超碰在线 | 一级电影免费在线观看 | 区一区二区三在线观看 | 超碰公开97 | 亚洲美女在线一区 | 久久99免费视频 | 国产精品一区二区三区免费视频 | 中文字幕高清有码 | 久久精品视频在线看 | 久久精品99久久久久久2456 | 国产高清在线免费视频 | 婷婷激情综合 | 97在线观看免费观看高清 | 精品日韩在线一区 | www.在线看片.com | 久久久免费精品视频 | 99久精品 | 国产精品毛片久久久久久久 | 欧美日韩高清一区二区三区 | 黄色福利网站 | 欧美成人黄色 | 热久久国产 | 中文字幕亚洲在线观看 | 五月天婷婷免费视频 | 午夜视频导航 | 国产成人黄色 | 激情综合国产 | 午夜精品一区二区三区在线 | 久久久久激情视频 | 色www精品视频在线观看 | 成人小视频在线观看免费 | 青青河边草免费观看完整版高清 | 六月丁香综合 | 国产xx在线 | 在线视频 成人 | 国产专区精品视频 | 精选久久 | 亚洲国产精品成人女人久久 | 国产999精品久久久影片官网 | 日韩成人免费电影 | 久久免费视频在线 | 欧美午夜理伦三级在线观看 | 欧美色图狠狠干 | 亚洲精品人人 | 国产精品自拍av | 亚洲第一香蕉视频 | 香蕉视频网站在线观看 | 一本一道波多野毛片中文在线 | 成在线播放 | 一二三区高清 | 亚洲欧美国产精品 | 天天视频色版 | 国产亚洲午夜高清国产拍精品 | 91看片看淫黄大片 | 亚洲涩涩一区 | 中文字幕在线影视资源 | 亚洲精品在线免费播放 | 视频国产 | 中文字幕精品一区久久久久 | 91大神电影 | 国产91综合一区在线观看 | 精品国产自在精品国产精野外直播 | 中文字幕丝袜制服 | 日本少妇视频 | 永久免费视频国产 | 伊色综合久久之综合久久 | 成人午夜电影网 | 亚洲人天堂 | 综合精品久久 | 久久精品女人毛片国产 | 久久91久久久久麻豆精品 | 成人av免费看 | www91在线观看 | 久久字幕精品一区 | 欧美资源在线观看 | 久久综合九色99 | 大胆欧美gogo免费视频一二区 | 久久不卡视频 | 探花视频在线版播放免费观看 | 成人免费视频播放 | 97在线看片 | 91麻豆精品一区二区三区 | 丁香婷婷电影 | 午夜狠狠干 | 国产亚洲精品综合一区91 | 久久婷婷一区 | 国产日韩精品在线观看 | 狠狠操操网 | 久久久久亚洲精品国产 | 国产亚洲精品成人av久久影院 | 国产丝袜在线 | 天天操 夜夜操 | 91黄色在线视频 | 亚洲激情在线播放 | 91在线麻豆 | 在线91观看 | 久一网站 | 色综合色综合久久综合频道88 | 日韩精品视频免费专区在线播放 | 91日韩精品| 成人午夜剧场在线观看 | 五月婷婷综 | 国产成人综合精品 | bbbb操bbbb| 精品免费久久久久久 | 91黄色在线视频 | 国产尤物在线观看 | 国产成本人视频在线观看 | 国产精品成人av电影 | 欧美性做爰猛烈叫床潮 | 92中文资源在线 | av高清影院| 人人澡人人澡人人 | 欧美日韩免费观看一区二区三区 | 九九久久久 | 欧美一级在线看 | 欧美另类重口 | 黄色资源网站 | 国产亚洲成人网 | 久久综合色播五月 | 国产又粗又猛又爽又黄的视频免费 | 四虎永久免费网站 | 国产午夜不卡 | 久草在线这里只有精品 | 在线观看日韩免费视频 | 91精品国 | 国产一区私人高清影院 | 日韩在线中文字幕视频 | 色婷婷啪啪免费在线电影观看 | 成人国产精品免费 | 成人免费影院 | 在线午夜电影神马影院 | 欧美亚洲国产精品久久高清浪潮 | 免费福利片 | 亚洲五月花| av电影在线观看 | 国产成人精品久久久 | 亚洲视频999 | 国产精品亚洲片在线播放 | 亚洲精品黄| 中文字幕av专区 | 亚洲精品国产第一综合99久久 | 伊人五月综合 | 在线91播放 | 综合激情网 | 999毛片 | 精品国产不卡 | 91资源在线视频 | 色综合天天做天天爱 | 探花视频免费观看 | 国产精品高清在线观看 | 亚洲视频久久 | 成人av网页| 人人爽久久涩噜噜噜网站 | 国内精品久久久精品电影院 | 国产亚洲精品女人久久久久久 | 91精品视频播放 | 欧美看片| 69国产盗摄一区二区三区五区 | 欧美吞精 | 天天干天天在线 | 69精品久久 | 欧美一二三区在线观看 | 色综合www | 中文在线亚洲 | 成年人在线免费看视频 | 探花视频在线观看+在线播放 | 在线成人中文字幕 | 69夜色精品国产69乱 | 国产精品美女免费看 | 91福利影院在线观看 | 激情久久伊人 | 国产精品 中文字幕 亚洲 欧美 | 国产黄色在线 | 日韩在线观看你懂得 | 精品久久久久一区二区国产 | japanesefreesex中国少妇 | 久久爱www. | 国产精品久久久久毛片大屁完整版 | 精品播放 | 久久午夜视频 | 国产精品xxxx18a99 | 精品视频在线看 | 久久婷婷精品视频 | 99九九热只有国产精品 | 狠狠干夜夜操 | 三级黄色大片在线观看 | 九九九九九精品 | 亚洲国产日本 | 亚洲精品国产综合99久久夜夜嗨 | 色播五月激情综合网 | 婷婷激情av | 三级黄色网络 | 国产精品一区二区三区免费看 | 91精品伦理| 91精品一区国产高清在线gif | 成人毛片100免费观看 | 国产在线中文字幕 | 精品视频网站 | 丁香六月婷婷综合 | 在线观看91久久久久久 | 国产区高清在线 | 在线观看视频黄色 | 欧美在线一级片 | 免费成人av在线看 | 六月丁香激情综合色啪小说 | 国产精品免费一区二区三区在线观看 | 99精品视频在线看 | 亚洲精品国产精品久久99热 | 久久少妇免费视频 | 国产精品福利无圣光在线一区 | 久久影院中文字幕 | 国产亚洲精品久久久久秋 | www.久久91| 亚洲午夜精品一区 | 天天摸夜夜操 | 天天在线视频色 | 亚洲另类视频 | 91丨九色丨高潮 | 91九色视频网站 | 日韩欧美一级二级 | 国产人免费人成免费视频 | 久久人人添人人爽添人人88v | 婷婷射五月 | 91九色视频导航 | 日批在线看 | 国产亚洲精品av | 久久久www成人免费毛片 | 黄色视屏在线免费观看 | 国产精品久久久久免费观看 | 亚洲精品国产拍在线 | 精品视频免费看 | 亚洲婷久久 | 色综合激情网 | 亚洲色图美腿丝袜 | 欧美综合久久 | 国产精品入口66mio女同 | 成人国产电影在线观看 | 欧美了一区在线观看 | av大片网址| 国产精品福利视频 | 国产在线观看一区 | 久久久久久久久久网站 | 亚洲国产97在线精品一区 | 免费91在线 | 午夜久久电影网 | 精品一区二区免费视频 | 中文字幕av免费在线观看 | 午夜视频在线观看欧美 | 99精品福利视频 | 色香蕉网| 国产精品激情在线观看 | 亚洲精品免费观看视频 | 成人av免费 | 成人a视频 | 国产精品扒开做爽爽的视频 | 成人h视频在线播放 | 久久国产品 | 久久99国产精品久久99 | 婷婷国产v亚洲v欧美久久 | 欧美日韩视频精品 | 91成人精品国产刺激国语对白 | 中文字幕第一页在线 | 天堂av色婷婷一区二区三区 | 最新av电影网址 | 午夜久久影视 | 午夜av电影 | 国产黄色一级片在线 | 久久五月婷婷丁香社区 | 97超碰资源网 | 色综合五月天 | 免费观看高清 | 日日夜夜精品免费 | 国产在线免费观看 | 国产精品一区二区三区电影 | 四虎影视www| 一本一道久久a久久综合蜜桃 | 亚洲免费在线播放视频 | 天天射综合 | 91污污 | 免费黄色小网站 | 91麻豆精品国产91久久久使用方法 | 精品国产一区二区三区蜜臀 | 成人免费在线观看入口 | 91av视频在线观看 | 国产精品久久中文字幕 | 成人精品视频 | 在线观看视频在线 | 婷婷激情影院 | 亚洲免费在线播放视频 | 亚洲人人射 | 亚洲男男gaygayxxxgv | 亚洲区视频在线观看 | 久久一区国产 | 日韩高清在线一区二区三区 | 亚洲精品乱码久久久久久蜜桃欧美 | 国产午夜av| 香蕉一区| 日本一区二区免费在线观看 | 国产 在线观看 | 日韩黄色在线观看 | 日韩精选在线观看 | 欧美视频www | 欧美午夜精品久久久久久浪潮 | 亚洲国产精品成人女人久久 | 1024手机基地在线观看 | 久久国产精品99久久久久久丝袜 | www.97色.com| 久久久黄视频 | 色视频 在线 | 欧美日本不卡 | 久久视频网址 | 日本久久久久久久久久久 | 不卡的av | 特级xxxxx欧美 | 久久五月情影视 | 中文字幕在线色 | 婷婷丁香六月 | 国产99久久久国产精品免费二区 | 中文字幕av在线免费 | 四川妇女搡bbbb搡bbbb搡 | 国产精品高清一区二区三区 | 999免费视频 | 成人精品国产 | 热久久国产| 欧美美女激情18p | 亚洲第一av在线播放 | 国产精品资源在线 | 日韩精品一区二区三区第95 | 久久y| 国产精品久久久久久久久久久久午夜 | 亚洲精品在线免费播放 | 久久综合在线 | 国产精品一区二区久久精品 | 四虎在线视频 | 欧美日韩国产二区三区 | 久久婷婷国产色一区二区三区 | 久久精品—区二区三区 | 成人免费在线观看av | 国产成人一区二区在线观看 | av电影 一区二区 | 中文字幕在线影视资源 | 免费视频久久 | 18+视频网站链接 | 精品黄色在线 | 91尤物国产尤物福利在线播放 | 天天色.com | 日韩av一区二区在线影视 | 久久午夜免费视频 | 天天超碰| 久久人人爽人人爽 | 999国产精品视频 | 亚洲自拍偷拍色图 | 成人国产精品免费 | 91看片成人 | 中文字幕在线观看一区二区三区 | 欧美日韩国产精品一区 | 黄色成人毛片 | 欧美少妇xxxxxx | 13日本xxxxxⅹxxx20| 中文一区二区三区在线观看 | 色综合久久久久综合 | 在线免费观看视频一区 | 国产片免费在线观看视频 | 午夜91在线 | 一区二区三区四区五区在线 | 日韩免费| 国内精品久久久久久久久久 | 亚洲欧洲国产日韩精品 | 国产一二三四在线视频 | 久久久久久久久久久免费av | 日韩电影一区二区三区 | 美女啪啪图片 | 日韩三区在线观看 | 日本性生活一级片 | 久久视奸| 色婷婷在线观看视频 | 美女啪啪图片 | 欧美在线不卡一区 | 91看片网址 | 香蕉视频18| 久久毛片网站 | 国产精品久久久久久久久久白浆 | 色天天久久| 亚洲黄色av | 成人三级黄色 | 亚洲黄色成人 | 天天干人人干 | 亚洲成人一二三 | 成年人免费在线观看网站 | 亚洲午夜久久久久久久久久久 | 国产精品 中文在线 | 久久综合久久综合久久综合 | 超碰.com| 久久视影 | 亚洲免费不卡 | 久久成人黄色 | 91精品对白一区国产伦 | 久久综合九色综合网站 | 91九色porny蝌蚪主页 | 国产精品99在线播放 | 亚洲高清资源 | 日韩欧美高清在线观看 | 激情视频免费在线 | 国产精品12345| 国产精品视频区 | 久久综合久久伊人 | 在线观看的a站 | 亚洲午夜久久久影院 | 456成人精品影院 | 九九综合在线 | 日韩精品大片 | 国产99久久久精品 | 91在线国产观看 | 香蕉视频一级 | 国产一区二区在线播放视频 | 五月天最新网址 | 手机av在线网站 | 精品高清美女精品国产区 | 欧美视频网址 | 色偷偷中文字幕 | 欧美三级在线播放 | 国产无区一区二区三麻豆 | 国产精品va视频 | 成人在线观看你懂的 | 99热亚洲精品 | 99视频一区 | 久久黄色小说 | 国产剧情一区 | 91香蕉视频| 成人在线观看资源 | 99热超碰 | 91麻豆高清视频 | 亚洲国产一区二区精品专区 | 国产一级淫片免费看 | 天天射天天舔天天干 | 六月激情丁香 | 国产精品久久久久久久久久免费看 | 国产91亚洲精品 | 制服丝袜在线 | 免费福利视频网站 | 日韩精品免费在线播放 | 久久精品网站视频 | 久久精品久久国产 | 精品国产99| 人人澡超碰碰97碰碰碰软件 | 亚洲在线黄色 | 久久精品99久久久久久 | 国产日韩欧美视频 | 日韩免费小视频 | 国产手机av | 久久久久久久久久久高潮一区二区 | 欧美在线91 | 久热免费在线观看 | 久久综合精品国产一区二区三区 | 99久久精品电影 | 日韩二级毛片 | 国产精品成人自产拍在线观看 | 高清免费在线视频 | 色美女在线 | av片子在线观看 | 玖玖在线视频观看 | 依人成人综合网 | 狠狠色丁香婷婷综合 | 亚洲视频 在线观看 | 久久久久久久久久久福利 | 国产精品免费观看久久 | 亚洲经典视频在线观看 | 国产一级片免费播放 | 特级片免费看 | 成人国产精品入口 | 国产又粗又猛又爽又黄的视频免费 | 久久精品国产美女 | 亚洲 欧美变态 另类 综合 | 天天干人人干 | 99久久日韩精品免费热麻豆美女 | 伊人五月天.com | 人人干在线 | 亚洲精品天天 | 欧美久久久久久久久久 | 中文在线字幕免 | 久久97精品| 91麻豆精品国产91久久久使用方法 | 激情网第四色 | 国产一区av在线 | 99re视频在线观看 | 天天操天天操天天操天天操天天操 | 天天操天天干天天干 | 在线视频麻豆 | 超碰人人乐 | 缴情综合网五月天 | 中文字幕av最新 | 中文字幕视频一区二区 | 久久www免费视频 | 日韩字幕| 91精品久久久久 | 99资源网| 亚洲成av人影院 | 五月婷婷久久综合 | 中文字幕丝袜制服 | 久草在线视频在线观看 | 亚洲日本国产 | 97成人在线观看 | 日韩xxxx视频 | 色婷婷激情五月 | 天天综合网久久综合网 | 国外调教视频网站 | 久久观看免费视频 | 久草在线最新免费 | 亚洲久在线 | 国产一区视频在线观看免费 | 精品国产精品一区二区夜夜嗨 | 亚洲一区日韩精品 | 日韩高清成人在线 | 一二三区视频在线 | 香蕉视频久久 | 免费av网址在线观看 | 伊人影院av | 深爱婷婷 | 丁香婷婷色 | 91成人短视频在线观看 | 丰满少妇久久久 | 久久深夜福利免费观看 | 人人干人人搞 | 天天干夜夜爱 | 精品国产一区二区三区久久久蜜臀 | 亚洲精品午夜一区人人爽 | 日韩精品一区二区在线观看视频 | 黄色视屏av| 色综合天天综合 | 久久av福利 | 91传媒免费在线观看 | 精品亚洲免费 | 国产一区欧美在线 | 欧美日韩一区二区三区在线免费观看 | 成人在线视频一区 | 中文字幕成人在线 | 狠狠色狠狠色综合日日小说 | 国产精品刺激对白麻豆99 | 久久久黄色av | 亚洲精品网站在线 | 久草在线免费在线观看 | 外国av网| 园产精品久久久久久久7电影 | 久久专区 | 精品国产1区2区 | 亚洲h色精品 | 国产一区 在线播放 | 在线免费观看视频你懂的 | 亚洲精品视频免费 | 久久久久国产成人精品亚洲午夜 | 亚洲成av片人久久久 | 免费日韩视 | 97电影在线 | 欧美精品在线一区二区 | 国产精品午夜久久久久久99热 | 欧美久久电影 | 久久99九九99精品 | 91亚州| 在线电影日韩 | av在线之家电影网站 | 国产区免费在线 | 四虎永久网站 | 亚洲电影黄色 | www色com| av资源免费在线观看 | 精品国产伦一区二区三区 | 欧美日韩亚洲第一 | 中文字幕成人一区 | 久久高清av| 91亚洲网 | 国产精品99久久久久 | 亚洲国产影院 | 五月天综合 | 国产午夜一级毛片 | 天堂在线视频免费观看 | 激情综合亚洲精品 | 五月婷婷黄色 | 欧美一级在线 | 国产午夜av | 91香蕉视频 | 日韩美女黄色片 | 久久综合成人网 | 免费看v片网站 | 看毛片网站 | 激情婷婷在线 | 99综合视频 | 久久人操 | 国内精品久久久久影院优 | 欧美日韩国产精品一区 | 精品国产精品久久 | 精品视频在线播放 | 深夜免费小视频 | 免费看三片 | 国内精品久久久久 | 91桃色视频 | 91亚洲精品久久久蜜桃网站 | 亚洲精品免费看 | 国产黄色免费电影 | 丁香六月五月婷婷 | 日韩高清一区二区 | 天天天色综合a | 日韩三级免费 | 久久久久久久电影 | 综合激情av | 黄色网址在线播放 | 久热久草| 国色天香第二季 | 成人一区不卡 | 久久国产三级 | 国产精品毛片一区二区 | av成人免费在线看 | 日日夜夜噜噜噜 | av大片网站 | 国产黄视频在线观看 | 精品综合久久 |