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

歡迎訪問 生活随笔!

生活随笔

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

python

1、python基础速成

發布時間:2023/12/13 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1、python基础速成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基礎模塊

def prt(age,name):#函數定義

? ?print("%s is %d 年齡 old"%(name,age))

?

if __name__=="__main__":#程序入口

? ?print("Hello World")

? ?prt(45,"gaici") ???

?

獲取輸入:使用input()函數

name=input("you name ?") ??

?

python的文件類型主要分為3類,分別是源代碼、字節代碼和優化代碼。

1、源代碼:文件以“py”為擴展名,“pyw”是圖形用戶接口的源文件的擴展名。

2、字節代碼:python源文件經過編譯后生成擴展名為"pyc"的文件,此文件是與平臺無關的,可通過腳本生成該類型的文件。

import py_compile

py_compile.compile("ps.py")

運行后即可得到ps.pyc文件

3、優化代碼:經過優化的源文件生成擴展名為“pyo”,該類型的文件需要命令行工具生成。

在命令行中輸入“python2.7 -O -m py_compile ps.py”生成文件為ps.pyo而

"python3.5 -O -m py_compile ps.py"生成的文件為ps.pyc

?

類的私有變量、私有方法以兩個下劃線作為前綴。

class Student: ? ? ? ? ? ? ? ? #類名首字母大寫

? ?__name="" ? ? ? ? ? ? ? ? ?#私有實例變量前必須有2個下劃線

? ?def __init__(self,name):?? #構造函數

? ? ? ?self.__name=name ? ? ? #self相當于Java中的this

? ?

?? def getName(self): ? ? ? ? #方法名首字母小寫,其后每個單詞的首字母用大寫

? ? ? ?return self.__name

?

?? def __del__(self):???????? #析構函數

?????? self.__name=None

?

if __name__=="__main__":

? ?student=Student("borphi") ?#對象名用小寫字母

? ?print(student.getName())

注:python對代碼縮進的要求非常嚴格。如果程序中不采用代碼縮進的編碼風格,將拋出一個IndentationError異常。 ? ?

? ?

模塊是類或函數的集合,用于實現某個功能。在Python中,如果需要在程序中調用標準庫或其他第三方庫的類時,需要先使用import或from ... import語句導入相關的模塊。

1、import語句 ? ?如:import sys

2、from ... import ...:導入模塊指定的類或函數。 ?如:from sys import path

?

函數之間或類的方法之間用空行分隔,表示一段新的代碼的開始。與縮進不同,空行并不是python語法的一部分。只是為增加程序可讀性而已。

?

python以“#”作為注釋,特殊的注釋有:

1、中文注釋 ? ? #-*-coding:UTF-8-*-

2、跨平臺注釋 ? ?#! /usr/bin/python

?

python也支持分號,但可以省略,python主要通過換行來識別語句的結束。python同樣支持多行寫一條語句,使用“\”作為換行符。

如:

sql="select id,name" \

? ?"from dept" \

? ?"where name='A"

?

局部變量是只能在函數或代碼段內使用的變量。python并沒有提供定義常量的保留字。

?

python中的字符串,可以用單引號、雙引號和三引號來包括。其中三引號保持字符原樣輸出,不做任何處理(占位符除外)。

?

python內置的幾種數據結構:元組、列表、字典和序列。

1、元組(Tuple):元組由不同的元素組成,每個元素可以存儲不同類型的數據,元組是“寫保護”的,即元組創建后不能再做任何修改操作,也不能添加或刪除任何元素。元組通常代表一行數據,而元組中的元素代表不同的數據項。tuple_name=(元素1,元素2,...)元組的訪問可以通過索引訪問。

元組的遍歷需要用到range()和len()這兩個函數

tuple=(("apple","banana"),("grape","orange"),("watermelon",),("grapefruit",))

for i in range(len(tuple)):

? ?print("tuple[%d]:"%i,"")

? ?for j in range(len(tuple[i])):

? ? ? ?print(tuple[i][j], "")

2、列表(List):通常作為函數的返回類型,可以實現添加(append())、刪除(remove())和查找(index())操作,元素的值可以被修改。list_name=[元素1,元素2,...]

list0=["apple","banana","grape","orange"]

list0.append("watermelon")

list0.insert(1,"grapefruit")

list0.remove("banana") ? ? ?#如果列表中存在2個相同的元素,只刪除位置靠前的。

print(list0.pop())

print(list0[-2])

print(list0[1:3])

print(list0[-3:-1])

print(list0.index("grape"))

print("orange" in list0)

list0.sort()

list0.reverse()

?

list1=[["apple","banana"],["grape","orange"],["watermelon"],["grapefruit"]]

for i in range(len(list1)):

? ?print("list[%d]:"%i,"")

? ?for j in range(len(list1[i])):

? ? ? ?print(list1[i][j])

?

list0.extend(list1)

list0=list0+list1

list3=["apple","banana"]*2

print(list3)

注:用列表可以實現堆棧(append()、pop())和隊列(append()、pop(0))

3、字典(Dictionary):字典是由“鍵-值”對組成的集合,字典中的“值”通過“鍵”來引用。dictionary_name={key1:value1,key2:value2, ... }

注意:字典的書寫順序不是字典實際存儲順序,字典根據每個元素的Hashcode值進行排列。

dict={"a":"apple","b":"banana","g":"grape","o":"orange"} ?#創建

dict["w"]="watermelon" ? #添加

del(dict["a"]) ? ? ? ? ? #刪除

dict["g"]="grapefruit" ? #修改

print(dict.pop("b"))

dict.clear()

#字典的遍歷

for k in dict:

? ?print("dict[%s]="%k,dict[k])

print(dict.items())#返回由元組組成的列表

for (k,v) in dict.items():

? ?print("dict[%s]="%k,v)

print(dict.keys())#輸出key的列表

print(dict.values())#輸出value的列表

4、序列:具有索引和切片能力的集合,元組、列表和字符串都屬于序列。

?

包、模塊、函數

python的程序由包(package)、模塊(module)和函數組成。包是一系統模塊組成的集合。模塊是處理某一類問題的函數和類的集合。

包是一個完成特定任務的工具箱,python提供了許多有用的工具包,如字符串處理、圖形用戶接口、Web應用、圖形圖像處理等。

注意:包必須至少含有一個__init__.py文件,該文件內容可以為空。__init__.py用于標識當前文件夾是一個包。

1、模塊把一組相關的函數或代碼組織到一個文件中。一個Python文件即是一個模塊。模塊由代碼、函數或類組成。

當python導入一個模塊時,python首先查找當前路徑,然后查找lib目錄、site-package目錄(python\lib\site-packages)和環境變量PYTHONPATH設置的目錄。

?

模塊導入

import 模塊名

導入模塊一次與多次的意義是一樣的。

重新導入:hello=reload(hello)

如果不想在程序中使用前綴符,可以使用from ... import ...語句將模塊導入。

from module_name import function_name

將函數存儲在被稱為模塊的獨立文件中, 再將模塊導入到主程序中。import語句允許在當前運行的程序文件中使用模塊中的代碼。

通過將函數存儲在獨立的文件中,可隱藏程序代碼的細節,將重點放在程序的高層邏輯上。將函數存儲在獨立文件中后,可與其他程序員共享這些文件而不是整個程序。

導入整個模塊

要讓函數是可導入的,得先創建模塊。模塊 是擴展名為.py的文件,包含要導入到程序中的代碼。

import pizza

Python讀取這個文件時,代碼行import pizza讓Python打開文件pizza.py,并將其中的所有函數都復制到這個程序中。

只需編寫一條import 語句并在其中指定模塊名,就可在程序中使用該模塊中的所有函數。如果你使用這種import 語句導入了名為module_name.py 的整個模塊,就可使用下面的語法來使用其中任何一個函數: module_name.function_name()

導入特定的函數

from module_name import function_name

通過用逗號分隔函數名,可根據需要從模塊中導入任意數量的函數:

from module_name import function_0, function_1, function_2

使用as 給函數指定別名

如果要導入的函數的名稱可能與程序中現有的名稱沖突,或者函數的名稱太長,可指定簡短而獨一無二的別名 ——函數的另一個名稱,類似于外號。要給函數指定這種特殊外 號,需要在導入它時這樣做。

from pizza import make_pizza as mp

使用as 給模塊指定別名

還可以給模塊指定別名。通過給模塊指定簡短的別名(如給模塊pizza 指定別名p ),讓你能夠更輕松地調用模塊中的函數。

import pizza as p

p.make_pizza(16, 'pepperoni')

導入模塊中的所有函數

使用星號(* )運算符可讓Python導入模塊中的所有函數:

from pizza import *

make_pizza(16, 'pepperoni')

import 語句中的星號讓Python將模塊pizza中的每個函數都復制到這個程序文件中。由于導入了每個函數,可通過名稱來調用每個函數,而無需使用句點表示法。

最佳的做法是,要么只導入你需要使用的函數,要么導入整個模塊并使用句點表示法。這能讓代碼更清晰,更容易閱讀和理解。?

?

模塊的屬性

模塊有一些內置屬性,用于完成特定的任務,如__name__、__doc__。每個模塊都有一個名稱。例如,__name__用于判斷當前模塊是否是程序的入口,如果當前程序正在被使用,__name__的值為“__main__”。通常給每個模塊都添加一個條件語句,用于單獨測試該模塊的功能。例如,創建一個模塊myModule:

if __name__=="__main__":

? ?print("myModule作為主程序運行")

else:

? ?print("myModule被另一個模塊調用")

__doc__可以輸出文檔字符串的內容。

?

模塊內置函數:

1、apply():可以實現調用可變參數列表的函數,把函數的參數存放在一個元組或序列中。

? ?apply(func [,args [,kwargs]])

2、filter():可以對某個序列做過濾處理,對自定義函數的參數返回的結果是否為“真”來過濾,并一次性返回處理結果

? ?filter(func or None,sequence) -> list, tuple, or string

3、reduce():對序列中元素的連續操作可以通過循環來處理。

? ?reduce(func,sequence[,initial])->value

4、map():多個序列的每個元素都執行相同的操作,并組成列表返回。

? ?map(func,sequence[,sequence, ...]) ->list

?

2、自定義包

包就是一個至少包含__init__.py文件的文件夾。例如,定義一個包parent,parent包中包含2個子包pack和pack2。pack包中包含myModule模塊,pack2包中包含myModule2模塊。

pack包的__init__.py

__all__=["myModule"] ? ?#用于記錄當前包所包含的模塊,如果模塊多于2個,用逗號分開。這樣就可在調用時一次導入所有模塊

if __name__=="__main__":

??? print("作為主程序運行")

else:

??? print("pack初始化")

pack包的myModule.py

def func():

??? print("pack.myModule.func()")

?

if __name__=="__main__":

??? print("myModule作為主程序運行")

else:

??? print("myModule被另一個模塊調用")

pack2包__init__.py

__all__=["myModule2"] ? #用于記錄當前包所包含的模塊,如果模塊多于2個,用逗號分開。這樣就可在調用時一次導入所有模塊

if __name__=="__main__":

  print("作為主程序運行")

else:

  print("pack2初始化")

包pack2的myModule2:

def func():

  print("pack2.myModule.func2()")

?

if __name__=="__main__":

  print("myModule2作為主程序運行")

else:

  print("myModule2被另一個模塊調用")

parent模塊調用:

from pack import *

from pack2 import *

?

myModule.func()

myModule2.func2()

?

3、函數

定義:

def 函數名(參數1[=默認值1],參數2[=默認值2] ...):

  ...

  return 表達式

調用:

函數名(實參1, 實參2, ...)

注意:實參必須與形參一一對應,如果參數提供默認值,順序可以不一致。

位置實參 :調用函數時,Python必須將函數調用中的每個實參都關聯到函數定義中的一個形參。為此,最簡單的關聯方式是基于實參的順序。

def describe_pet(animal_type, pet_name):

?????"""顯示寵物的信息"""

???? print("\nI have a " + animal_type + ".")

???? print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet('hamster', 'harry')

關鍵字實參:是傳遞給函數的名稱—值對。你直接在實參中將名稱和值關聯起來了,因此向函數傳遞實參時不會混淆(不會得到名為Hamster的harry這樣的結果)。關鍵字實參讓你無需考慮函數調用中的實參順序,還清楚地指出了函數調用中各個值的用途。

def describe_pet(animal_type, pet_name):

???? """顯示寵物的信息"""

???? print("\nI have a " + animal_type + ".")

???? print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet(animal_type='hamster', pet_name='harry')?

默認值

def describe_pet(pet_name, animal_type='dog'):

????? """顯示寵物的信息"""

????? print("\nI have a " + animal_type + ".")

????? print("My " + animal_type + "'s name is " + pet_name.title() + ".")

describe_pet(pet_name='willie')

禁止函數修改列表

function_name(list_name[:]) #要將列表的副本傳遞給函數?

傳遞任意數量的實參

def make_pizza(*toppings):

?????? """打印顧客點的所有配料"""

?????? print(toppings)

make_pizza('pepperoni')

make_pizza('mushrooms', 'green peppers', 'extra cheese')

使用任意數量的關鍵字實參

def build_profile(first, last, **user_info):

????? """創建一個字典,其中包含我們知道的有關用戶的一切"""

????? profile = {}

????? profile['first_name'] = first

????? profile['last_name'] = last?

????? for key, value in user_info.items():

??????????? profile[key] = value

????? return profile

user_profile = build_profile('albert', 'einstein', location='princeton',field='physics')

print(user_profile)

說明:形參**user_info 中的兩個星號讓Python創建一個名為user_info 的 空字典,并將收到的所有名稱—值對都封裝到這個字典中。

?

在函數中為了獲得對全局變量的完全控制(主要用于修改全局變量),需要使用關鍵字global。?

python中的任何變量都是對象,所以參數只支持引用傳遞的方式。即形參和實參指向內存的同一個存儲空間。

python不僅支持函數體內的嵌套,還支持函數定義的嵌套。

函數嵌套的層數不宜過多,就控制在3層以內。

# 嵌套函數

def func():

?? x=1

? ?y=2

? ?m=3

? ?n=4

? ?def sum(a,b):?? # 內部函數

? ? ? ?return a+b

?? def sub(c,d):?? # 內部函數

? ? ? ?return c-d

?? return sum(x,y)*sub(m,n)

print(func())

注意:盡量不要在函數內部定義函數。

lambda函數

lambda函數用于創建一個匿名函數。

func=lambda ?變量1,?變量1, ... : 表示式

調用:func()

# lambda

def func():

?? x=1

? ?y=2

? ?m=3

? ?n=4

? ?sum=lambda a,b:a+b

?? sub=lambda c,d:c-d

?? return sum(x,y) * sub(m,n)

print(func())

注意:lambda也稱之為表達式,只能使用表達式,不能使用判斷、循環等多重語句。

Generator函數

生成器(Generator)的作用是一次產生一個數據項,并把數據項輸出。可以用在for循環中遍歷。Generator函數所具有的每次返回一個數據項的功能,使得迭代器的性能更佳。定義如下:

def 函數名(參數列表):

?? ...

?? yield 表達式

Generator函數的定義與普通函數的定義沒有什么區別,只要在函數體內使用yield生成數據項即可。

Generator函數可以被for循環遍歷,而且可以通過next()方法獲得yield生成的數據項。

# 定義Generator函數

def func(n):

??? for i in range(n):

?????? yield i

??? #for循環中輸出

??? for i in func(3):

?????? print(i)

#使用next()輸出

r=func(3)

print(r.__next__())

print(r.__next__())

print(r.__next__())

注意:yield保留字與return語句的返回值和執行原理并不相同。yield生成值并不會中止程序的執行,返回值繼續往后執行。return返回值后,程序將中止執行。

?

字符串

1、字符串格式化

Python將若干值插入到帶“%”標記的字符串中,語法如下

"%s" % str1

"%s %s"% (str1,str2)

注意:如果要格式化多個值,元組中元素的順序必須和格式化字符串中替代符的順序一致。

Python格式化字符串的替代符及其含義

注意:如果要在字符串中輸出“%”,則需要使用“%%”。

2、字符串的轉義符

Python中轉義字符的用法與Java相同,都是使用“\”作為轉義字符。

Python的轉義字符及其含義

注意:如果要在字符串中輸出"\",需要使用“\\”

3、字符串合并

Python使用“+”連接不同的字符串,如果兩側都是字符串,執行連接操作,如果兩側都是數字類型,則執行加法運算;如果兩側類型不同,則拋出異常:TypeError

4、字符串的截取

Python字符串內置了序列,可以通過“索引”、“切片”獲取子串,也可以使用函數split來獲取。

切片的語法格式如下所示:string[start:end:step]

5、字符串的比較

Python直接使用“==”、“!=”運算符比較兩個字符串的內容。startswith()、endswith()

6、字符串反轉

Python使用列表和字符串索引來實現字符串的反轉,并通過range()進行循環。

# 循環輸出反轉的字符串

def reverse(s):

?? out=""

? ?li=list(s)

?? for i in range(len(li),0,-1):

????? out+="".join(li[i-1])

?? return out

利用序列的“切片”實現字符串反轉最為簡潔:

# 循環輸出反轉的字符串

def reverse(s):???

??? return s[::-1]

7、字符串的查找和替換

查找:find()、rfind()

替換:replace():不支持正則

8、字符串與日期轉換

Python提供了time模塊處理日期和時間

從時間到字符串的轉換strftime(),格式:strftime(format[,tuple])->string

格式化日期常用標記

字符串到日期的轉換:需要進行兩次轉換,使用time模塊和datetime類。轉換過程分為3個步驟。

(1)、調用函數strptime()把字符串轉換為一個元組,進行第一次轉換,格式如下

????????????strptime(string,format)->struct_time

(2)、把表示時間的元組賦值給表示年、月、日的3個變量

(3)、把表示年、月、日的3個變量傳遞給函數datetime(),進行第2次轉換,格式如下

????????????datetime(year,month,day[,hour[,minute[,second[,microsecond[,tzinfo]]]])

正則表達式

1、基礎

正則表達式中的特殊字符

正則表達式中的常用限定符

限定符與“?”的組合

2、使用syt.re模塊處理正則表達式

re模塊的規則選項

pattern對象的屬性和方法

match對象的方法和屬性

?

類與對象

1、類

定義:

class Fruit:

?? def grow(self):?? #類的方法必須有1self參數,但是方法調用時可以不傳這個參數

????? print("Fruit grow ...")

????? if __name__=="__main__":

fruit=Fruit()

fruit.grow()

2、對象的創建

if __name__=="__main__":

??? fruit=Fruit()

??? fruit.grow()

屬性和方法

1、python類的屬性分為私有屬性和公有屬性,但python并沒有提供公有屬性和私有屬性的修飾符。類的私有屬性不能被該類之外的函數調用,類屬性的作用范圍完全取決于屬性的名稱。如果函數、方法或屬性的名字以兩個下劃線開始,則表示私有類型;沒有使用兩個下劃線開始則表示公有屬性。

python的屬性分為實例屬性和靜態屬性。實例屬性是以self作為前綴的屬性。__init__方法即Python類的構造函數。如果__init__方法中定義的變量沒有使用self作為前綴聲明,則該變量只是普通的局部變量。在python中靜態變量稱之為靜態屬性。

class Fruit:

?? price=0 ? ? ? ? ? ? ? ? ?#類屬性

? ?def __init__(self):

????? self.color="red" ? ? #實例屬性

? ? ? zone="China" ? ? ? ? #局部變量

?

if __name__=="__main__":

?? print(Fruit.price)

?? apple=Fruit()

?? print(apple.color)

?? Fruit.price=Fruit.price+10

? ?print("apple's price:"+str(apple.price))

?? banana=Fruit()

?? print("banana's price:" + str(banana.price))

注意:Python的類和對象都可以訪問類屬性。

python提供了直接訪問私有屬性的方式,可用于程序的測試和調試,訪問的格式如下:

instance_classname_attribute ? ? #instance表示對象;classname表示類名;attribute表示私有屬性。

class Fruit:

??? def __init__(self):

??????? self.__color="red" ? ? #私有屬性

?

if __name__=="__main__":

??? apple=Fruit()

??? print(apple._Fruit__color)

類提供了一些內置屬性,用于管理類的內部關系。如,__dict__、__bases__、__doc__等

2、類的方法

類的方法也分為公有方法和私有方法。私有函數不能被該類之外的函數調用,私有方法也不能被外部的類或函數調用。Python使用函數staticmethod()或"@staticmethod"指令的方式把普通函數轉換為靜態方法。Python的靜態方法并沒有和類的實例進行名稱綁定,Python的靜態方法相當于全局函數。

class Fruit:

??? price = 0

?

? ? def __init__(self):

??????? self.__color="red" ? ? #私有屬性

? ? def getColor(self):

??????? print(self.__color)

?

??? @staticmethod

? ? def getPrice():

?? print(Fruit.price)

?

??? def __getPrice():

?????? Fruit.price=Fruit.price+10

? ? ? ?print(Fruit.price)

?

??? count=staticmethod(__getPrice)

?

if __name__=="__main__":

??? apple=Fruit()

??? apple.getColor()

??? Fruit.count()

??? banana = Fruit()

??? Fruit.count()

??? Fruit.getPrice()

Python中還有一種方法稱之為類方法。類方法的作用與靜態方法相似,都可以被其它實例對象共享,不同的是類方法必須提供self參數。類方法可以使用函數classmethod()或“@classmethod”指令定義。

class Fruit:

?? price = 0

?

? ?def __init__(self):

????? self.__color="red" ? ? #私有屬性

? ?def getColor(self):

????? print(self.__color)

?

?? @classmethod

? ?def getPrice(self):

????? print(self.price)

?

?? def __getPrice(self):

????? self.price=self.price+10

? ? ? print(self.price)

?

count=classmethod(__getPrice)

?

if __name__=="__main__":

?? apple=Fruit()

?? apple.getColor()

?? Fruit.count()

?? banana = Fruit()

?? Fruit.count()

?? Fruit.getPrice()

如果某個方法需要被其他實例共享,同時又需要使用當前實例的屬性,則將其定義為類方法。

3、內部類的使用

內部類中的方法可以使用兩種方法調用

第一種方法是直接使用外部類調用內部類,生成內部類的實例,再調用內部類的方法,調用格式如下所示:

object_name=outclass_name.inclass_name()

object_name.method()

第二種方法是先對外部類進行實例化,然后再實例化內部類,最后調用內部類

out_name=outclass_name()

in_name=out_name.inclass_name()

in_name.method()

內部類使用方法:

class Car:

class Door:?????????????? #內部類

? ? ? ?def open(self):??????????

print("open door")

class Wheel:????????????? #內部類

? ? ? ?def run(self):

print("car run")

?

if __name__=="__main__":

car=Car()

backDoor=Car.Door()?????? #內部類的實例化方法一

frontDoor=car.Door()????? #內部類的實例化方法二

backDoor.open()

frontDoor.open()

wheel=Car.Wheel()

wheel.run()

4、__init__方法

python的構造函數名為__init__。__init__方法除了用于定義實例變量外,還用于程序的初始化。__init__方法是可選的,如果不提供__init__方法,Python將會給出一個默認的__init__方法。

5、__del__方法

Python提供了析構函數__del__()。析構函數可以顯式的釋放對象占用的資源,析構函數也是可選的,如果程序不提供析構函數,Python會在后臺提供默認的析構函數。

如果要顯式的調用析構函數,可以使用del語句,在程序的末尾添加如下語句

del fruit ? ? #執行析構函數

6、垃圾回收機制

Python也采用垃圾回收機制清除對象,Python提供了gc模塊釋放不再使用的對象。垃圾回收的機制有許多種算法,Python采用的是引用計算的方式。函數collect()可以一次性收集所有待處理的對象。

import gc

?

class Fruit:

??? def __init__(self,name,color):???? #初始化name,color屬性

? ? ? ?self.__name=name

?????? self.__color=color

??? def getColor(self):

?????? return self.__color

??? def setColor(self,color):

?????? self.__color=color

??? def getName(self):

?????? return self.__name

??? def setName(self,name):

?????? self.__name=name

?

class FruitShop:?????????????????????? #水果店類

? ? def __init__(self):

?????? self.fruits=[]

??? def addFruit(self,fruit):????????? #添加水果

? ? ? ?fruit.parent=self ? ? ? ? ? ? ?#把Fruit類關聯到FruitShop類

? ? ? ?self.fruits.append(fruit)

?

if __name__=="__main__":

??? shop=FruitShop()

??? shop.addFruit(Fruit("apple","red"))

??? shop.addFruit(Fruit("banana", "yellow"))

??? print(gc.get_referents(shop))

??? del shop

??? print(gc.collect())???????????????? #顯式調用垃圾回收器

7、類的內置方法

__new__()

__new__()在__init__()之前調用,用于生成實例對象。利用這個方法和類屬性的特性可以實現設計模式中的單例模式。

class Singleton(object):

?? __instance=None ? ? ? ? ? #定義實例

? ?

? ?def __init__(self):

????? pass

? ?def __new__(cls, *args, **kwargs):??? #在__init__之前調用

? ? ? ?if Singleton.__instance is None:? #生成唯一實例

? ? ? ? ? ?Singleton.__instance=object.__new__(cls,*args,**kwargs)

?????? return Singleton.__instance

8、方法的動態特性

Python作為動態腳本語言,編寫的程序具有很強的動態性。可以動態添加類的方法,把某個已經定義的函數添加到類中。添加新方法的語法格式如下所示:

class_name.method_name=function_name

注意:function_name表示一個已經存在的函數

class Fruit:

??? pass

def add(self):

??? print("grow ...")

?

if __name__=="__main__":

??? Fruit.grow=add()

??? fruit=Fruit()

??? fruit.grow()

繼承

Python不提倡過度包裝。繼承可以重用已經存在的數據和行為,減少代碼的重復編寫。Python在類名后使用一對括號表示繼承關系,括號中的類即為父類。如果父類定義了__init__方法,子類必須顯式調用父類的__init__方法。如果子類需要擴展父類的行為,可以添加__init__方法的參數。

class Fruit():

? ?def __init__(self,color):

  self.color=color

  print("fruit's color:%s"%self.color)

? ?def grow(self):

  print("grow ...")

?

class Apple(Fruit):

? ?def __init__(self,color):

  Fruit.__init__(self,color)

  print("apple's color:%s"%self.color)

?

class Banana(Fruit):

? ?def __init__(self,color):

  Fruit.__init__(self,color)

  print("banana's color:%s"%self.color)

?? def grow(self):

  print("banana grow ...")

?

if __name__=="__main__":

? ?apple=Apple("red")

?? apple.grow()

? ?banana=Banana("yellow")

?? banana.grow()

還可以使用super類的super()調用父類的__init__方法。super()可以綁定type類的父類。

super(type,obj)

class Fruit(object):

  def __init__(self):

    print("parent")

?

class Apple(Fruit):

  def __init__(self):

    super(Apple, self).__init__()

    print("apple child")

?

if __name__=="__main__":

  Apple()

注意:super類的實現代碼繼承了object,因此Fruit類必須繼承object.如果不繼承object,使用super()將出現錯誤。

python沒有提供對接口的支持。

運算符的重載

Python把運算符和類的內置方法關聯起來,每個運算符都對應1個函數。

class Fruit:

  def __init__(self,price=0):

    self.price=price

  def __add__(self, other):???????????? #重載加號運算符

? ? ? ?  ?return self.price+other.price

  def __gt__(self, other):????????????? #重載大于運算符

? ? ? ?  if self.price>other.price:

      flag=True

? ? ? ?  else:

      flag=False

? ? ?   ?return flag

?

class Apple(Fruit):

  pass

class Banana(Fruit):

  pass

python工廠方法模式

工廠方法類圖

實現方法

class Factory:???????????????????????? #工廠類

? ?def createFruit(self,fruit):?????? #工廠方法

? ? ? ?if fruit=="apple":

return Apple()

? elif fruit=="banana":

???? return Banana()

?

class Fruit:

  def __str__(self):

    return "fruit"

?

class Apple(Fruit):

  def __str__(self):

    return "apple"

?

class Banana(Fruit):

  def __str__(self):

    return "banana"

?

if __name__=="__main__":

  factory=Factory()

  print(factory.createFruit("apple"))

  print(factory.createFruit("banana"))

?

異常處理與程序調試

Python中的異常類定義在exceptions模塊中,并繼承自基類BaseException。BaseException類是屬于new-style class,BaseException類下有3個子類,分別是Exception、KeyboardInterrupt、SystemExit。

Exception類是最常用的異常類,該類包括StandardError、StopIteration、GeneratorExit、Warning等異常類。

BaseException
?+-- SystemExit
?+-- KeyboardInterrupt
?+-- GeneratorExit
?+-- Exception
????? +-- StopIteration
????? +-- StopAsyncIteration
????? +-- ArithmeticError
????? |??? +-- FloatingPointError
????? |??? +-- OverflowError
????? |??? +-- ZeroDivisionError
????? +-- AssertionError
????? +-- AttributeError
????? +-- BufferError
????? +-- EOFError
????? +-- ImportError
????? +-- LookupError
????? |??? +-- IndexError
????? |??? +-- KeyError
????? +-- MemoryError
????? +-- NameError
????? |??? +-- UnboundLocalError
????? +-- OSError
????? |??? +-- BlockingIOError
????? |??? +-- ChildProcessError
????? |??? +-- ConnectionError
????? |??? |??? +-- BrokenPipeError
????? |??? |??? +-- ConnectionAbortedError
????? |??? |??? +-- ConnectionRefusedError
????? |??? |??? +-- ConnectionResetError
????? |??? +-- FileExistsError
????? |??? +-- FileNotFoundError
????? |??? +-- InterruptedError
????? |??? +-- IsADirectoryError
????? |??? +-- NotADirectoryError
????? |??? +-- PermissionError
????? |??? +-- ProcessLookupError
????? |??? +-- TimeoutError
????? +-- ReferenceError
????? +-- RuntimeError
????? |??? +-- NotImplementedError
????? |??? +-- RecursionError
????? +-- SyntaxError
????? |??? +-- IndentationError
????? |???????? +-- TabError
????? +-- SystemError
????? +-- TypeError
????? +-- ValueError
????? |??? +-- UnicodeError
????? |???????? +-- UnicodeDecodeError
????? |???????? +-- UnicodeEncodeError
????? |???????? +-- UnicodeTranslateError
????? +-- Warning
?????????? +-- DeprecationWarning
?????????? +-- PendingDeprecationWarning
?????????? +-- RuntimeWarning
?????????? +-- SyntaxWarning
?????????? +-- UserWarning
?????????? +-- FutureWarning
?????????? +-- ImportWarning
?????????? +-- UnicodeWarning
?????????? +-- BytesWarning
?????????? +-- ResourceWarning

StandardError類中常見的異常

Python使用try ... exception語句捕獲異常,異常類型定義在try子句的后面。

注意:如果在except子句后將異常類型設置為"Exception",異常處理程序將捕獲除程序中斷外的所有異常,因為Exception類是其他異常類的基類。

try ... exception用法:

try:

  file("hello.txt",'r')

  print('讀文件')

except IOError:

  print("文件不存在")

except:

  print("程序異常")

else:

  print("結束")

try ... finally用法

try:

  f=file("hello.txt",'r')

  print('讀文件')

except IOError:

  print("文件不存在")

finally:

  f.close()

?

使用raise拋出異常

可以通過raise語句顯式引發異常。一旦執行了raise語句,raise語句后的代碼將不能被執行。

try:

? ?s=None

? ?if s is None:

? ? ? ?print("s 是空對象")

? ? ? ?raise NameError

? ?print(len(s))

except TypeError:

? ?print("空對象沒有長度") ? ?

?

自定義異常

自定義異常必須繼承Exception類,自定義異常按照命名規范以"Error"結尾,使用raise引發,且只能通過手工方式觸發

from __future__ import division

?

class DivisionException(Exception):

? ?def __init__(self,Exception):

? ? ? ?Exception.__init__(self,x,y)

? ? ? ?self.x=x

? ? ? ?self.y=y

?

if __name__=="__main__":

? ?try:

? ? ? ?x=3

? ? ? ?y=2

? ? ? ?if x%y>0:

? ? ? ? ? ?print(x/y)

? ? ? ? ? ?raise DivisionException(x,y)

? ?except DivisionException as div:

? ? ? ?print("DivisionException:x/y=%.2f"%(div.x/div.y))

?

assert語句的使用?

assert語句用于檢測某個條件表達是否為真,又稱斷言語句??

t=("hello")

assert len(t)>=1

注意:python支持形如"m<=x<=n"的表達式。

?

Python中的traceback對象可記錄異常信息和當前程序的狀態。當異常發生時,traceback對象將輸出異常信息。異常信息應從下往上閱讀。

?

python的數據庫編程

Python提供了連接數據庫的專用模塊,不同的數據庫可以使用相應的專用模塊訪問數據庫。

1、cx_Oracle模塊

python的cx_Oracle模塊可以訪問Oracle數據庫。

cx_Oracle模塊的下載地址:http://cx-oracle.sourceforge.net/

代碼示例:

import cx_Oracle

connection=cx_Oracle.Connection("scott","tiger,","ORCL") #連接oracle數據庫

cursor=connection.cursor()?? #獲取cursor對象操作數據庫

sql="";

cursor.execute(sql)

for x in cursor.fetvchall():

  for value in x:

    print(value)

cursor.close()

connection.close()

2、MySQLdb模塊

MySQLdb模塊是python操作MySQL數據庫的。

代碼示例

import os,sys

import MySQLdb

#連接數據庫

try:

  conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="")

  cursor=conn.cursor()

  sql="insert into address(name,address) values (%s,%s)"

  values=(("張三","北京海淀區"),("李四","北京海淀區"),("王五","北京海淀區"))

  cursor.executemany(sql,values)?? #插入多條數據

except Exception as e:

  print(e)

  sys.exit()

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

try:

  sql=""

  cursor.execute(sql)?????????????????? #查詢數據

  data=cursor.fetchall()

  if data:

    for x in data:

      print(x[0],x[1])

  cursor.close()??????????????????????? #關閉游標

  conn.close()????????????????????????? #關閉數據庫

except Exception as e:

  print(e)

3、SQLite數據庫

#-*-coding:utf-8-*-

import sqlite3

#連接數據庫

conn=sqlite3.connect("./address.db")

#創建表

conn.execute("create table if not exists address(id integer primary key autoincrement,name VARCHAR(128),address VARCHAR (128))")

conn.execute("insert into address(name,address) VALUES ('Tom','Beijing road')")

conn.execute("insert into address(name,address) VALUES ('Jerry','Shanghai road')")

#手動提交數據

conn.commit()

#獲取游標對象

cur=conn.cursor()

#使用游標查詢數據

cur.execute("select * from address")

#獲取所有結果

res=cur.fetchall()

print "address:",res

for line in res:

  for f in line:

    print f

#關閉連接

cur.close()

conn.close()

?

Python的持久化模塊

python的標準庫提供了幾種持久化模塊。這些模塊可以模擬數據庫的操作,會把數據保存在指定的文件中。例如dbhash、anydbm、shelve等模塊。

1、dbhash模塊讀寫數據

DBM是一種文件式數據庫,采用哈希結構進行存儲。是一種簡單的數據庫,并不具備管理能力,但是比普通文件更穩定、可靠,而且查詢速度快。unix操作系統使用gdbm,而windows可以使用dbhash模塊。

window環境下DBM數據庫的讀寫操作

import ?dbhash

db=dbhash.open('temp','c')??? #創建并打開數據庫

db["Tom"]="Beijing road" ? ? ?#寫數據

db["Jerry"]="Shanghai road"

for k,v in db.iteritems():??? #遍歷db對象

? ?print(k,v)

if db.has_key("Tom"):

?? del db["Tom"]

print(db)

db.close()???????????????????? #關閉數據庫

注意:dbhash模塊返回字典的key、value值只支持字符串類型

為了統一不同操作系統對DBM數據庫的要求,Python的anydbm模塊提供了操作DBM數據庫的一般性操作。其用法和dbhash模塊類似。

2、shelve模塊讀寫數據

shelve模塊是Python的持久化對象模塊,用法與anydbm模塊的用法相似,但是shelve模塊返回字典的value值支持基本的Python類型。

import ?shelve

addresses=shelve.open('addresses')??? #創建并打開數據庫

addresses["1"]=["Tom","Beijing road","2018-01-03"]????? #寫數據

addresses["2"]=["Jerry","Shanghai road","2008-03-30"]

if addresses.has_key("2"):

??? del addresses["2"]

print(addresses)

addresses.close()???????????????????? #關閉數據庫

注意:shelve模塊返回字典的key值只支持字符串類型

?

文件處理

文件通常用于存儲數據或應用程序的參數。Python提供了osos.pathshutil等模塊用于處理文件。其中包括打開文件、讀寫文件、復制和刪除文件等函數。

文件的處理一般分為以下3個步驟:

1)創建并打開文件,使用file()函數返回一個file對象。

file(name[,?mode[,?buffering]])

文件打開的模式(mode)

參數

說明

r

以只讀的方式打開文件

r+

以讀寫的方式打開文件

w

以寫入的方式打開文件。先刪除文件原有的內容,再重新寫入新的內容。如果文件不存在,則創建1個新的文件。

w+

以讀寫的方式打開文件。先刪除文件原有的內容,再重新寫入新的內容。如果文件不存在,則創建1個新的文件。

a

以寫入的方式打開文件,在文件的末尾追加新的內容。如果文件不存在,則創建1個新的文件.

a+

以讀寫的方式打開文件,在文件的末尾追加新的內容。如果文件不存在,則創建1個新的文件.

b

以二進制的模式打開文件。可與rw、a、+結合使用

U

支持所有的換行符號。"\r""\n","\r\n"都表示換行

注意:對于圖片、視頻等文件必須使用"b"的模式讀寫

2)調用file對象的read()、write()等方法處理文件。

3)調用close()關閉文件,釋放file對象占用的資源。

示例:

#創建文件

context='''helloworld

hellochina

'''

f=open('hello.txt','w')#打開文件

f.write(context)#把字符串寫入文件

f.close()#關閉文件

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#按行讀取方式:使用readline()讀文件

f=open('hello.txt')

while True:

line=f.readline()

if line:

  print(line)

else:

  break

f.close()

?

#多行讀取方式:使用readlins()讀文件

f=open('hello.txt')

lines=f.readlines()

for line in lines:

  print(line)

f.close()

?

#一次性讀取方式:read()

f=open('hello.txt')

context=f.read()

print(context)

f.close()

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#使用writelines()寫文件

f=open('hello.txt','w+')

li=['helloworld\n','hellochina\n']

f.writelines(li)

f.close()

?

#使用write()寫文件:追加新的內容到文件

f=open('hello.txt','a+')

new_context="goodbye"

f.write(new_context)

f.close()

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

文件的刪除需要使用os模塊和os.path模塊。os模塊提供了對系統環境、文件、目錄等操作的系統級的接口函數。

os模塊常用的文件處理函數

函數

說明

access(path,mode)

按照mode指定的權限訪問文件

chmod(path,mode)

改變文件的訪問權限,mode用UNIX系統中的權限代號表示

open(filename,flag[,mode=0777])

按照mode指定的權限打開文件,默認情況下,給所有用戶讀、寫、執行的權限

remove(path)

刪除path指定的文件

rename(old,new)

重命名文件或目錄,old表示原文件或目錄,new表示新文件或目錄

stat(path)

返回path指定文件的所有屬性

fstat(path)

返回打開的文件的所有屬性

lseek(fd,pos,how)

設置文件的當前位置,返回當前位置的字節數

startfile(filepath[,operation])

啟動關聯程序打開文件。例如,打開的是1html文件,將啟動瀏覽器

tmpfile()

創建1個臨時文件,文件創建在操作系統的臨時目錄中

os.path模塊常用的函數

函數

說明

abspath(path)

返回path所在的絕對路徑

dirname(p)

返回目錄的路徑

exists(path)

判斷文件是否存在

getatime(filename)

返回文件的最后訪問時間

getctime(filename)

返回文件的創建時間

getmtime(filename)

返回文件的最后修改時間

getsize(filename)

返回文件的大小

isabs(s)

測試路徑是否為絕對路徑

isdir(path)

判斷path指定的是否為目錄

isfile(path)

判斷path指定的是否為文件

split(p)

對路徑進行分割,并以列表的方式返回

splitext(p)

從路徑中分割文件的擴展名

splitdrive(p)

從路徑中分割驅動器的名稱

walk(top,func,arg)

遍歷目錄樹,與os.walk()的功能相同

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#刪除文件

importos

if os.path.exists('hello.txt'):

  os.remove('hello.txt')

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

file類沒有提供直接復制文件的方法,但是可以使用read(),write()方法模擬實現文件復制功能。

#使用read()、write()實現拷貝

#創建文件hello.txt

src=open('hello.txt','w')

li=['helloworld\n','hellochina\n']

src.writelines(li)

src.close()

#把hello.txt拷貝到hello2.txt

src=open('hello.txt','r')

dst=open('hello2.txt','w')

dst.write(src.read())

src.close()

dst.close()

?

shutil模塊是另一個文件、目錄的管理接口,提供了一些用于復制文件、目錄的函數。copyfile()函數可以實現文件的拷貝,copyfile()函數的聲明如下:

copyfile(src,dst)

文件的剪切可以使用move()函數模擬,該函數聲明如下:

move(src,dst)

#shutil模塊實現文件的拷貝、移動

import shutil

shutil.copyfile('hello.txt','hello2.txt')

shutil.move('hello.txt','../')

shutil.move('hello2.txt','hello3.txt')

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

os模塊的函數rename()可以對文件或目錄進行重命名。

#修改文件名

import os

li=os.listdir(".")

print(li)

if "hello.txt" in li:

  os.rename('hello.txt','hi.txt')

elif 'hi.txt' in li:

  os.rename('hi.txt','hello.txt')

?

#修改文件后綴(即擴展名)

import os

files=os.listdir('.')

for filename in files:

  pos=filename.find('.')

  if filename[pos+1:]=='html':

    newname=filename[:pos+1]+"htm"

    os.rename(filename,newname)

?

#修改文件后綴(即擴展名)--簡化版

import os

files=os.listdir('.')

for filename in files:

  li=os.path.splitext(filename)

  if li[1]==".html":

    newname=li[0]+".htm"

    os.rename(filename,newname)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#文件的查找

import re

f1=open('hello.txt','r')

count=0

for s in f1.readlines():

  li=re.findall('hello',s)

  if len(li)>0:

    count+=li.count("hello")

  print("查找到"+str(count)+"個hello")

  f1.close()

?

#文件內容的替換

f1=open('hello.txt','r')

f2=open('hello2.txt','w')

for s in f1.readlines():

f2.write(s.replace("hello",'hi'))

f1.close()

f2.close()

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

python提供了模塊difflib用于實現對序列、文件的比較。如果要比較2個文件,列出2個文件的異同,可以使用difflib模塊的SequenceMatcher類實現。其中get_opcodes()可以返回2個序列的比較結果。調用get_opcodes之前,需要先生成1SequenceMatcher對象。

#文件比較

import difflib

f1=open('hello.txt','r')

f2=open('hi.txt','r')

src=f1.read()

dst=f2.read()

print(src)

print(dst)

s=difflib.SequenceMatcher(lambda x:x=="",src,dst)

for tag,i1,i2,j1,j2 in s.get_opcodes():

?? print("%ssrc[%d:%d]=%sdst[%d:%d]=%s"%(tag,i1,i2,src[i1:i2],j1,j2,dst[j1:j2]))

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

python標準庫ConfigParser模塊用于解析配置文件。ConfigParser模塊類可讀取ini文件的內容

ODBC.ini

[ODBC 32 bit Data Sources]

MS Access Database=Microsoft Access Driver(*.mdb)(32)

Excel Files=Microsoft Excel Driver(*.xls)(32)

dBASE Files=Microsoft dBase Driver(*.dbf)(32)

[MSAccessDatabase]

Driver32=C:\WINDOWS\system32\odbcjt32.dll

[ExcelFiles]

Driver32=C:\WINDOWS\system32\odbcjt32.dll

[dBASEFiles]

Driver32=C:\WINDOWS\system32\odbcjt32.dll

?

#讀取配置文件

import configparser

config=configparser.ConfigParser()

config.read("ODBC.ini")

sections=config.sections()#返回所有配置塊的標題

print("配置塊:",sections)

o=config.options("ODBC 32 bit Data Sources")#返回所有配置項的標題

print("配置項:",o)

v=config.items("ODBC 32 bit Data Sources")

print("內容:",v)

#根據配置塊和配置項返回內容

access=config.get("ODBC 32 bit Data Sources","Ms Access Database")

print(access)

excel=config.get("ODBC 32 bit Data Sources","Excel Files")

print(excel)

dBASE=config.get("ODBC 32 bit Data Sources","dBASE Files")

2、配置文件寫入

#寫入配置文件

import configparser

config=configparser.ConfigParser()

config.add_section("ODBC Driver Count")#添加新配置塊

config.set("ODBC Driver Count","count",2)#添加新的配置項

f=open("ODBC.ini",'a+')

config.write(f)

f.close()

config.read("ODBC.ini")

3、修改配置文件

#修改配置文件

import configparser

config=configparser.ConfigParser()

config.read("ODBC.ini")

config.set("ODBC Driver Count","count",3)#修改配置項

f=open("ODBC.ini","r+")

config.write(f)

f.close()

4、刪除配置塊和配置項

#刪除配置塊和配置項

import configparser

config=configparser.ConfigParser()

config.read("ODBC.ini")

config.remove_option("ODBC Driver Count","count")#刪除配置項

config.remove_section("ODBC Driver Count")#刪除配置塊

f=open("ODBC.ini","w+")

config.write(f)

f.close()

?

目錄的基本操作

os模塊提供了針對目錄進行操作的函數

函數

說明

mkdir(path[,mode=0777])

創建path指定的1個目錄(一次只能創建一個目錄)

makedirs(name,mode=511)

創建多級目錄,name表示為 "path1/path2/..."一次可以創建多個目錄

rmdir(path)

刪除path指定的目錄(一次只能刪除一個)

removedirs(path)

刪除path指定的多級目錄(一次可以刪除多個目錄)

listdir(path)

返回path指定目錄下所有的文件名

getcwd()

返回當前的工作目錄

chdir(path)

將當前目錄改變為path指定的目錄

walk(top,topdown=True,οnerrοr=None

遍歷目錄樹

?

import os

os.mkdir("hello")

os.rmdir("hello")

os.makedirs("hello/world")

os.removedirs("hello/world")

?

目錄的遍歷有3種實現方法--遞歸函數、os.path.walk()、os.walk()

#1、遞歸遍歷目錄

import os

def visitDir(path):

  li=os.listdir(path)

  for p in li:

    pathname=os.path.join(path,p)

    if not os.path.isfile(pathname):

      visitDir(pathname)

    else:

      print(pathname)

?

if__name__=="__main__":

  path=r"/Users/liudebin/資料"

  visitDir(path)

?

#2os.path.walk()

import os,os.path

def visitDir(arg,dirname,names):

  for filepath in names:

    print(os.path.join(dirname,filepath))

?

if__name__=="__main__":

  path=r"/Users/liudebin"

  os.path.walk(path,visitDir,())

?

#3os.walk

def visitDir(path):

  for root,dirs,files in os.walk(path):

    for filepath in files:

      print(os.path.join(root,filepath))

?

if__name__=="__main__":

  path=r"/Users/liudebin"

  visitDir(path)

?

注意:os.path.walk()os.walk()產生的文件名列表并不相同:

os.path.walk()產生目錄樹下的目錄路徑和文件路徑,而os.walk()只產生文件路徑

?

文件和流

python隱藏了流的機制,在python的模塊中找不到類似Stream類,python把文件的處理和流關聯在一起,流對象實現了File類的所有方法。sys模塊提供了3種基本的流對象---stdinstdoutstderr。流對象可以使用File類的屬性和方法,流對象的處理和文件的處理方式相同。

1、stdin

importsys

sys.stdin=open('ODBC.ini','r')

for line in sys.stdin.readlines():

  print(line)

2、stdout

importsys

sys.stdout=open(r'ODBC.ini','a')

print("goodbye")

sys.stdout.close()

3、stderr

import sys,time

sys.stderr=open('record.log','a')

f=open(r"./hello.txt","r")

t=time.strftime("%Y-%m-%d%X",time.localtime())

context=f.read()

if context:

  sys.stderr.write(t+""+context)

else:

  raise Exception(t+"異常信息")

?

python模擬Java輸入、輸出流

#文件輸入流

def fileInputStream(filename):

  try:

    f=open(filename)

    for line in f:

      for byte in line:

        yield byte

  except StopIteration:

    f.close()

  return

?

#文件輸出流

def fileOutputStream(inputStream,filename):

  try:

    f=open(filename,'w')

    while True:

      byte=inputStream.next()

      f.write(byte)

  except StopIteration:

    f.close()

  return

?

if__name__=="__main__":

  fileOutputStream(fileInputStream('hello.txt'),'hello2.txt')

?

示例:

#文件屬性瀏覽

def showFileProperties(path):

  """顯示文件的屬性,包括路徑、大小、創建日期,最后修改時間,最后訪問時間"""

  import time,os

  for root,dirs,files in os.walk(path,True):

    print("位置:"+root)

    for filename in files:

      stats=os.stat(os.path.join(root,filename))

      info="文件名:"+filename+""

      info+="大小:"+("%dM"%(stats[-4]/1024/1024))+""

      t=time.strftime("%Y-%m-%d%X",time.localtime(stats[-1]))

      info+="創建時間:"+t+""

      t=time.strftime("%Y-%m-%d%X",time.localtime(stats[-2]))

      info+="最后修改時間:"+t+""

      t=time.strftime("%Y-%m-%d%X",time.localtime(stats[-3]))

      info+="最后訪問時間:"+t+""

      print(info)

?

if __name__=="__main__":

  path=r"/Users/liudebin/Downloads/第一二期/第二期"

  showFileProperties(path)

?

注意:os.stat()的參數必須是路徑

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

URL的解析

Python中用來對URL字符串進行解析的模塊是urlparse。該模塊主要的方法有urlparse、urljoin、urlsplit和urlunsplit等

在Python語言中,urlparse對于URL的定義采用的六元組,如下所示:

scheme://netloc/path;parameters?query#fragment

urlparse方法返回對象的屬性

?

可以使用PyChecker和PyLine檢查源代碼。

使用Distutils可以讓開發者輕松地用Python編寫安裝腳本。

日志記錄可以使用標準庫中的logging模塊,基本用法很簡單:

import logging

logging.basicConfig(level=logging.INFO,filename='mylog.log')

logging.info("Starting program")

logging.info("Trying to divide 1 by 0")

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

測試

在Python中代碼測試包含兩種類型:unittestdoctest

unittest模塊:用來寫PyUnit的測試代碼。支持對軟件代碼的自動化測試。

doctest模塊:可以直接在代碼的注釋中寫測試用例。此模塊將測試用例內置在了函數的文檔字符串,從而達到了文檔和測試代碼的統一。

TDD(測試驅動開發):基本思想是測試先行,在開發具體的功能代碼之前,需要先編寫此功能的測試代碼。只有通過了測試的代碼,才能夠加入到代碼倉庫中。

#encoding=utf-8

importunittest

importstring

class StringReplaceTestCase1(unittest.TestCase):

  """測試空字符串替換"""

  def runTest(self):

    src="HELLO"

    exp="HELLO"

    result=string.replace(src,"","")

    self.assertEqual(exp,result)

?

srtc=StringReplaceTestCase1()

srtc.runTest()

在python語言中,可以用內置的assert語句來實現測試用例運行時候的斷言。

unittest模塊中的測試方法

?

?

轉載于:https://www.cnblogs.com/netbloomy/p/6673522.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的1、python基础速成的全部內容,希望文章能夠幫你解決所遇到的問題。

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

91久久国产自产拍夜夜嗨 | 超碰久热| 视频一区二区在线观看 | 美女免费视频黄 | 欧美国产不卡 | 亚洲激情综合 | 在线看一区二区 | 在线免费黄色av | 色香蕉在线视频 | 国产五十路毛片 | 久草在线视频免费资源观看 | 国产精品一区二区三区在线免费观看 | 欧美xxxxx在线视频 | 国产精品麻豆一区二区三区 | 天天天色综合a | 精品二区视频 | 欧美精品在线观看免费 | 免费观看一区二区三区视频 | 免费下载高清毛片 | 成人小视频免费在线观看 | 日色在线视频 | 成人av影视在线 | 91麻豆精品国产91久久久久 | 成人午夜精品久久久久久久3d | 日韩国产精品久久久久久亚洲 | 亚洲mv大片欧洲mv大片免费 | 九九精品久久久 | 免费观看成人av | 丁香免费视频 | 在线观看视频97 | 国产一区在线看 | 国产精品一区二区av日韩在线 | 国产高清综合 | 国产亚洲精品日韩在线tv黄 | 国产成人一区二区三区免费看 | 欧美国产三区 | 成人性生交大片免费观看网站 | 探花视频在线观看免费 | 久久伊人五月天 | 日韩xxxbbb | 免费观看91视频大全 | 久久久久久草 | 六月丁香综合 | 一级片视频在线 | 最近中文字幕mv免费高清在线 | 国产精成人品免费观看 | 91精品专区| 亚洲91在线| 日韩高清精品一区二区 | 精品国产一区二区三区久久久 | 色噜噜在线观看 | 三级黄免费看 | 97**国产露脸精品国产 | 伊人网站 | 日韩在线免费看 | 成年免费在线视频 | 亚洲国产成人av网 | 亚洲尺码电影av久久 | 992tv在线观看网站 | 国产一区二区精品在线 | 国产手机视频精品 | 国产在线va | 黄色免费网战 | 天天天天天天操 | 天天射天天射天天射 | 97国产一区 | 在线免费观看亚洲视频 | 91av在线视频免费观看 | 日韩电影在线观看中文字幕 | 国内精品久久久久久久久 | 国产精品第7页 | 521色香蕉网站在线观看 | 欧美国产日韩一区 | 91精品国产欧美一区二区成人 | 最新黄色av网址 | 免费色av | 亚洲一区二区三区精品在线观看 | 久久久久久久国产精品 | 国产精品爽爽爽 | 丁香婷婷亚洲 | 欧美综合久久 | 色综合天天色综合 | 黄色免费大片 | 久久久精品影视 | 久久伊人色综合 | 亚洲三级黄色 | 精品久久亚洲 | 久久久免费播放 | 探花在线观看 | 伊人夜夜 | 欧美日韩三级 | 免费瑟瑟网站 | 亚洲国产中文字幕在线视频综合 | 69欧美视频 | 99视频在线精品国自产拍免费观看 | 欧美日韩高清在线 | 国产成人高清在线 | 狠狠狠狠狠狠 | 久久亚洲人 | 视频在线观看入口黄最新永久免费国产 | 成人教育av| 久久久久久久影视 | 波多野结衣精品在线 | 欧美成a人片在线观看久 | 国产黄色片免费 | 天天天干天天射天天天操 | 久久在线电影 | 日韩av有码在线 | 2000xxx影视| 国产精品入口传媒 | 91视频免费看网站 | 国产中文字幕亚洲 | 黄色网在线免费观看 | 麻豆一精品传二传媒短视频 | 在线播放一区二区三区 | 国产免费午夜 | 久久免费国产视频 | 久草www| 99久高清在线观看视频99精品热在线观看视频 | 日韩极品在线 | 欧美日韩一区二区三区视频 | 欧美精品九九 | 天天色棕合合合合合合 | 91丨九色丨高潮 | 午夜免费久久看 | 亚洲国产网站 | 欧美亚洲成人xxx | 美女网站视频免费都是黄 | 毛片网站观看 | 九九热精| 狠狠干中文字幕 | 9色在线视频 | 日本精品久久 | 二区三区av | 伊人五月天 | 天天操网站 | 99r精品视频在线观看 | 人人澡人摸人人添学生av | 91网站在线视频 | 久久人人精品 | 成年免费在线视频 | 久久手机精品视频 | 99r精品视频在线观看 | 亚洲五月 | 97超碰在线久草超碰在线观看 | 天堂黄色片 | 99精品国产高清在线观看 | 伊人国产在线观看 | 亚洲国产精品视频在线观看 | 国产精品入口麻豆www | 狠狠色丁香婷婷综合基地 | 久久中文字幕在线视频 | 国产成人在线播放 | 99国产精品久久久久久久久久 | 国产99在线播放 | 国产一区视频导航 | 在线观看网站你懂的 | 欧美一区二区日韩一区二区 | 97福利视频 | 在线导航福利 | 中文字幕在线看片 | 超碰在线人人97 | 欧美日韩亚洲一 | 在线免费观看黄色 | 久久国语露脸国产精品电影 | 激情五月综合 | 国产免费一区二区三区最新 | 色综合久久久久久中文网 | 伊人中文网 | 最新色视频 | 一本一本久久a久久精品牛牛影视 | 9999国产| 久久69精品久久久久久久电影好 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 日韩精品欧美视频 | 亚洲成人欧美 | 日本性生活一级片 | 日韩高清在线观看 | 婷婷六月丁 | 99久久夜色精品国产亚洲96 | 亚洲黄色成人 | 欧美精品v国产精品v日韩精品 | 亚洲色综合 | 激情网站五月天 | 处女av在线 | www.99久久.com| 一级成人免费视频 | 97超视频在线观看 | 四虎国产永久在线精品 | 丁五月婷婷 | 天天干天天操天天 | 婷婷亚洲最大 | 欧美久久久一区二区三区 | 久久天天躁狠狠躁夜夜不卡公司 | 极品久久久 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产成人精品国内自产拍免费看 | 中文字幕日本在线观看 | 香蕉日日 | 欧美日韩中文在线 | 黄色软件网站在线观看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 午夜免费视频网站 | 97国产大学生情侣酒店的特点 | 国产在线观看你懂得 | 操久在线 | 亚洲成av人片 | 最新91在线视频 | 日韩av中文 | 久久国产精品99国产 | 我爱av激情网 | 久久这里精品视频 | 国产精品都在这里 | 在线观看欧美成人 | 欧美国产不卡 | 国产视频中文字幕在线观看 | 国产一区免费视频 | 国产日韩精品欧美 | 日本公妇在线观看高清 | 韩日精品在线 | 麻豆你懂的 | 99精品视频免费全部在线 | 97人人模人人爽人人少妇 | 国产一区视频导航 | 在线观看韩日电影免费 | 久久免费视频这里只有精品 | 可以免费观看的av片 | 久久精品欧美一区 | 天天夜操| 992tv在线观看网站 | 狠狠操夜夜操 | 亚洲欧洲视频 | 欧美激情va永久在线播放 | 欧洲不卡av | 精品久久一区 | 不卡电影免费在线播放一区 | 天天曰视频 | av大全在线看 | 国产亚洲精品久久久久秋 | 久久久久久久久亚洲精品 | 手机在线免费av | 最新国产精品拍自在线播放 | 亚洲天堂网在线观看视频 | 在线观看你懂的网站 | 免费av影视 | 美女视频免费精品 | 国产又粗又猛又爽又黄的视频免费 | 手机成人在线 | 狠狠狠的干| 日韩中文字幕视频在线 | 久久久久亚洲精品成人网小说 | 午夜精品久久久久久久久久久久 | 国产成人一区二区啪在线观看 | 国产精品久久久久久婷婷天堂 | 国产精品免费在线观看视频 | 国产免费一区二区三区网站免费 | 一区中文字幕电影 | 免费看片黄色 | 五月天久久综合网 | 精品国产福利在线 | 日韩成人免费在线电影 | 国产精品视频免费观看 | 在线观看国产福利片 | 精品在线视频一区 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 波多野结衣一区二区 | 91成人看片 | 国产精品麻豆视频 | 成人丁香花 | 香蕉视频国产在线 | 国产免费叼嘿网站免费 | av国产在线观看 | 成人黄色影片在线 | 亚洲好视频 | 成人在线网站观看 | 久青草影院 | 久久深夜福利免费观看 | 久久国产精品久久w女人spa | 日本中文字幕在线免费观看 | 日女人电影 | 97视频免费播放 | 日韩欧美一区二区三区免费观看 | 亚州精品在线视频 | 97超碰成人 | 91香蕉视频720p | 成人免费看片98欧美 | 国产精品男女啪啪 | 久草视频在| 欧美视频国产视频 | 精品一区二区在线播放 | 97在线观视频免费观看 | 成人h动漫在线看 | 在线观看亚洲 | 亚洲精品中文在线观看 | 韩国三级av在线 | 一级黄色在线免费观看 | 欧美精品亚洲精品日韩精品 | 深爱激情五月综合 | 精品九九九 | 在线观看韩国av | 天天射天天干天天插 | 日韩av免费一区二区 | 99精品久久只有精品 | 91精品国产91久久久久久三级 | 久久天堂亚洲 | 国产剧情在线一区 | 亚洲综合干 | 黄色影院在线播放 | 中文字幕中文字幕中文字幕 | 国产在线播放一区二区三区 | 亚洲最新av在线网站 | 成年人免费在线观看网站 | 国产精品2020 | 手机看片国产 | 激情欧美日韩一区二区 | 久久精品一 | 国产色爽 | 国产在线观看高清视频 | 福利视频区 | 国产成人av综合色 | 欧美日本在线视频 | 久久久在线免费观看 | 视频 国产区 | 日韩精品在线观看av | 91在线看网站 | 精品一二区 | 日韩精品中文字幕久久臀 | 午夜精品一区二区三区在线视频 | 免费在线观看亚洲视频 | 999成人精品 | 三级在线国产 | 波多野结衣视频一区二区 | 天天射天天添 | 国产黄色免费电影 | 丰满少妇在线观看资源站 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 99色视频在线 | 国产偷v国产偷∨精品视频 在线草 | 亚洲国产天堂av | 黄色视屏av| 91精品影视 | 欧美另类v | 国产成人精品一区二区三区在线观看 | 激情综合五月天 | 成人午夜在线电影 | 一级a性色生活片久久毛片波多野 | 久久久久久国产一区二区三区 | 狠狠躁日日躁狂躁夜夜躁av | 日韩视频欧美视频 | 99热这里只有精品8 久久综合毛片 | 久久久久久国产精品免费 | 一区二区高清在线 | 91麻豆文化传媒在线观看 | 国产又粗又猛又黄又爽的视频 | 色网站视频 | 美女啪啪图片 | 免费一级片视频 | 久久99国产一区二区三区 | 日操干| 久久亚洲免费视频 | 夜夜操天天 | 91亚洲精品国偷拍自产在线观看 | 亚洲天堂网在线观看视频 | 亚洲成人精品av | 日韩午夜精品 | 久久av高清| 国产欧美精品xxxx另类 | 日本精品中文字幕在线观看 | 国产亚洲精品福利 | 黄色日本免费 | 美女国产免费 | 在线观看免费成人av | 91精品在线免费 | 日韩色在线观看 | 婷婷色中文字幕 | 日日干美女| 久草热视频| 啪啪小视频网站 | 激情综合网五月激情 | 国产99久久精品一区二区300 | 99福利影院 | 国产主播大尺度精品福利免费 | 国产精品毛片久久久久久 | 国产香蕉久久 | 又黄又爽又无遮挡免费的网站 | 九九热只有精品 | 亚洲第一色 | 日日久视频 | 亚洲一区二区黄色 | 日本在线视频一区二区三区 | 精品一区二区三区电影 | 国产麻豆电影在线观看 | 国产 视频 高清 免费 | 天天拍夜夜拍 | 精品视频123区在线观看 | 四虎国产免费 | 欧美大jb| 天天射天天射天天射 | 亚洲精品高清一区二区三区四区 | 在线a亚洲视频播放在线观看 | 久久精品免费看 | 在线看小早川怜子av | 美女黄久久 | 日韩免费高清 | 亚洲波多野结衣 | 在线免费日韩 | 久久精品麻豆 | 丁香婷婷基地 | 人人超碰97| 欧美中文字幕久久 | 久久96国产精品久久99软件 | 亚洲国产丝袜在线观看 | av品善网 | 国产精品99久久免费黑人 | 精品 激情 | 一 级 黄 色 片免费看的 | av福利在线看 | 婷婷色中文字幕 | 久久久久免费精品视频 | 亚洲黄色一级大片 | 亚洲国产成人精品电影在线观看 | av在线中文| 亚洲欧美国产日韩在线观看 | 天天操人人要 | 久草视频看看 | 97伊人网| 天天操月月操 | 91女神的呻吟细腰翘臀美女 | 久久精品99国产精品酒店日本 | 女人18片 | 久草在线综合网 | 国产91在线观看 | 天天射天天 | 久久成人精品电影 | 狠狠色伊人亚洲综合网站色 | 日韩在线电影一区 | 在线国产精品视频 | 欧美在线观看视频一区二区 | 久草网视频在线观看 | 欧美色图p| 久久国产午夜精品理论片最新版本 | 亚洲精品国产麻豆 | 久久99亚洲精品久久 | 欧美久久电影 | av高清不卡 | 狠狠操夜夜 | 免费高清国产 | 视频成人永久免费视频 | 久久99国产综合精品 | 国内视频一区二区 | av午夜电影 | 99精品观看 | 国产视频91在线 | 97精品免费视频 | 亚洲日本在线视频观看 | 国产在线黄 | 波多野结衣在线观看一区二区三区 | 欧美人操人 | 亚洲无线视频 | 亚洲精品456在线播放乱码 | 国产一级免费观看视频 | 又黄又爽又无遮挡免费的网站 | 久草手机视频 | 狠狠色狠狠色综合日日小说 | 国产尤物视频在线 | 韩国三级av在线 | 91免费在线播放 | 人人爽人人爽人人片 | 日韩区视频| 国产精品久久久久久久久费观看 | 亚洲一区精品人人爽人人躁 | 色a网| 婷婷婷国产在线视频 | 欧美日韩国产精品爽爽 | www.亚洲精品视频 | 黄色精品一区二区 | 国产黄色av | 中文字幕精品视频 | 五月婷婷导航 | 亚洲精品www久久久 www国产精品com | 99视频在线免费看 | 福利视频午夜 | 久久久穴 | 日本在线观看视频一区 | 国产成人三级在线观看 | 天天操天天草 | 777xxx欧美 | 一区二区在线电影 | 色婷婷国产在线 | 欧美精品中文字幕亚洲专区 | 久久成人毛片 | 国产又黄又爽无遮挡 | 首页av在线 | 久久综合九色综合欧美狠狠 | 国产精品资源网 | 亚洲精品国产综合久久 | 久久久久成人精品亚洲国产 | 婷婷亚洲综合 | 久久精品一区二区三区中文字幕 | 午夜久久久久久久久久久 | 91综合久久一区二区 | 免费视频a | 狠狠躁日日躁 | 亚洲精品乱码久久久久久蜜桃不爽 | www.狠狠色.com| 国产精品日韩高清 | 国产高潮久久 | 久久手机免费视频 | 欧美日韩三级 | 日本乱视频 | 国产一区 在线播放 | 91av视频在线免费观看 | 亚洲国产播放 | 成人91视频 | av在线电影免费观看 | 人人藻人人澡人人爽 | 91手机视频 | 久久看片网站 | 婷婷狠狠操 | 色视频在线观看 | 成人a视频 | 国产乱对白刺激视频在线观看女王 | 国产精品成人在线 | 久久精品国产v日韩v亚洲 | 四虎最新入口 | 亚洲成人av电影 | 久久久亚洲麻豆日韩精品一区三区 | 亚洲一级理论片 | 久久免费在线 | 欧美三人交 | 在线亚洲天堂网 | 亚洲做受高潮欧美裸体 | 一区二区三区四区五区在线 | 99 视频 高清 | 欧美精品999| 中文字幕在线观看免费高清电影 | 久久精品亚洲国产 | 国产精品久久片 | 91麻豆精品国产91久久久久久久久 | 日韩免费视频在线观看 | 免费看污污视频的网站 | 国产 视频 高清 免费 | 丁香伊人网 | 精品国产成人在线影院 | 国产在线探花 | 国产乱码精品一区二区蜜臀 | av免费电影在线观看 | 在线视频观看亚洲 | 日韩资源在线 | 天天操天天摸天天干 | 天天综合成人 | 91porny九色91啦中文 | 免费看的黄色片 | 插综合网| wwwwww黄 | 成年人免费在线观看网站 | 国产精品入口麻豆 | 伊人狠狠色丁香婷婷综合 | 国产精品com | 国产在线观看二区 | 免费看污在线观看 | 午夜精品久久久久久久99婷婷 | 91久草视频| 免费看色网站 | 国产麻豆视频免费观看 | 涩涩网站在线观看 | 日韩欧美视频二区 | 96av视频 | 五月天.com| 欧美在线不卡一区 | 日韩精品在线免费播放 | 狠狠五月天| 成人免费在线电影 | wwwwww色| 久久成人综合 | 91精品国产高清自在线观看 | 99久久99久久精品国产片果冰 | 亚洲国产午夜视频 | 91视频在线免费看 | 亚洲视频免费在线观看 | 91亚洲精品久久久 | www.国产精品 | 亚洲国产久 | 精品亚洲男同gayvideo网站 | 亚洲精品中文字幕视频 | 亚洲成人av片在线观看 | 在线国产视频 | 色人久久 | 91香蕉视频黄色 | 国产免费观看久久黄 | 成人性生活大片 | 91av成人| 在线观看av黄色 | 韩日精品在线观看 | 国产精品va在线观看入 | 精品国产大片 | 色99在线| 中文网丁香综合网 | 久久夜视频 | 色网站在线免费 | 在线观看黄网站 | 麻豆国产精品永久免费视频 | 在线视频国产区 | 五月婷婷电影网 | 91久久精品日日躁夜夜躁国产 | 日韩大陆欧美高清视频区 | 99视频精品在线 | 色偷偷88888欧美精品久久久 | 免费男女羞羞的视频网站中文字幕 | 亚洲在线激情 | 人人插人人做 | 在线观看中文字幕dvd播放 | 在线亚洲成人 | 97av影院| 天天干.com| 香蕉视频亚洲 | 成人av网页| 中国成人一区 | 99精品免费 | 天天综合中文 | 狠狠色丁香久久婷婷综合_中 | 国产色婷婷精品综合在线手机播放 | 国产成人免费av电影 | 91精品办公室少妇高潮对白 | 91pony九色丨交换 | 99久久精品免费看国产四区 | 婷婷伊人综合亚洲综合网 | 国产无套一区二区三区久久 | 成年人国产在线观看 | 超碰在线人人 | 2023av在线 | 欧美一二在线 | 美女久久久久久久 | 精品久久一区二区三区 | 国产一区精品在线 | 日韩免费观看一区二区三区 | 欧美精品亚洲精品日韩精品 | 亚洲国产97在线精品一区 | 日韩免费二区 | 亚洲va在线va天堂 | 亚洲午夜av久久乱码 | 欧美巨大荫蒂茸毛毛人妖 | 亚洲国产一区在线观看 | 国产精品久久久免费 | 亚洲2019精品 | 日韩伦理片一区二区三区 | 欧美精品乱码久久久久久按摩 | av电影在线观看完整版一区二区 | 久久婷婷色| 天天干夜夜擦 | 在线天堂中文www视软件 | 国产精品99久久久久久人免费 | 中文字幕免费播放 | 亚州国产精品 | mm1313亚洲精品国产 | 国产美女精品视频 | 中文永久免费观看 | 久久久www免费电影网 | 久久人人精品 | 国产中年夫妇高潮精品视频 | 日韩免费在线视频观看 | 国产日韩精品一区二区三区在线 | 欧美有色| 高清久久久久久 | 久草视频在线免费看 | 精品在线观看一区二区三区 | 欧美精品小视频 | a一片一级 | 国产福利在线免费 | а天堂中文最新一区二区三区 | 免费日p视频 | www在线观看视频 | 久久开心激情 | 中文字幕一区三区 | 麻豆视频免费在线观看 | 一级性视频 | 天天综合久久综合 | 欧美国产视频在线 | 午夜免费福利片 | 久久99国产精品二区护士 | 天天激情| 久久午夜电影院 | 丁香电影小说免费视频观看 | 狠狠色噜噜狠狠 | 免费看高清毛片 | 成人v | 中文字幕在线免费播放 | 四虎影视精品成人 | 精品久久99 | 天天色综合天天 | 青青色影院| 国产精品99久久免费黑人 | 久久兔费看a级 | 久草在线综合网 | 午夜精品福利一区二区 | 日本aaa在线观看 | 成人网中文字幕 | 亚洲国产精品va在线 | 色网站在线看 | 久久精品一二三区白丝高潮 | 中文视频一区二区 | 国产精品免费观看在线 | 亚洲不卡av一区二区三区 | 在线视频一区二区 | 91视频三区 | 深爱激情综合网 | 韩国精品福利一区二区三区 | 激情综合五月 | 美国三级黄色大片 | 日本公妇色中文字幕 | 午夜电影中文字幕 | 91你懂的 | 欧美aa一级片 | 最新真实国产在线视频 | 久久免费视频国产 | 夜夜操综合网 | 波多野结衣在线中文字幕 | 国产精品二区三区 | 欧美va天堂va视频va在线 | 毛片在线播放网址 | 青青河边草免费直播 | 精品国产乱码久久久久 | 亚洲男人天堂2018 | 伊人狠狠干 | 99 视频 高清 | 天天插天天干 | 免费色视频网址 | 久久精品视频网址 | 色www精品视频在线观看 | 日韩av成人在线观看 | 亚洲成a人片在线www | 欧美日韩国产一区 | 久久久久久久久久亚洲精品 | 天天操月月操 | 免费观看黄色12片一级视频 | 激情网站网址 | 久国产在线播放 | 久草精品在线播放 | 69国产盗摄一区二区三区五区 | 中文字幕在线观看资源 | 国产免费黄视频在线观看 | 国产99免费 | 亚洲一区二区精品在线 | 天天操天天射天天爱 | 免费在线观看av电影 | 欧美片一区二区三区 | 色噜噜在线观看视频 | 午夜a区 | 91精品久久久久久粉嫩 | 国产成人久久av免费高清密臂 | 国产视| 国产欧美中文字幕 | 国产一区播放 | 日韩色区 | 天天干,夜夜爽 | 国产精品久久久久久久久大全 | 国产精品麻豆视频 | 久久久久一区二区三区四区 | 国产色在线,com | 91视频在线免费看 | 在线香蕉视频 | 精品视频在线视频 | 国产精品女视频 | 三级动态视频在线观看 | 日韩电影在线视频 | 久久成人麻豆午夜电影 | 亚洲资源视频 | 香蕉网站在线观看 | 青青久视频 | 亚洲精品福利在线 | 黄色看片 | 中文国产成人精品久久一 | 国产原创在线观看 | 久久久久国产免费免费 | 97在线观看免费观看 | 91精品一区二区三区久久久久久 | 夜色.com| 亚洲五月婷 | 免费看三级 | 国产伦理一区 | 毛片在线播放网址 | 成人影视免费看 | 六月激情网 | 99色在线视频| 91精品黄色 | 免费在线国产 | 五月婷婷深开心 | 在线天堂视频 | 国产一区免费看 | 久久99国产精品免费 | 九九九视频精品 | 亚洲精品一区二区网址 | 久久久影片| 亚洲天堂激情 | www好男人| 久久日本视频 | 久久爱992xxoo | 久久在线影院 | 久久怡红院| 免费在线观看黄色网 | 韩国av一区二区三区在线观看 | 国产视频第二页 | 97国产大学生情侣酒店的特点 | 亚洲综合网站在线观看 | 精品国产人成亚洲区 | 精品国产亚洲日本 | 日韩在线观看的 | 国产精品免费在线观看视频 | 全久久久久久久久久久电影 | 中文字幕在线国产 | 国产精品乱码久久 | 国产黄色片久久 | 成人超碰97 | 911久久 | 五月婷婷丁香激情 | 国产系列在线观看 | 久久久综合香蕉尹人综合网 | 天天干天天拍天天操天天拍 | 2024国产在线 | 91看片在线看片 | 国产精品国产三级国产aⅴ9色 | 国产精品白丝av | 亚洲视屏一区 | 插久久 | 国产成人精品电影久久久 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 久久99深爱久久99精品 | 久久99视频免费观看 | 91亚洲精品久久久蜜桃借种 | 久久久久欧美精品 | 91精品小视频 | www.色午夜,com| 四虎国产 | 96精品高清视频在线观看软件特色 | 精品黄色片| 国内视频在线观看 | 国产精品午夜在线观看 | 国产精品美女免费视频 | 婷五月天激情 | 精品二区久久 | 久久精品79国产精品 | 一区二区不卡视频在线观看 | 亚洲欧美日韩国产一区二区 | 日韩免费专区 | 五月激情姐姐 | 午夜色场 | 国产精品美女www爽爽爽视频 | 免费在线国产 | 免费不卡中文字幕视频 | 亚洲日本国产精品 | 天天色官网 | 超碰97人人干 | 综合国产在线 | 天天天色综合 | 日韩av综合网站 | 午夜三级在线 | 超碰97在线人人 | 一区二区 不卡 | 美女很黄免费网站 | 久久综合偷偷噜噜噜色 | 91视频啪 | 中文不卡视频 | 精品国产一区二区久久 | 国产精品久久久久av福利动漫 | www视频免费在线观看 | 欧美日韩一区二区在线 | 天天干天天操天天操 | 天天操天天干天天玩 | 午夜精品福利一区二区 | 久久久综合香蕉尹人综合网 | 国产亚洲欧美在线视频 | 国产91免费在线观看 | 500部大龄熟乱视频使用方法 | 玖玖爱国产在线 | av电影一区二区三区 | 久久精品视频免费播放 | 日韩高清免费观看 | 午夜免费视频网站 | 国产亚洲无 | 亚洲少妇自拍 | 日本黄色大片免费看 | 久久深爱网| 精品影院 | 1024在线看片 | 日韩激情久久 | 黄色资源在线观看 | 天天草天天 | 五月天激情婷婷 | 97看片 | 91激情视频在线观看 | 国产欧美中文字幕 | 国产精品在线看 | 国产福利a | 亚洲免费一级电影 | 国产一级a毛片视频爆浆 | 99热精品久久 | 91亚洲精品久久久中文字幕 | 国产在线一线 | 中文字幕在线播放第一页 | 激情 亚洲 | av在线免费不卡 | 国内视频在线观看 | 狠狠干电影 | 粉嫩av一区二区三区入口 | 免费日韩一区 | 日b黄色片 | 最新国产视频 | 久艹在线播放 | 国产美女精品久久久 | 精品国产一区二 | 日韩大片在线观看 | av超碰在线 | 国产视频在线观看一区 | 天天色天天操综合网 | 日韩特级毛片 | 青青草国产成人99久久 | 99在线视频网站 | 久久好看 | 国产高清视频在线观看 | 天天舔天天射天天操 | 久久久九色精品国产一区二区三区 | 成人a视频片观看免费 | 亚洲国产高清在线 | 国产黑丝袜在线 | 国产黄色美女 | 色先锋av资源中文字幕 | 男女啪啪网站 | 国产一区二区在线播放 | 午夜 久久 tv| 超碰在线中文字幕 | 精品国产区在线 | 伊人五月天.com | 精品一区二区日韩 | 国产精品系列在线观看 | www欧美色 | 亚州精品天堂中文字幕 | 国产成人免费观看久久久 | 五月婷婷在线观看 | 国产精品美女久久久网av | 国产伦精品一区二区三区… | 欧美电影在线观看 | 中文字幕久久久精品 | 能在线看的av | 国产美女黄网站免费 | 丁香婷婷久久 | 亚洲va欧美| 国产无吗一区二区三区在线欢 | 91大神免费视频 | 午夜精品av | 国产精品一区二区三区免费视频 | 91成人在线视频 | 美女国内精品自产拍在线播放 | jizz999| 在线色资源 | 玖玖玖精品 | 欧美精品网站 | 激情影院在线 | 98超碰在线 | 人人爽人人av | 97国产精品 | 久草久草在线观看 | 二区三区毛片 | 在线免费观看成人 | 成年人免费观看国产 | 人成在线免费视频 | 五月天激情在线 | 久久久亚洲成人 | 99热最新网址 | 69xx视频| 亚洲无吗视频在线 | 亚欧日韩成人h片 | 天天摸天天操天天舔 | av成人黄色 | 99精品色 | 午夜黄色影院 | 在线免费观看麻豆视频 | 69精品在线 | 欧美成人影音 | 超碰在线cao | 中文在线字幕观看电影 | 91大神dom调教在线观看 | 久久亚洲精品电影 | 日韩欧美69 | 国产 字幕 制服 中文 在线 | 国产黄免费在线观看 | 5月丁香婷婷综合 | h文在线观看免费 | 久久久久久久久久久福利 | 夜夜操天天操 | 人人盈棋牌| 一本一本久久a久久精品综合 | av大全在线免费观看 | 国产黄在线看 | 久久久久久黄色 | av不卡免费看 | 精品久久久久久久久亚洲 | 中文字幕在线播放一区二区 | 日韩高清不卡一区二区三区 |