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

歡迎訪問 生活随笔!

生活随笔

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

python

python定义构造函数、包括颜色价格品牌_《Python编程与算法基础教程》(第二版),蒋洪宇,青松,第9章:课后练习,程序设计,版江红余,第九章,习题,答案...

發布時間:2024/8/1 python 53 豆豆

例9.1~例9.53

補充:

類名為有效的標識符,一般為多個單詞組成的名稱,每個單詞除第一個字母大寫外,其余的字母均小寫

一:類對象和實例對象

例9.1(創建類對象和實例對象)

>>> class Person:

pass

>>> p = Person()

>>> print(Person, type(Person), id(Person))

2096437524072

>>> print(p, type(p), id(p))

<__main__.person object at> 2096441625544

例9.2(實例對象的創建和使用)

Python創建實例對象的方法無須使用關鍵字new,而是直接像調用函數一樣調用類對象并傳遞參數,因此類對象是可調用對象(Callable)

在Python內置函數中,bool、float、int、str、list、dict、set等均為可調用內置類對象

>>> c = complex(1, 2)

>>> c.conjugate()

(1-2j)

>>> c.real

1.0

二:屬性

例9.3(定義實例屬性)

Python變量不需要聲明,可直接使用。所以建議用戶在類定義的開始位置初始化類屬性,或者在構造函數

__init__()

中初始化實例屬性

>>> class Person:

def __init__(self, name, age):

self.name = name

self.age = age

def say_hi(self):

print("您好,我叫", self.name)

>>> p = Person('zgh', 18)

>>> p.say_hi()

您好,我叫 zgh

>>> print(p.age)

18

例9.4(定義類對象屬性)

類屬性如果通過

obj.屬性名

來訪問,則屬于該實例地實例屬性

>>> class Person:

count = 0

name = "Person"

>>> Person.count += 1

>>> print(Person.count)

1

>>> print(Person.name)

Person

>>> p1 = Person(); p2 = Person()

>>> print(p1.name, p2.name)

Person Person

>>> Person.name = "雇員"

>>> print(p1.name, p2.name)

雇員 雇員

>>> p1.name = '員工'

>>> print(p1.name, p2.name)

員工 雇員

例9.5(私有屬性)

Python類的成員沒有訪問控制限制,這與其他面向對象語言不同

通常約定以兩個下劃線開頭,但是不以兩個下劃線結束的屬性是私有的(private),其它為公共的(public)

>>> class Person:

__name = 'class Person'

def get_name():

print(Person.__name)

>>> Person.get_name()

class Person

>>> Person.__name

Traceback (most recent call last):

File "", line 1, in

Person.__name

AttributeError: type object 'Person' has no attribute '__name'

例9.6、9.7、9.8(property裝飾器)

面向對象編程的封裝性原則要求不直接訪問類中的數據成員

在Python中可以定義私有屬性,然后定義相應的訪問該私有屬性的函數,并使用@property裝飾器來裝飾這些函數

程序可以把函數“當作”屬性訪問,從而提供更加友好的訪問方式

>>> class Person:

def __init__(self, name):

self.__name = name

@property

def name(self):

return self.__name

>>> p = Person('zgh666')

>>> print(p.name)

zgh666

嘗試了一個想法(如果對象也有一個同名的屬性,會怎么樣?):

>>> class Person:

name = 'zgh'

def __init__(self, name):

self.__name = name

@property

def name(self):

return self.__name

>>> p = Person('zgh666')

>>> print(p.name)

zgh666

很顯然,返回的是裝飾器修飾的name函數

@property裝飾器默認提供一個只讀屬性,如果需要,可以使用對應的getter、setter和deleter裝飾器實現其他訪問器函數

>>> class Person:

def __init__(self, name):

self.__name = name

@property

def name(self):

return self.__name

@name.setter

def name(self, value):

self.__name = value

@name.deleter

def name(self):

del self.__name

>>> p = Person('zgh')

>>> p.name = 'Zhanggguohao'

>>> print(p.name)

Zhanggguohao

property(fget=None, fset=None, fdel=None, doc=None)

>>> class Person:

def __init__(self, name):

self.__name = name

def getname(self):

return self.__name

def setname(self, value):

self.__name = value

def delname(self):

del self.__name

name = property(getname, setname,delname, "I'm the 'name' property.")

>>> p = Person('zgh')

>>> print(p.name)

zgh

>>> p.name = 'zgh666'

>>> print(p.name)

zgh666

例9.9(自定義屬性)

在Python中,可以賦予一個對象自定義的屬性,即類定義中不存在的屬性。對象通過特殊屬性

__dict__

存儲自定義屬性

>>> class Person:

pass

>>> p = Person()

>>> p.name = 'custom name'

>>> p.name

'custom name'

>>> p.__dict__

{'name': 'custom name'}

通過重載

__getattr__

__setattr__

可以攔截對成員的訪問,從而自定義屬性的行為

__getattr__()

只有在訪問不存在的成員時才會被調用

__getattribute__()

攔截所有的(包括不存在)獲取操作

__setattr__()

設置屬性

__delattr__()

刪除屬性

>>> class CustomAttribute(object):

def __init__(self):

pass

def __getattribute__(self, name):

return str.upper(object.__getattribute__(self, name))

def __setattr__(self, name, value):

object.__setattr__(self, name, str.strip(value))

>>> p = CustomAttribute()

>>> p.firstname = ' mary'

>>> print(p.firstname)

MARY

三:方法

對象實例方法

的第一個參數一般為self,但是用戶調用時不需要也不能給該參數傳值

例9.11(靜態方法:攝氏溫度與華氏溫度之間的相互轉換)

class TemperatureConverter:

@staticmethod

def c2f(t_c):

return (float(t_c) * 9/5) + 32

@staticmethod

def f2c(t_f):

return ((float(t_f) - 32) * 5/9)

print("1. 從攝氏溫度到華氏溫度.")

print("2. 從華氏溫度到攝氏溫度.")

choice = int(input("請選擇轉換方向:"))

if choice == 1:

t_c = float(input("請輸入攝氏溫度:"))

t_f = TemperatureConverter.c2f(t_c)

print("華氏溫度為:{0:.2f}".format(t_f))

elif choice == 2:

t_f = float(input("請輸入華氏溫度:"))

t_c = TemperatureConverter.f2c(t_f)

print("攝氏溫度為:{0:.2f}".format(t_c))

else:

print("無此選項,只能選擇1或2")

輸出:

====================== RESTART: D:\zgh\desktop\test.py ======================

1. 從攝氏溫度到華氏溫度.

2. 從華氏溫度到攝氏溫度.

請選擇轉換方向:1

請輸入攝氏溫度:30

華氏溫度為:86.00

>>>

====================== RESTART: D:\zgh\desktop\test.py ======================

1. 從攝氏溫度到華氏溫度.

2. 從華氏溫度到攝氏溫度.

請選擇轉換方向:2

請輸入華氏溫度:70

攝氏溫度為:21.11

>>>

補充一個很有意思的代碼:

(包含了很多知識點)

TempStr = input("請輸入帶有符號的溫度值:")

if TempStr[-1] in ['F', 'f']:

C = (eval(TempStr[0:-1]) - 32) / 1.8

print("轉化后的溫度是{:.2f}C".format(C))

elif TempStr[-1] in ['C', 'c']:

F = 1.8 * eval(TempStr[0:-1]) + 32

print("轉化后的溫度是{:.2f}F".format(F))

else:

print("輸入格式錯誤")

例9.12(類方法)

類方法的第一個參數為cls,但是調用時用戶不需要也不能給該參數傳值

>>> class Person:

classname = "zgh"

def __init__(self, name):

self.name = name

#實例方法

def f1(self):

print(self.name)

#靜態方法

@staticmethod

def f2():

print("static")

#類方法

@classmethod

def f3(cls):

print(cls.classname)

>>> p = Person("666")

>>> p.f1()

666

>>> Person.f2()

static

>>> p.f2()

static

>>> Person.f3()

zgh

>>> p.f3()

zgh

>>> Person.f1()

Traceback (most recent call last):

File "", line 1, in

Person.f1()

TypeError: f1() missing 1 required positional argument: 'self'

類名不能訪問實例方法

補充:

無論是靜態方法還是類方法一般通過類名來訪問,也可以通過對象實例來調用

在靜態方法中訪問對象實例會導致錯誤

在類方法中訪問對象實例屬性會導致錯誤

例9.15(

__init__()

方法、

__new__()

方法、

__del__()

方法)

__init__()

構造函數,用于執行類的實例的初始化工作。在創建完對象后調用,初始化當前對象的實例,無返回值

__new__()

是一個類方法,在創建對象時調用,返回當前對象的一個實例,一般無須重載該方法

__del__()

析構函數,用于實現銷毀類的實例所需的操作,如釋放對象占用的非托管資源(打開的文件、網絡連接等)

在默認情況下,當對象不再被使用時,

__del__()

方法運行。由于Python解釋器實現自動垃圾回收,所以無法保證這個方法究竟在什么時候運行

但通過

del

語句可以強制銷毀一個對象實例,從而保證調用對象實例的

__del__()

方法

>>> class Person:

count = 0

def __init__(self, name, age):

self.name = name

self.age = age

Person.count += 1

def __del__(self):

Person.count -= 1

def say_hi(self):

print("hello, i'm ", self.name)

def get_count():

print("count: ",Person.count)

>>> print("count: ", Person.count)

count: 0

>>> p1 = Person('zhangsan', 18)

>>> p1.say_hi()

hello, i'm zhangsan

>>> Person.get_count()

count: 1

>>> p2 = Person('lisi', 28)

>>> p2.say_hi()

hello, i'm lisi

>>> Person.get_count()

count: 2

>>> del p1

>>> Person.get_count()

count: 1

>>> del p2

>>> Person.get_count()

count: 0

例9.16(私有方法)

與私有屬性類似,Python約定以兩個下劃線開頭,但不以兩個下劃線結束的方法是私有的

不能直接訪問私有的

>>> class Book:

def __init__(self, name, author, price):

self.name = name

self.author = author

self.price = price

def __check_name(self):

if self.name == '': return False

else: return True

def get_name(self):

if self.__check_name(): print(self.name, self.author)

else: print("No Value")

>>> b = Book("Python", 'zgh', 666)

>>> b.get_name()

Python zgh

>>> b.__check_name()#直接調用私有方法,非法

Traceback (most recent call last):

File "", line 1, in

b.__check_name()

AttributeError: 'Book' object has no attribute '__check_name'

例9.17(方法的重載)

Python本身是動態語言,

方法的參數沒有聲明類型(在調用傳值時確定參數的類型)

參數的數量由可選參數和可變參數來控制

故Python對象方法不需要重載,定義一個方法即可實現多種調用,從而實現相當于其他程序設計語言的重載功能

>>> class Person:

def say_hi(self, name=None):

self.name = name

if name ==None: print("hello!")

else: print("hello, i'm ", self.name)

>>> p = Person()

>>> p.say_hi()

hello!

>>> p.say_hi('zgh')

hello, i'm zgh

>>>

注意:在Python類體中定義多個重名的方法雖然不會報錯,但只有最后一個方法有效,所以建議不要定義重名的方法

四:繼承

Pyhon支持多重繼承,即一個派生類可以繼承多個基類

如果在類定義中沒有指定基類,則默認其基類為

object

在聲明派生類時,必須在其構造函數中調用基類的構造函數

例9.19(派生類)

>>> class Person:

def __init__(self, name, age):

self.name = name

self.age = age

def say_hi(self):

print("hello, i'm {0}, {1} olds".format(self.name, self.age))

>>> class Student(Person):

def __init__(self, name, age, stu_id):

Person.__init__(self, name, age)

self.stu_id = stu_id

def say_hi(self):

Person.say_hi(self)

print("i'm student, my student_number is ", self.stu_id)

>>> p =Person('zhangsan',18)

>>> p.say_hi()

hello, i'm zhangsan, 18 olds

>>> s = Student('lisi', 5, '17202030118')

>>> s.say_hi()

hello, i'm lisi, 5 olds

i'm student, my student_number is 17202030118

例9.20(查看類的繼承關系)

多個類的繼承可以形成層次關系,通過類的方法

mro()

或類的屬性

__mro__

可以輸出其繼承的層次關系

>>> class A: pass

>>> class B(A): pass

>>> class C(B): pass

>>> class D(A): pass

>>> class E(B,D): pass

>>> A.mro()

[, ]

>>> B.__mro__

(, , )

>>> C.mro()

[, , , ]

>>>

>>> D.mro()

[, , ]

>>>

>>> E.__mro__

(, , , , )

例9.21(類成員的繼承和重寫)

>>> class Dimension:

def __init__(self, x, y):

self.x = x

self.y = y

def area(self):

pass

>>> class Circle(Dimension):

def __init__(self, r):

Dimension.__init__(self, r, 0)

def area(self):

return 3.14 * self.x * self.x

>>> class Rectangle(Dimension):

def __init__(self, w, h):

Dimension.__init__(self, w, h)

def area(self):

return self.x * self.y

>>> d1 = Circle(2.0)

>>> d2 = Rectangle(3.0, 4.0)

>>> print(d1.area(), d2.area())

12.56 12.0

五:對象的特殊方法

在Python對象中包含許多以雙下劃線開始和結束的方法,稱之為特殊方法。

特殊方法通常在針對對象的某種操作時自動調用

例9.22(重寫對象的特殊方法)

特殊方法

含義

__init__()

__del__()

創建或銷毀對象時調用

__setitem__()

__getitem__()

按索引賦值、取值

__len__()

對應于內置函數

len()

__repr__(self)

對應于內置函數

repr()

__str__(self)

對應于內置函數

str()

__bytes__(self)

對應于內置函數

bytes()

__format__(self, format_spec)

對應于內置函數

format()

__bool__(self)

對應于內置函數

bool()

__hash__(self)

對應于內置函數

hash()

__dir__(self)

對應于內置函數

dir()

>>> class Person:

def __init__(self, name, age):

self.name = name

self.age = age

def __str__(self):

return '{0}, {1}'.format(self.name, self.age)

>>> p = Person('zgh', '18')

>>> print(p)

zgh, 18

例9.23(運算符重載)

特殊方法

含義

__lt__()

__le__()

__eq__()

對應于運算符

__gt__()

__ge__()

__ne__()

對應于運算符

>,>=,!=

__or__()

__ror__()

__xor__()

__rxor__()

__and__()

__rand__()

對應于運算符

|,^,&

__ior__()

__ixor__()

__iand__()

對應于運算符

|=,^=,&=

__lshift__()

__rlshift__()

__rshift__()

__rrshift__()

對應于運算符

<>

__ilshift__()

__irlshift__()

__irshift__()

__irrshift__()

對應于運算符

<<=,>>=

__add__()

__radd__()

__sub__()

__rsub__()

對應于運算符

+,-

__iaddr__()

__isub__()

對應于運算符

+=,-=

__mul__()

__rmul__()

__truediv__()

__rtruediv__()

對應于運算符

*,/

__mod__()

__rmod__()

__floordiv__()

__rfloordiv__()

對應于運算符

%,//

__imul__()

__idiv__()

__itruediv__()

__imod__()

__ifloordiv__()

對應于運算符

*=,/=,%=,//=

__pos__()

__neg__()

正負號

__invert__()

按位翻轉

__pow__()

__rpow__()

__ipow__()

指數運算

看了上這么多特殊方法和運算符的對應,你是否會感到一些奇怪的地方:

r

,某些運算符為啥子有兩個,然后其中一個的最前面加了一個

r

舉個例子就懂了:

x.__mul__(y) == x / y

;而

x.__rmul__(y) == y / x

如果上手去嘗試的話,發現復合賦值運算對應的特殊方法都使用不了(未找到原因,暫過,哪位大佬知道啊,評論區留言)

>>> class MyList:

def __init__(self, *args):

self.__mylist = []

for arg in args:

self.__mylist.append(arg)

def __add__(self, n):

for i in range(0, len(self.__mylist)):

self.__mylist[i] += n

def __sub__(self, n):

for i in range(0, len(self.__mylist)):

self.__mylist[i] -= n

def __mul__(self, n):

for i in range(0, len(self.__mylist)):

self.__mylist[i] *= n

def __truediv__(self, n):

for i in range(0, len(self.__mylist)):

self.__mylist[i] /= n

def __len__(self):

return (len(self.__mylist))

def __repr__(self):

str1 = ''

for i in range(0, len(self.__mylist)):

str1 += str(self.__mylist[i]) + " "

return str1

>>> m = MyList(1, 2, 3, 4, 5)

>>> m+2

>>> m

3 4 5 6 7

>>> m -1

>>> m

2 3 4 5 6

>>> m*4

>>> m

8 12 16 20 24

>>> m/2

>>> m

4.0 6.0 8.0 10.0 12.0

>>> len(m)

5

例9.24(

@functools.total_ordering

裝飾器)

實現了

total_ordering

裝飾器后,則是需要實現

__eq__()

以及

__lt__()

__le__()

__gt__()

__ge__()

中的任意一個,那么實現其他比較運算符能簡化代碼量

import functools

@functools.total_ordering

class Student:

def __init__(self, firstname, lastname):

self.firstname = firstname

self.lastname = lastname

def __eq__(self, other):

return ((self.lastname.lower(), self.firstname.lower()) ==

(other.lastname.lower(), other.firstname.lower()))

def __lt__(self, other):

return ((self.lastname.lower(), self.firstname.lower()) <

(other.lastname.lower(), other.firstname.lower()))

if __name__ == '__main__':

s1 = Student('Mary', 'Clinton')

s2 = Student('Mary', 'Clinton')

s3 = Student('Charlie', 'Clinton')

print(s1 == s2)

print(s1 > s3)

print(s1 < s3)

輸出:

True

True

False

例9.25(定義了

__call__()

方法的對象稱為可調用對象)

class GDistance:

def __init__(self, g):

self.g = g

def __call__(self, t):

return (self.g * t ** 2)/2

if __name__ == '__main__':

e_gdist = GDistance(9.8)

for t in range(11):

print(format(e_gdist(t), "0.2f"), end = ' ')

輸出:

0.00 4.90 19.60 44.10 78.40 122.50 176.40 240.10 313.60 396.90 490.00

六:對象的引用、淺拷貝和深拷貝

例9.26(對象的引用)

對象的賦值實際上是對象的引用,在創建一個對象并把它賦值給一個變量時,該變量是指向該對象的引用,其id()返回值保持一致

>>> acc10 = ['zgh', ['zgh666', 666]]

>>> acc11 = acc10

>>> id(acc10) == id(acc11)

True

例9.27(對象的淺拷貝)

對象的賦值引用同一個對象(即:不復制對象)

如果要復制對象,可以使用下列方法之一:

切片操作:例如acc11[:]

對象實例化:例如list(acc11)

copy模塊的copy()函數:例如copy.copy(acc11)

>>> import copy

>>> acc1 = ['Charlie', ['credit', 0.0]]

>>> acc2 = acc1[:]

>>> acc3 = list(acc1)

>>> acc4 = copy.copy(acc1)

>>> id(acc1), id(acc2), id(acc3), id(acc4)

(2387738921800, 2387738921544, 2387735787656, 2387738922888)

Python復制一般是淺拷貝,即復制對象時,對象內包含的子對象并不復制,而是引用同一個子對象

>>> acc2[0] = 'zgh666'

>>> acc2[1][1] = 100.0

>>> acc1

['Charlie', ['credit', 100.0]]

>>> acc2

['zgh666', ['credit', 100.0]]

>>> id(acc1[1]) == id(acc2[1])

True

例9.28(對象的深拷貝)

使用copy模塊的deepcopy()函數

>>> import copy

>>> acc1 = ['Charlie', ['credit', 0.0]]

>>> acc5 = copy.deepcopy(acc1)

>>> acc5[0] = 'zgh666'

>>> acc5[1][1] = 666

>>> acc1

['Charlie', ['credit', 100.0]]

>>> acc5

['zgh666', ['credit', 666]]

>>> id(acc1) == id(acc5)

False

>>> id(acc1[1]) == id(acc5[1])

False

七:可迭代對象:迭代器和生成器

相對于序列,可迭代對象僅在迭代時產生數據,故可以節省內存空間

Python語言提供了若干內置可迭代對象,例如:range、map、enumerate、filter、zip

在標準庫itertools模塊中包含各種迭代器,這些迭代器非常高效,且內存消耗小

在Python中,實現了

__iter__()

的對象是可迭代對象

在collections.abc模塊中定義了抽象基類Iterable,使用內置的isinstance()可以判斷一個對象是否為可迭代對象

>>> import collections.abc

>>> isinstance((1, 2, 3), collections.abc.Iterable)

True

>>> isinstance('Python33', collections.abc.Iterable)

True

>>> isinstance(123, collections.abc.Iterable)

False

實現了

__next__()

的對象是迭代器

使用迭代器可以實現對象的迭代循環,迭代器讓程序更加通用、優雅、高效,更加Python化。對于大量項目的迭代,使用列表會占用更多的內存,而使用迭代器可以避免之

>>> [i**2 for i in range(10)]

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> import collections.abc

>>> i1 = (i**2 for i in range(10))

>>> isinstance(i1, collections.abc.Iterator)

True

迭代器對象必須實現兩個方法,即

__iter__()

__next__()

,二者合稱為迭代器協議

__iter__()

用于返回對象本身,以方便for語句進行迭代

__next__()

用于返回下一元素

內置函數

iter(iterable)

可以返回可迭代對象iterable的迭代器

內置函數

next()

調用迭代器

__next__()

方法依次返回下一個項目值,如果沒有新項目,則將導致StopIteration

>>> t = ('zgh', '666')

>>> i = iter(t)

>>> next(i)

'zgh'

>>> next(i)

'666'

>>> next(i)

Traceback (most recent call last):

File "", line 1, in

next(i)

StopIteration

例9.29(使用while循環迭代可迭代對象)

>>> t = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

>>> fetch = iter(t)

>>> while True:

try: i = next(fetch)

except StopIteration: break

print(i, end = ' ')

0 1 2 3 4 5 6 7 8 9

聲明一個類,定義

__iter__()

__next__()

方法。創建該類的對象既是可迭代對象,也是迭代器

例9.30(定義Fib,實現Fibonacci數列)

>>> class Fib:

def __init__(self):

self.a, self.b = 0, 1

def __next__(self):

self.a, self.b = self.b, self.a+self.b

return self.a

def __iter__(self):

return self

>>> fibs = Fib()

>>> for i in fibs:

if i < 1000: print(i, end =', ')

else: break

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987,

在函數定義中,如果使用yield語句代替return返回一個值,則定義了一個生成器函數(generator)

生成器函數是一個迭代器,是可迭代對象,支持迭代

>>> def triples(n):

for i in range(n):

yield i*3

>>> f = triples(10)

>>> f

>>> i = iter(f)

>>> next(i)

0

>>> next(i)

3

>>> for t in f: print(t, end = ', ')

6, 9, 12, 15, 18, 21, 24, 27,

例9.31(利用生成器函數創建Fibonacci數列)

>>> def fib():

a,b = 0,1

while True:

a,b = b,a+b

yield a

>>> if __name__ == '__main__':

fibs = fib()

for f in fibs:

if f < 1000: print(f, end = ' ')

else: break

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

例9.32(利用生成器函數創建返回m到n之間素數的生成器)

>>> import math

>>> def is_prime(n):

if n < 2: return False

if n == 2: return True

if n % 2 == 0: return False

sqrt_n = int(math.floor(math.sqrt(n)))

for i in range(3, sqrt_n+1, 2):

if n % i == 0: return False

return True

>>> def primes(m, n):

for i in range(m, n+1):

if is_prime(i):

yield i

>>> if __name__ == '__main__':

primes1 = primes(50_0000_0000, 50_0000_0090)

for p in primes1:

print(p, end = ' ')

5000000029 5000000039 5000000059 5000000063

只有長度有限的序列或者實現了

__reversed__()

方法的可迭代對象才可以使用內置函數

reversed()

>>> reversed([1, 2, 3, 4, 5])

>>> for i in reversed([1, 2, 3, 4, 5]): print(i, end = ' ')

5 4 3 2 1

只有長度有限的序列或者實現了

__reversed__()

方法的可迭代對象才可以使用內置函數

reversed()

>>> class Countdown:

def __init__(self, start):

self.start = start

def __iter__(self):

n = self.start

while n > 0:

yield n

n -= 1

def __reversed__(self):

n = 1

while n <= self.start:

yield n

n += 1

>>> if __name__ == '__main__':

for i in Countdown(10): print(i, end = ' ')

for i in reversed(Countdown(10)): print(i, end = ' ')

10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10

生成器表達式

生成器表達式的語法和列表解析基本一樣,只不過生成器表達式使用

()

代替

[]

>>> (i **2 for i in range(10))

at 0x0000022BF0563F48>

>>> for j in (i **2 for i in range(10)):

print(j, end = ' ')

0 1 4 9 16 25 36 49 64 81

>>> for j in (i **2 for i in range(10) if i %3 == 0):

print(j, end = ' ')

0 9 36 81

map迭代器和itertools.starmap迭代器

我們已經學過了

map(function, iterable, ...)

函數

如果函數的參數為元組,則需要使用

itertools.starmap()

迭代器

>>> import itertools

>>> list(itertools.starmap(pow, [(2,5), (3,2), (10,3)]))

[32, 9, 1000]

filter迭代器和itertools.filterfalse迭代器

我們已經學過了

filter(function, iterable)

函數,若結果為True,則返回該元素。如果function為None,則返回元素為True的元素

itertools.filterfalse(predicate, iterable)

則反之

>>> filter

>>> list(filter(lambda x : x > 0, (-1, 2, -3, 0, 5)))

[2, 5]

>>> list(filter(None, (1, 2, 3, 0, 5)))

[1, 2, 3, 5]

>>>

>>> import itertools

>>> list(itertools.filterfalse(lambda x : x%2, range(10)))

[0, 2, 4, 6, 8]

zip迭代器和itertools.zip_longest迭代器

zip(*iterables)

用于拼接多個可迭代對象的元素,返回新的可迭代對象。如果各序列的長度不一致,則截取至最小序列長度

如果需要截取最長的長度,可以使用

itertools.zip_longest(*iterables, fillvalue = None)

迭代器

>>> zip

>>> zip((1,2,3), 'abc', range(3))

>>> list(zip((1,2,3), 'abc', range(3)))

[(1, 'a', 0), (2, 'b', 1), (3, 'c', 2)]

>>> list(zip('zgh', range(6,10)))

[('z', 6), ('g', 7), ('h', 8)]

>>>

>>>

>>> import itertools

>>> list(itertools.zip_longest('zgh', range(6,10), fillvalue = '-'))

[('z', 6), ('g', 7), ('h', 8), ('-', 9)]

>>> list(itertools.zip_longest('zgh', range(6,10)))

[('z', 6), ('g', 7), ('h', 8), (None, 9)]

enumerate(iterable, start = 0)可迭代對象

用于枚舉可迭代對象iterable中的元素,返回元素為元組(計數,元素)的可迭代對象

>>> enumerate

>>> list(enumerate('zgh666', start = 666))

[(666, 'z'), (667, 'g'), (668, 'h'), (669, '6'), (670, '6'), (671, '6')]

無窮序列迭代器itertools.count、itertools.cycle和itertools.repeat

count(start = 0, step = 1)

從start開始,步長為step的無窮序列

cycle(iterable)

可迭代對象iterable元素的無限重復

repeat(object[, times])

重復對象object無數次(若指定times,則重復times次)

>>> from itertools import *

>>> list(zip(count(1), 'zgh666'))

[(1, 'z'), (2, 'g'), (3, 'h'), (4, '6'), (5, '6'), (6, '6')]

>>> list(zip(range(10), cycle('zgh')))

[(0, 'z'), (1, 'g'), (2, 'h'), (3, 'z'), (4, 'g'), (5, 'h'), (6, 'z'), (7, 'g'), (8, 'h'), (9, 'z')]

>>> list(repeat('zgh', 6))

['zgh', 'zgh', 'zgh', 'zgh', 'zgh', 'zgh']

累計迭代器itertools.accumulate

accumulate(iterable[, func])

如果指定了帶兩個參數的func,則func代替默認的加法運算

>>> import itertools

>>> list(itertools.accumulate(range(1,11)))

[1, 3, 6, 10, 15, 21, 28, 36, 45, 55]

>>> import operator

>>> list(itertools.accumulate(range(1,11), operator.mul))

[1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]

級聯迭代器itertools.chain

chain(*iterables)

由于連接所有的可迭代函數,及連接多個可迭代對象的元素,作為一個序列

chain的類工廠函數

chain.from_iterable(iterable)

也可以用于連接多個序列

>>> import itertools

>>> list(itertools.chain('zgh',(6,6,6),range(5)))

['z', 'g', 'h', 6, 6, 6, 0, 1, 2, 3, 4]

>>>

>>> list(itertools.chain.from_iterable(['zgh', '666']))

['z', 'g', 'h', '6', '6', '6']

選擇壓縮迭代器itertools.compress

compress(data, selectors)

根據selectors的元素(True/False),返回True對應的data序列中的元素。當data序列或者selectors終止時停止判斷

>>> import itertools

>>> list(itertools.compress('abcdef', [1,0,1,0,1,1]))

['a', 'c', 'e', 'f']

截取迭代器itertools.dropwhile和itertools.takewhile

dropwhile(predicate, iterable)

根據條件函數predicate處理可迭代對象的每個元素,丟棄iterable的元素,直到條件函數的結果為False(補充:這里不應該是True,書上有誤)

takewhile(predicate, iterable)

根據條件函數predicate處理可迭代對象的每個元素,返回iterable的元素,直到條件函數的結果為False

>>> import itertools

>>> list(itertools.dropwhile(lambda x : x < 5, [1, 4, 6, 4, 1]))

[6, 4, 1]

>>> list(itertools.takewhile(lambda x : x < 5, [1, 4, 6, 4, 1]))

[1, 4]

切片迭代器itertools.islice

islice(iterable, stop)

islice(iterable, start, stop[, step])

返回可迭代對象iterable的切片,從索引位置start(第一個元素為0)開始到stop(不包括)結束,步長為step(默認為1)。如果stop為None,則操作直到結束

>>> import itertools

>>> list(itertools.islice('ABCDEF', 2))

['A', 'B']

>>> list(itertools.islice('ABCDEF', 2, 4))

['C', 'D']

>>> list(itertools.islice('ABCDEF', 2, None))

['C', 'D', 'E', 'F']

>>> list(itertools.islice('ABCDEF', 0, None, 2))

['A', 'C', 'E']

分組迭代器itertools.groupby

groupby(iterable, key = None)

iterable為待分組的可迭代對象

可選的key為用于計算鍵值的函數,默認為None,即鍵值為元素本身值

返回的結果為迭代器,其元素為(key, group),其中key為分組的鍵值,group為iterable中具有相同key值的元素的集合的子迭代器

一般與排序聯合使用

>>> import itertools

>>> data = [1, -2, 0, 0, -1, 2, 1, -1, 2, 0, 0]

>>> data1 = sorted(data, key = abs)

>>> for k, g in itertools.groupby(data, key = abs):

print(k, list(g))

1 [1]

2 [-2]

0 [0, 0]

1 [-1]

2 [2]

1 [1, -1]

2 [2]

0 [0, 0]

>>> for k, g in itertools.groupby(data1, key = abs):

print(k, list(g))

0 [0, 0, 0, 0]

1 [1, -1, 1, -1]

2 [-2, 2, 2]

返回多個迭代器itertools.tee

tee(iterable, n = 2)

其返回可迭代對象iterable的nge(默認為2)迭代器

>>> import itertools

>>> for i in itertools.tee(range(10), 3): print(list(i))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

組合迭代器itertools.combinations和itertools.combinations_with_replacement

combinations(iterable, r)

元素不重復

combinations_with_replacement(iterable, r)

元素可重復

其返回可迭代對象iterable的元素的組合,組合的長度為r

可以把它理解為數學中的

組合

>>> import itertools

>>> list(itertools.combinations([1, 2, 3], 2))

[(1, 2), (1, 3), (2, 3)]

>>> list(itertools.combinations([1, 2, 3, 4], 2))

[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]

>>> list(itertools.combinations([1, 2, 3, 4], 3))

[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

>>>

>>>

list(itertools.combinations_with_replacement([1, 2, 3], 2))

[(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]

排列迭代器itertools.permutations

permutations(iterable, r = None)

排列長度為r(默認為序列長度)

>>> import itertools

>>> list(itertools.permutations([1, 2, 3], 2))

[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

>>> list(itertools.permutations([1, 2, 3]))

[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

笛卡爾積迭代器itertools.product

product(*iterables, repeat = 1)

其返回可迭代對象的元素的笛卡爾積,repeat為可迭代對象的重復次數(默認為1)

>>> import itertools

>>> list(itertools.product([1, 2], 'abc'))

[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c')]

>>> list(itertools.product([1, 2], repeat = 3))

[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]

八:自定義類應用舉例

用戶可以通過自定義類創建和使用新的數據結構

例9.52 實現RGB顏色模型的Color類

class Color:

def __init__(self, r = 0, g = 0, b = 0):

self.__r = r

self.__g = g

self.__b = b

@property

def r(self):

return self.__r

@property

def g(self):

return self.__g

@property

def b(self):

return self.__b

def luminance(self):

#計算并返回顏色的亮度

return self.__r * .299 + .587 * self.__g + .114 * self.__b

def toGray(self):

#轉換為灰度顏色

y = int(round(self.luminance()))

return Color(y, y, y)

def isCompatible(self, c):

#比較前景色和背景色是否匹配

return abs(self.luminance() - c.luminance()) >= 128.0

def __str__(self):

#重載方法,輸出:(r, g, b)

return '({}, {}, {})'.format(self.__r, self.__g, self.__b)

#常用顏色

WHITE = Color(255, 255, 255)

BLACK = Color(0, 0, 0)

RED = Color(255, 0, 0)

GREEN = Color(0, 255, 0)

BLUE = Color(0, 0, 255)

CYAN = Color(0, 255, 255)

MAGENTA = Color(255, 0, 255)

YELLOW = Color(255, 255, 0)

#測試代碼

if __name__ == '__main__':

c = Color(255, 200, 0)

print('顏色字符串:{0}'.format(c))

print('顏色分量:r = {0}, g = {1}, b = {1}'.format(c.r, c.g, c.b))

print('顏色亮度:{0}'.format(c.luminance()))

print('轉換為灰度顏色:{0}'.format(c.toGray()))

print('{0} 和 {1} 是否匹配:{2}'.format(c, RED, c.isCompatible(RED)))

例9.53 實現直方圖類Histogram

import random

import math

class Stat:

def __init__(self, n):

self.__data = []

for i in range(n):

self.__data.append(0)

def addDataPoint(self, i):

"""增加數據點"""

self.__data[i] += 1

def count(self):

"""計算數據點個數之和(統計數據點個數)"""

return sum(self.__data)

def mean(self):

"""平均值"""

return sum(self.__data)/len(self.__data)

def max(self):

return max(self.__data)

def min(self):

return min(self.__data)

def draw(self):

"""繪制簡易直方圖"""

for i in self.__data:

print(' # ' * i)

if __name__ == '__main__':

st = Stat(10)

for i in range(100):

score = random.randrange(0, 10)

st.addDataPoint(math.floor(score))

print('數據點個數:{}'.format(st.count()))

print('數據點個數的平均值:{}'.format(st.mean()))

print('數據點個數的最大值:{}'.format(st.max()))

print('數據點個數的最小值:{}'.format(st.min()))

st.draw()

輸出:

數據點個數:100

數據點個數的平均值:10.0

數據點個數的最大值:14

數據點個數的最小值:7

# # # # # # # #

# # # # # # # # # #

# # # # # # # # #

# # # # # # # # # #

# # # # # # # # # #

# # # # # # # # # # #

# # # # # # # # #

# # # # # # # # # # # #

# # # # # # # # # # # # # #

# # # # # # #

填空題:2

2

>>> x = '123'

>>> print(isinstance(x, int))

False

思考題:3~11

3

在聲明派生類時,必須在其構造函數中調用基類的構造函數

>>> class Parent:

def __init__(self, param):

self.v1 = param

>>> class Child(Parent):

def __init__(self, param):

Parent.__init__(self, param)

self.v2 = param

>>> obj = Child(100)

>>> print("%d %d" % (obj.v1, obj.v2))

100 100

4

注意區分實例對象屬性和局部變量

>>> class Account:

def __init__(self, id):

self.id = id

id = 888

>>> acc = Account(100)

>>> print(acc.id)

100

5

>>> #5

>>> class Account:

def __init__(self, id, balance):

self.id = id

self.balance = balance

def deposit(self, amount):

self.balance += amount

def withdraw(self, amount):

self.balance -= amount

>>> acc1 = Account('1234', 100)

>>> acc1.deposit(500)

>>> acc1.withdraw(200)

>>> print(acc1.balance)

400

6

getattr(object, name[, default])

獲取object對象的屬性的值,如果存在則返回屬性值

setattr(object, name, value)

給object對象的name屬性賦值value,如果對象原本存在給定的屬性name,則setattr會更改屬性的值為給定的value;如果對象原本不存在屬性name,setattr會在對象中創建屬性,并賦值為給定的value;

>>> class A:

def __init__(self, a, b, c):

self.x = a+b+c

>>> a = A(6, 2, 3)

>>> b = getattr(a, 'x')

>>> setattr(a, 'x', b+1)

>>> print(a.x)

12

7

淺拷貝,復制對象時對象中包含的子對象并不復制,而是引用同一個子對象

>>> import copy

>>> d1 = {'a' : [1, 2], 'b' : 2}

>>> d2 = copy.copy(d1)

>>> d1['a'][0] = 6

>>> sum = d1['a'][0] + d2['a'][0]

>>> print(sum)

12

8

深拷貝,可以遞歸復制對象中包含的子對象

>>> from copy import *

>>> d1 = {'a' : [1, 2], 'b' : 2}

>>> d2 = deepcopy(d1)

>>> d1['a'][0] = 6

>>> sum = d1['a'][0] + d2['a'][0]

>>> print(sum)

7

9

淺拷貝,復制對象時對象中包含的子對象并不復制,而是引用同一個子對象

>>> from copy import *

>>> list1 = [1, 2, 3]

>>> list2 = [3, 4, 5]

>>> dict1 = {"1" : list1, '2' : list2}

>>> dict2 = dict1.copy()

>>> dict1['1'][0] = 15

>>> print(dict1['1'][0] + dict2['1'][0])

30

10

深拷貝,可以遞歸復制對象中包含的子對象

>>> from copy import *

>>> list1 = [1, 2, 3]

>>> list2 = [3, 4, 5]

>>> dict1 = {"1" : list1, '2' : list2}

>>> dict2 = deepcopy(dict1)

>>> dict1['1'][0] = 15

>>> print(dict1['1'][0] + dict2['1'][0])

16

11

對象通過特殊屬性

__dict__

存儲屬性,包括自定義屬性

>>> class Person:

def __init__(self, id):

self.id = id

>>> mary = Person(123)

>>> mary.__dict__['age'] = 18

>>> mary.__dict__['gender'] = 'female'

>>> print(mary.age + len(mary.__dict__))

21

>>> mary.__dict__

{'id': 123, 'age': 18, 'gender': 'female'}

上機實踐:2~3

2. 編寫程序,創建類MyMath,計算圓的周長和面積以及球的表面積和體積,并編寫測試代碼,結果均保留兩位小數

import math

class MyMath:

def __init__(self, r):

self.r = r

def perimeter_round(self):

return 2 * math.pi * self.r

def area_round(self):

return math.pi * self.r * self.r

def area_ball(self):

return 4 * math.pi * self.r ** 2

def volume_ball(self):

return 4 / 3 * math.pi *self.r ** 3

if __name__ == '__main__':

n = float(input("請輸入半徑:"))

m = MyMath(n)

print("圓的周長 = {0:.2f}\n圓的面積 = {1:.2f}\n球的表面積 = {2:.2f}\n球的體積 = {3:.2f}".\

format(m.perimeter_round(), m.area_round(), m.area_ball(), m.volume_ball()))

輸出:

請輸入半徑:5

圓的周長 = 31.42

圓的面積 = 78.54

球的表面積 = 62.83

球的體積 = 523.60

3. 編寫程序,創建類Temperature,其包含成員變量degree(表示溫度)以及實例方法ToFahrenheit(將攝氏溫度轉換為華氏溫度)和ToCelsius(將華氏溫度轉換為攝氏溫度),并編寫測試代碼

class Temperature:

def __init__(self, degree):

self.degree = degree

def toFahrenheit(self):

return self.degree*9/5 + 32

def toCelsius(self):

return (self.degree -32) * 5/9

if __name__ == '__main__':

n1 = float(input("請輸入攝氏溫度:"))

t1 = Temperature(n1)

print("攝氏溫度 = {0:.2f}, 華氏溫度 = {1:.2f}".format(n1, t1.toFahrenheit()))

n2 = float(input("請輸入華氏溫度:"))

t2 = Temperature(n2)

print("攝氏溫度 = {0:.2f}, 華氏溫度 = {1:.2f}".format(t2.toCelsius(), n2))

輸出:

請輸入攝氏溫度:30

攝氏溫度 = 30.00, 華氏溫度 = 86.00

請輸入華氏溫度:70

攝氏溫度 = 21.11, 華氏溫度 = 70.00

案例研究:文本相似度比較分析

總結

以上是生活随笔為你收集整理的python定义构造函数、包括颜色价格品牌_《Python编程与算法基础教程》(第二版),蒋洪宇,青松,第9章:课后练习,程序设计,版江红余,第九章,习题,答案...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产精品网站一区二区三区 | 免费看国产a | 99色精品视频 | 欧美福利片在线观看 | av一级片 | 一区二区中文字幕在线 | 久久蜜臀av | 免费av网站观看 | 天天天操操操 | 国内精品一区二区 | 日本在线观看黄色 | 黄色小说在线观看视频 | 国产精品视屏 | 国产在线2020 | 探花视频免费观看 | 在线观看a视频 | 最近中文字幕在线播放 | 国产精品mv | 欧美五月婷婷 | 日韩丝袜视频 | 懂色av懂色av粉嫩av分享吧 | 51久久夜色精品国产麻豆 | 99视频网址| 亚洲精品一区二区三区在线观看 | 亚洲国产精彩中文乱码av | 欧美成人亚洲成人 | 午夜精品一区二区国产 | 1024在线看片| 亚洲精品国偷拍自产在线观看蜜桃 | 五月天电影免费在线观看一区 | 国产精品久久久久久久妇 | 四虎www | 久久久国产精品一区二区三区 | 亚洲精品456在线播放乱码 | 日韩高清免费电影 | 97色婷婷成人综合在线观看 | 精品久操| 久久国产一二区 | 超碰在线97国产 | 久久国产精品99久久久久久丝袜 | 亚洲黄色在线观看 | 91在线视频在线观看 | 成人不用播放器 | 国产一级黄色免费看 | 国产精品久久久久久久久久ktv | 亚洲精品网页 | 久久欧洲视频 | 99精品国产99久久久久久福利 | 九色精品在线 | 丝袜美腿在线播放 | 欧美精品在线一区二区 | 中文字幕超清在线免费 | 日韩av福利在线 | 成年人免费在线观看 | 免费黄色看片 | 91麻豆精品国产91久久久久久久久 | 日韩精品视频免费看 | 在线看毛片网站 | 欧美不卡视频在线 | 国产高清绿奴videos | 国产青春久久久国产毛片 | 夜夜操综合网 | 国产一区二区中文字幕 | 日韩福利在线观看 | 欧洲一区精品 | 国产欧美精品一区二区三区 | 精品一二三四在线 | av中文在线播放 | 一区二区三区在线电影 | 在线欧美小视频 | 91精品国产综合久久婷婷香蕉 | 97超碰香蕉| 亚洲精品在线观看的 | 亚洲男人天堂a | 国产精品成人av久久 | 国产午夜av | 国产精品成人一区二区三区吃奶 | 日韩av电影网站在线观看 | 久久99婷婷| 日韩中文字幕在线 | 天天操天天摸天天爽 | 伊人射 | 久久首页| 操操操av| 国产精品久久久久久久av电影 | 91麻豆精品国产91久久久使用方法 | 国产精品一区二区三区电影 | 国产小视频免费观看 | 久草在线在线精品观看 | 国产精品久久久久四虎 | 中国一级片免费看 | 少妇按摩av | 欧美日韩超碰 | av一区在线 | 免费av大全 | 精品国产理论 | 久久久久久久网站 | 香蕉视频在线免费 | www.com在线观看| а中文在线天堂 | 一区 在线 影院 | 日韩免费二区 | 日本精品一区二区三区在线观看 | 国产精品手机在线观看 | 国产1区2区3区精品美女 | 91久久国产自产拍夜夜嗨 | 九九久久视频 | 在线观看视频在线观看 | 中文字幕在线看视频国产 | 黄色在线看网站 | 91毛片在线 | 国产涩涩在线观看 | 92精品国产成人观看免费 | 日批视频在线观看免费 | 一级黄色片在线 | 人人插人人插 | 欧美成人xxx| 国产精品24小时在线观看 | 国产99久久久国产精品免费二区 | 伊人五月综合 | 免费一级毛毛片 | 久久高清免费视频 | 日韩欧美大片免费观看 | 欧美日韩性生活 | 国产淫片免费看 | 500部大龄熟乱视频 欧美日本三级 | 人人干天天干 | 尤物97国产精品久久精品国产 | 69视频在线 | 久久精品看 | 久久精品99精品国产香蕉 | 精品国产一区二区三区久久久 | 干狠狠| 中文字幕黄色av | 五月天久久婷 | 黄av免费| 国产在线97| av丁香| 久久最新| 狠狠操狠狠 | 欧美在线你懂的 | 国产精品av在线 | 91精品视频网站 | 私人av| 国产99久久久精品 | 欧美二区视频 | 视频在线观看入口黄最新永久免费国产 | 四虎影视4hu4虎成人 | 中文字幕一区二区在线播放 | 最近免费观看的电影完整版 | 激情久久久| 91完整版观看 | 久久免费视频精品 | 国产亚洲精品久久久久久移动网络 | 四川bbb搡bbb爽爽视频 | 国产精品福利av | 婷婷丁香在线 | 久久精品精品电影网 | 成人久久视频 | 亚洲欧美日韩精品一区二区 | 激情黄色av| 午夜av不卡 | 456免费视频 | 天天色 天天 | 久久经典国产 | 99国产在线视频 | 国产精品mv在线观看 | 9992tv成人免费看片 | 国产激情小视频在线观看 | 国产一级免费视频 | 99精品视频在线观看 | 97视频在线观看成人 | 这里只有精品视频在线 | 韩国精品视频在线观看 | 蜜桃视频日本 | 一区二区三区免费 | 在线 视频 亚洲 | 国产日韩欧美视频在线观看 | 夜夜高潮夜夜爽国产伦精品 | 久久久国产精品一区二区中文 | 国产专区欧美专区 | 亚洲国产中文字幕 | 国产手机视频在线观看 | 国产无区一区二区三麻豆 | 日韩黄色免费看 | 粉嫩av一区二区三区四区五区 | 九七视频在线 | 日韩成人xxxx | 九九久久影视 | 国产尤物视频在线 | 干干干操操操 | 精品国产一区二区三区免费 | 久草在线官网 | 国产第一福利 | 成人免费观看视频网站 | 91色偷偷| 国产精品久久久久久久久大全 | 激情av一区二区 | 91久久在线观看 | 国产高清视频在线播放一区 | 九九视频免费观看视频精品 | 婷婷av网站| www.国产视频 | 亚洲午夜久久久影院 | 精品视频专区 | 久久免费看视频 | 日韩一级片观看 | 中文字幕欧美日韩va免费视频 | 国精产品999国精产 久久久久 | 成人在线免费观看网站 | 99精品欧美一区二区三区 | 日韩av免费在线电影 | 欧美黑人猛交 | 久久国产精品视频 | 五月婷婷综合网 | 96av在线| 午夜精品一区二区国产 | 国产蜜臀av | a视频在线观看免费 | 精品一区二区久久久久久久网站 | 91精品高清 | 亚洲人人av | 国产小视频精品 | 免费观看一区二区 | av网站免费线看精品 | 99久久久成人国产精品 | 在线看黄色av| avav99| 最近高清中文在线字幕在线观看 | 欧美三人交| 九九热精品视频在线观看 | 九九在线国产视频 | 九色91福利 | 亚洲欧洲精品久久 | 国产精品一区二区三区四区在线观看 | 国产精品区二区三区日本 | 人人狠| 一区二区三区四区五区六区 | 999国内精品永久免费视频 | 青青河边草免费视频 | 激情视频一区二区三区 | 狠狠干综合 | 亚洲精品视频在线观看免费视频 | 欧美一级高清片 | 91桃色在线观看视频 | 国产成人综合在线观看 | 人人超在线公开视频 | 国产一区二区三区网站 | 韩国av一区二区三区 | 久久精品视频免费播放 | 激情视频91 | 欧美一二三专区 | 国产人成在线视频 | 国产一区在线精品 | 日韩免费一二三区 | 成年人免费在线 | 亚洲精品高清在线观看 | 91热在线 | 五月天中文在线 | 日日操天天操狠狠操 | 国产精品久久久视频 | 久久国产a | 国产精品日韩在线观看 | 成人免费在线视频 | 91免费观看网站 | 青青啪 | www.色五月 | 91精品一区二区三区蜜臀 | 国产一级二级在线观看 | 超碰在线最新网址 | 亚洲成成品网站 | 99久高清在线观看视频99精品热在线观看视频 | av中文字幕第一页 | 日本久久久久久久久 | 97在线视频观看 | 黄色成人av | 色欧美88888久久久久久影院 | www五月天com | 香蕉久草| www操操操 | 九九免费在线视频 | 亚洲 在线 | 热久久电影| 怡红院av久久久久久久 | 久久av一区二区三区亚洲 | 96香蕉视频 | 日韩高清在线一区二区三区 | 天天草综合网 | 婷婷.com| 天天射天天干天天 | 91视频免费网址 | 视频在线一区 | 亚洲精品综合在线观看 | 激情综合色播五月 | 久久 精品一区 | 五月天,com | 国产精品第二页 | 欧美日韩国产精品一区二区 | 色国产精品一区在线观看 | 亚洲成人资源 | 色爱成人网 | 国产亚洲精品av | 天天综合中文 | 99人成在线观看视频 | 男女视频91| 国产日韩精品在线观看 | 日韩美女av在线 | 日日夜夜操av | 精品欧美一区二区在线观看 | 国产视频一区二区在线 | 亚洲精品福利在线观看 | 亚洲一区二区三区四区在线视频 | 国产一级大片在线观看 | 国产婷婷 | 日韩手机在线观看 | 91麻豆精品国产91久久久久 | 日韩在线观看视频免费 | 成人久久电影 | 人人插人人艹 | 日韩丝袜 | 欧美日韩久久 | 超碰成人网 | 97超级碰碰碰碰久久久久 | 亚洲欧美成人在线 | 91香蕉视频 mp4 | 一区二区三区在线免费 | 伊人激情综合 | 色婷婷国产 | 久久99国产精品久久99 | www欧美日韩 | 欧美黑人巨大xxxxx | 色狠狠干 | 欧美一级专区免费大片 | av网址在线播放 | 欧美影院久久 | 亚洲每日更新 | 国产高清免费视频 | 99精品在线免费视频 | 超碰人人干人人 | 一区二区三区精品久久久 | 久久精品99北条麻妃 | 成 人 a v天堂 | 亚洲视频 一区 | 久久久久激情 | 国产精品网红直播 | 亚洲精品国内 | 欧美午夜久久 | 在线观看中文字幕dvd播放 | 青青射| 美女精品在线 | 久青草视频 | 国产香蕉久久精品综合网 | av在线成人| 97夜夜澡人人双人人人喊 | 日韩av不卡播放 | 国产91综合一区在线观看 | 国产最顶级的黄色片在线免费观看 | 日韩午夜精品福利 | 成人免费色 | 久久久国产精品人人片99精片欧美一 | www毛片com| 欧美一级片在线播放 | 黄色av观看| 久久久伊人网 | 精品夜夜嗨av一区二区三区 | 久草久草在线观看 | 精品一二三区视频 | 五月色综合 | 中文字幕av在线播放 | 超碰人人舔 | 日韩综合第一页 | 国产精品免费在线 | 在线不卡中文字幕播放 | 综合久久久久 | 久久久久久久久久国产精品 | 婷婷久月| 国产精品观看 | 日韩在线免费播放 | 国产手机视频在线 | 激情婷婷久久 | av888.com| 日韩视频一二三区 | 久久久综合香蕉尹人综合网 | 91av九色 | 国内成人综合 | 国产美女免费看 | 99精品欧美一区二区蜜桃免费 | 99超碰在线播放 | 色综合久久精品 | 7777精品伊人久久久大香线蕉 | 国产精品国产亚洲精品看不卡15 | 欧美日韩免费一区二区三区 | 天天操夜夜叫 | 日韩理论在线观看 | 久久免费国产电影 | 成人午夜电影在线观看 | 伊人五月婷 | 人人澡人人爱 | 久草在线观看 | 亚洲视频 视频在线 | 日韩在线视频免费播放 | 美女网站视频久久 | 日韩免费视频网站 | 久久国产精品免费 | 玖玖精品在线 | 久久999久久 | 日韩丝袜在线观看 | 99久久这里有精品 | 99re亚洲国产精品 | 久久婷婷开心 | 伊人天堂久久 | 美女搞黄国产视频网站 | 2018好看的中文在线观看 | 亚洲综合网 | 在线免费观看黄色av | 五月天久久狠狠 | 色婷婷综合久久久久 | 欧美大片mv免费 | 午夜精品一二区 | 久久激情视频 久久 | 精品视频久久久 | 国产小视频在线观看 | 久久视频国产精品免费视频在线 | 久久精品这里热有精品 | 欧洲激情在线 | 在线涩涩 | 色综合久久综合中文综合网 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 日本精品视频在线观看 | 激情欧美丁香 | 欧美污污视频 | 亚洲欧美日韩精品久久久 | 麻豆91精品视频 | 成人免费一区二区三区在线观看 | 久久国产精品99久久人人澡 | 一区二区三区四区在线免费观看 | 九九国产精品视频 | 超碰在线人人爱 | 日日干美女 | 精产嫩模国品一二三区 | 狠狠躁夜夜躁人人爽超碰91 | 中文字幕在线久一本久 | 麻豆免费视频观看 | 天天艹天天 | 国产高清专区 | 色伊人网| 国产日韩在线观看一区 | 久久国产剧场电影 | 亚洲精品午夜久久久久久久 | 中文字幕资源在线观看 | 17婷婷久久www | 在线免费观看亚洲视频 | av免费网站观看 | 久久精品视频免费播放 | av免费在线看网站 | 久久精品综合视频 | 欧美性色xo影院 | 91av福利视频| 日韩最新在线视频 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 亚洲免费黄色 | 99婷婷| 亚洲综合视频在线观看 | 色婷婷国产在线 | 一区二区视频欧美 | 亚洲成人免费在线观看 | 久草在线播放视频 | 久久综合9988久久爱 | 99热精品国产 | 亚洲精品国产精品乱码在线观看 | 玖操 | av免费在线播放 | 久久久精品国产免费观看一区二区 | 日韩在线视 | 伊人精品在线 | 99精品一区二区三区 | 久久久久久久久久久电影 | 精品久久九九 | 久久人人97超碰com | 91入口在线观看 | 欧美亚洲三级 | 最近中文字幕mv免费高清在线 | 99久久婷婷国产 | 粉嫩一二三区 | 日韩一级电影在线观看 | 91x色| 日日夜夜精品免费 | 成人影片免费 | 国产在线观看 | 韩国在线一区二区 | 国产精品毛片一区二区在线看 | 特黄特黄的视频 | 国产中文字幕视频在线观看 | 国产.精品.日韩.另类.中文.在线.播放 | 97国产精品一区二区 | 精品一二 | 黄色大片中国 | 精品视频国产 | 亚洲国内在线 | 欧美激情精品久久 | 最近更新中文字幕 | 亚洲一区二区天堂 | 国产.精品.日韩.另类.中文.在线.播放 | 亚洲日本欧美在线 | 久久只有精品 | 91精品国自产在线观看 | 国产精品一区二区美女视频免费看 | 91香蕉亚洲精品 | 国产97在线播放 | 国产露脸91国语对白 | 中文字幕一区二区三区在线视频 | 亚洲婷婷综合色高清在线 | 中文字幕之中文字幕 | 亚洲妇女av | 成 人 黄 色 视频 免费观看 | 日韩大片在线观看 | 亚洲激情 在线 | 在线精品一区二区 | 高清视频一区 | 日韩视频免费观看高清 | 久久影院亚洲 | 人人爱人人爽 | 五月婷婷色播 | 亚洲一级二级三级 | 天天天天综合 | 久草视频免费 | 亚洲精品视频免费观看 | 国产精品美女久久久久aⅴ 干干夜夜 | 精品一区av | 正在播放久久 | www.亚洲视频.com | 国产在线观看你懂的 | 国产黄色av | 欧美精品国产精品 | 久久国产精品视频 | 成人黄色在线观看视频 | 亚洲天堂网站 | 欧美少妇18p | 久久久久国产精品免费免费搜索 | 久久手机免费观看 | 日韩动漫免费观看高清完整版在线观看 | 国产精品久久久视频 | 日韩欧美在线综合网 | 精品久久久久国产 | 国产精品女同一区二区三区久久夜 | av电影久久| 欧美激情综合色 | 日韩区欠美精品av视频 | 97中文字幕| 69夜色精品国产69乱 | 九九视频免费观看视频精品 | 特级毛片在线观看 | 又黄又爽又色无遮挡免费 | 国内偷拍精品视频 | 九九在线高清精品视频 | 国产99久久久国产精品 | 国产伦精品一区二区三区免费 | 婷婷亚洲综合五月天小说 | 99精品影视 | 黄色福利网站 | 美女视频黄在线观看 | 日本精品视频网站 | 99精品区 | 国内精品久久久久久久97牛牛 | 色狠狠综合天天综合综合 | 国产成人精品久久久 | 伊色综合久久之综合久久 | 色婷婷啪啪免费在线电影观看 | 日本黄区免费视频观看 | 三级av中文字幕 | 亚洲精品合集 | 97超碰成人 | 欧美一级黄色片 | 国产一卡二卡在线 | 国产一区二区三区午夜 | 97人人网| 九九九热精品 | 欧美疯狂性受xxxxx另类 | 欧美日韩啪啪 | 国产另类xxxxhd高清 | 天天躁天天狠天天透 | 亚洲 综合 国产 精品 | 国产精品久久久久婷婷二区次 | 亚洲精品视频在线播放 | 婷婷日| 国产高清精品在线观看 | 国产精品不卡一区 | 久操视频在线免费看 | 日韩中文字幕在线 | 国产资源网 | 在线只有精品 | 亚洲综合在线视频 | 国产高h视频| 亚洲女欲精品久久久久久久18 | 国产一区在线视频 | 国产在线精品一区二区三区 | 色婷婷综合久久久中文字幕 | 玖玖在线免费视频 | 91久久久久久久一区二区 | 久久综合久久综合这里只有精品 | 天堂av在线7| 蜜臀精品久久久久久蜜臀 | 欧美国产日韩中文 | 国产免费一区二区三区最新 | 日韩在线短视频 | 天天插天天爽 | 国产中文视 | 国外成人在线视频网站 | 亚洲精品乱码久久久久 | 免费a级毛片在线看 | 亚洲精品一区二区精华 | 福利电影一区二区 | 日韩欧美在线影院 | 九草在线视频 | 麻豆系列在线观看 | 成人在线观看网址 | 天天操天 | 久久97视频| 91成年视频 | 亚洲伊人av| 午夜精品福利在线 | 亚洲爽爽网 | 亚洲欧美视频一区二区三区 | 91精品一区二区三区蜜桃 | 亚洲成av人片在线观看www | 亚洲免费资源 | 奇米7777狠狠狠琪琪视频 | 视频一区二区在线观看 | 精品欧美日韩 | 亚洲免费精彩视频 | 狠狠狠色丁香综合久久天下网 | 国产一区欧美日韩 | 日韩激情视频 | 免费 在线 中文 日本 | 欧美日韩不卡在线观看 | 日韩欧美在线综合网 | 日本午夜免费福利视频 | 天天干天天玩天天操 | 国产一区二区三区免费视频 | 久久91久久久久麻豆精品 | 麻豆网站免费观看 | 亚洲精品美女在线观看播放 | 婷婷激情综合 | 成人在线免费小视频 | www亚洲国产| 亚洲精品国偷拍自产在线观看蜜桃 | 中文字幕在线日本 | 91精品少妇偷拍99 | 狠狠色丁香婷婷综合最新地址 | 中文字幕在线乱 | 91九色在线观看 | 黄色av电影在线观看 | 三级视频片 | 国产成人在线免费观看 | 在线看黄网站 | 免费在线中文字幕 | 亚洲伊人第一页 | 欧美极品一区二区三区 | 国产麻豆精品在线观看 | 精品国产不卡 | 91福利专区 | 欧美日韩69| 日日摸日日爽 | wwwwww黄| 日本少妇久久久 | 超碰97人人干 | 91亚洲狠狠婷婷综合久久久 | 日日夜夜免费精品视频 | 天天干一干 | 亚洲午夜电影网 | 久久综合久久综合九色 | 色老板在线视频 | 青青河边草观看完整版高清 | 六月天色婷婷 | 国产永久免费观看 | 超碰电影在线观看 | 9999免费视频 | 欧美日韩精品综合 | 欧美一区二区三区激情视频 | 美女网站黄在线观看 | 亚洲一级性 | 日韩美女av在线 | 久草成人在线 | 日韩精品欧美一区 | 免费看在线看www777 | 美女视频黄是免费的 | av永久网址 | 久久av观看 | 久久精品三 | 天天综合在线观看 | 麻豆视频免费在线 | 国产精品综合久久 | 丁香视频五月 | 国产 日韩 中文字幕 | 91在线视频 | 欧美日韩不卡在线观看 | 国产视频资源在线观看 | www.av在线播放 | 亚洲毛片久久 | 五月婷婷色综合 | 亚洲在线视频观看 | 亚洲人成人在线 | 九九视频在线 | 人人澡人 | 偷拍区另类综合在线 | 亚洲一级片在线看 | 成在人线av | 五月天av在线 | 免费看毛片在线 | 亚洲日日射 | 婷婷六月天丁香 | 久久99热这里只有精品国产 | 天天射天天操天天干 | 欧美日韩p片 | 久久视频在线观看 | 久久手机看片 | 国产精品一二 | 国产精品欧美激情在线观看 | 中文字幕黄色网 | 久久精品国产成人精品 | 国产精品美女久久久久久久久久久 | 国产小视频国产精品 | 四虎在线视频免费观看 | 久久免费影院 | 超碰成人免费电影 | 91精品小视频 | 美国三级黄色大片 | 麻豆传媒一区二区 | 亚洲经典视频 | 天天爱天天操 | 91一区一区三区 | 在线观看国产91 | av三级在线看 | 久久综合九色综合久久久精品综合 | 久久免费看av | 成年人黄色免费视频 | 香蕉一区| 久久久亚洲麻豆日韩精品一区三区 | 色狠狠干 | 91精品国| 亚洲精品国产区 | 97激情影院 | 国产伦理一区二区三区 | 成人免费观看a | 国产小视频91 | 日韩成人看片 | 视频在线99re | 一区二区高清在线 | 久久久久这里只有精品 | 亚洲成人在线免费 | 久久国产一区 | 国产精品免费一区二区 | 国内毛片毛片 | 一区在线观看 | 中文字幕中文字幕在线中文字幕三区 | 成人影片在线播放 | 亚洲久草在线 | 中文字幕日韩一区二区三区不卡 | www.色的 | 国产偷国产偷亚洲清高 | 国产伦精品一区二区三区… | 国产成人三级在线观看 | 成人一区二区三区中文字幕 | 欧美日高清视频 | 91丨九色丨国产女 | 久久精品男人的天堂 | 天天综合操 | 国产在线91在线电影 | 国产精品美女免费视频 | 成人免费视频在线观看 | 日日操日日干 | 一级黄色免费网站 | 日韩欧美综合在线视频 | 国产精品婷婷午夜在线观看 | 国产欧美综合在线观看 | 日日日天天天 | 91成人精品国产刺激国语对白 | 欧美日韩精品在线视频 | 久久99深爱久久99精品 | 亚洲理论电影 | 五月激情亚洲 | 一本到视频在线观看 | 亚洲人成免费 | 国产手机在线 | www.天天操| 日韩欧美一区二区在线播放 | 亚洲国产精品久久久久婷婷884 | 久草久草久草久草 | 国产午夜三级一区二区三桃花影视 | 西西大胆免费视频 | 亚洲欧美视频一区二区三区 | 激情深爱五月 | 免费一级片在线观看 | 毛片二区| 伊人网综合在线观看 | 日韩中字在线 | 天天干天天做天天爱 | 欧美乱码精品一区二区 | 日本免费久久高清视频 | 中文字幕一区二区三区在线观看 | 国产亚洲欧美日韩高清 | 综合在线观看 | 中文在线亚洲 | 99热网站 | 精品国产伦一区二区三区免费 | 超级碰99 | 精品国产精品一区二区夜夜嗨 | 免费a级观看 | 四虎成人精品 | 在线观看成人毛片 | 最新av免费在线观看 | 国产免费又爽又刺激在线观看 | 国产热re99久久6国产精品 | 成人禁用看黄a在线 | 免费在线观看的av网站 | 婷婷婷国产在线视频 | 天天色欧美| 不卡电影一区二区三区 | 国产高清免费在线观看 | 日韩在线视频观看 | 综合久久五月天 | 97爱| 亚洲日本精品视频 | 又黄又刺激 | 在线国产一区 | 日韩精品综合在线 | 91精品成人 | 久久男人视频 | 欧美激情第28页 | 成人全视频免费观看在线看 | 视频在线99re | aa级黄色大片 | 亚洲婷婷网 | 一本色道久久精品 | 成人黄色av网站 | 91福利区一区二区三区 | 国产中的精品av小宝探花 | 99久久精品免费视频 | 五月综合激情 | 98福利在线 | 丁香六月天婷婷 | 欧美日韩三区二区 | 国产成人精品av在线 | 国产亚洲精品久久久久久 | 亚洲婷婷在线 | 91在线超碰| .国产精品成人自产拍在线观看6 | 午夜在线免费观看 | 在线观看v片 | 精品久久久免费 | 中文字幕免费高清 | 国产在线观看av | 美女视频久久久 | 日韩www在线 | 国产成人免费精品 | 一本一道波多野毛片中文在线 | 欧美aaa级片 | 99亚洲国产精品 | 日日噜噜噜噜夜夜爽亚洲精品 | 免费毛片一区二区三区久久久 | 日日夜夜噜噜噜 | 中文在线8资源库 | www.福利 | 国产成人一区二区在线观看 | 黄色在线观看网站 | 欧美 日韩 性 | 精品在线视频播放 | 狠狠色香婷婷久久亚洲精品 | 免费男女羞羞的视频网站中文字幕 | 色综合欧洲 | 91免费观看国产 | 国产精品乱码一区二区视频 | 视频直播国产精品 | 成人在线一区二区 | 91九色国产蝌蚪 | 国产精品一区在线 | 91手机视频在线 | 成人在线观看资源 | 久久久久久久99精品免费观看 | 久久免费看av | 国产精品对白一区二区三区 | 狠狠操狠狠干天天操 | 99视频精品全部免费 在线 | 青青河边草免费观看 | 国产自制av | 日韩精品一二三 | 精品久久久久久久久久久院品网 | 91av视频| 亚洲综合激情网 | 亚洲综合视频在线播放 | 全黄网站 | 国产福利不卡视频 | 99人久久精品视频最新地址 | 亚洲 欧美变态 另类 综合 | 亚洲国产美女精品久久久久∴ | 黄色成人av | 成人欧美在线 | 97超碰资源| 午夜免费福利片 | 深夜国产福利 | 精品不卡av | 久久综合久久久久88 | 亚洲一区美女视频在线观看免费 | 99视频久 | 欧美国产不卡 | 久久久久久久久久久福利 | 亚洲影院国产 | 色五月激情五月 | 久久视频网 | 国产最新福利 | 日韩理论电影网 | 成人a大片| 久久在线精品视频 | 在线亚洲成人 | 久久久精品高清 | 最近日本中文字幕 | 九热在线 | 亚洲综合视频在线 | 免费视频成人 | 99久精品视频| 国产精品亚洲a | 国产精品a成v人在线播放 | 久久经典视频 | 色在线国产 | 精品视频123区在线观看 | 久久精品视频在线播放 | 91精品一 | 久草免费在线 | 国产在线精品区 | 日韩精品中文字幕久久臀 | 9色在线视频 | 极品国产91在线网站 | 色干综合 | 久久精品久久国产 | 国产精品亚洲精品 | 激情视频免费观看 | 午夜色影院 | 97色免费视频 | 一区二区三区在线免费观看视频 | 探花系列在线 | 91av原创 | 激情久久久久 | 正在播放国产一区 | 超碰国产在线观看 | 99免在线观看免费视频高清 | 在线精品视频免费观看 | 久久欧洲视频 | 国产日产av | 亚洲人精品午夜 | 亚洲精品2区 | 亚洲免费观看视频 | 久久精品国产v日韩v亚洲 | 99久精品 | 最新成人在线 | 国产精品综合av一区二区国产馆 | 久草视频在线免费 | 日本精品一区二区三区在线观看 | 欧美天天综合 | 国产精品久久99综合免费观看尤物 | 天天爽综合网 | 黄色软件视频大全免费下载 | 中文字幕视频 | 国产成人精品一二三区 | 蜜臀av性久久久久蜜臀av | 国产色在线观看 | 日韩一区二区三免费高清在线观看 | 免费视频区 | 波多野结衣在线播放视频 | 亚洲毛片视频 | 91在线最新 | 日韩在线观看网址 | 9在线观看免费高清完整版在线观看明 | 国产成人av电影在线观看 | 国产婷婷久久 | 久久99在线视频 | 国产91全国探花系列在线播放 | 国产精品久久久久久久av大片 | 久爱综合 | 国产又粗又硬又爽的视频 | 中文字幕一区在线观看视频 | 天天干天天操天天搞 | 免费热情视频 | 精品久久久久久久久久久久久 | 香蕉视频4aa| 日韩久久久久久久久久 | 91最新视频| 国产精品99免视看9 国产精品毛片一区视频 | 久草视频在线播放 | av在线播放快速免费阴 | 国产精品永久久久久久久久久 | 在线观看欧美成人 | 日本不卡123区| 天天操天天摸天天干 | 久久久久人人 | 亚洲精品成人在线 | 成人av免费在线播放 | 久久国产精品第一页 | 亚洲激情av |