您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

python学习路程

2025/11/3 9:45:56发布29次查看
这一章中作者简要的介绍了python数据模型,主要是python的一些特殊方法。比如__len__, __getitem__. 并用一个纸牌的程序来讲解了这些方法
首先介绍下tuple和nametuple的区别:
nametuple是类似于元组的数据类型。除了能够用索引来访问数据,还支持用方便的属性名来访问数据。
传统的元组访问如下。对每个元素的访问都必须通过索引来找到。这种找法很不直观
tup1=(,,) tup1[1]
使用nametuple来构造:
tup2=namedtuple(,[,,]) t1=tup2(,,) t1 t1.age t1.height t1.name
得到结果如下,namedtupel中tuple2是类型名,name,age,height是属性名字
从上面的访问可以看到,直接用t1.age的方法访问更加直观。当然也可以用索引比如t1[0]的方法来访问
namedtupe1也支持迭代访问:
t t1:     t
和元组一样,namedtupel中的元素也是不可变更的。如果执行t1.age+=1。将会提示无法设置元素
traceback (most recent call last):
  file e:/py_prj/fluent_py.py, line 17, in <module>
    t1.age+=1
attributeerror: can't set attribute
下面来看下书中的纸牌例子,代码如下:
collections namedtuple card=namedtuple(,[,]) frenchdeck:     ranks=[str(n) n range(2,11)] + list()     suits=.split()     __init__(self):         self._cards=[card(rank,suit) suit self.suits
rank self.ranks]     __len__(self):         len(self._cards)     __getitem__(self, position):         self._cards[position] __name__==:     deck=frenchdeck()     len(deck)     deck[1]
首先定义了的纸牌元组card, rank代表纸牌数字,suit代表纸牌花色。然后在frenchdeck首先定义了ranks和suit的具体指。在__init__中对self._cards进行初始化。
__len__反馈self._cards的长度。__getitem__反馈具体的纸牌值。
结果如下,纸牌的长度为52,其中deck[1]为card(rank=’3’,suit=’spades’)
可以看到len(deck)其实调用的是__len__方法。deck[1]调用的是__getitem__
由于有了__getitem__方法,还可以进行迭代访问,如下:
d deck:     d
既然是可迭代的,那么我们可以模拟随机发牌的机制。
from random import choice
print choice(deck)
得到结果:
card(rank='9', suit='hearts')
接下来看另外一个例子,关于向量运算的。比如有向量1 vector1(1,2),向量2 vector2(3,4)。那么vector1+vector2的结果应该是(4,6)。vector1和vector2都是向量,如何实现运算呢。方法是__add__,__mul__
代码如下:
vector:     __init__(self,x=0,y=0):         self.x=x         self.y=y     __repr__(self):         % (self.x,self.y)     __abs__(self):         hypot(self.x,self.y)     __bool__(self):         bool(abs(self))     __add__(self,other):         x=self.x+other.x         y=self.y+other.y         vector(x,y)     __mul__(self, scalar):         vector(self.x*scalar,self.y*scalar)
__name__==:     v1=vector(1,2)     v2=vector(2,3)     v1+v2     abs(v1)     v1*3
运算结果如下:
在这里__add__,__mul__,__abs__分别实现了向量加法,乘法,以及求模的运算。
值得一提的是__repr__的方法。这个方法是在需要打印对象的时候调用。例如print vector(1,2)的时候得到vector(1,2). 否则就是表示对象的字符串:<vector object at 0x0000>.这个__repr__和__str__的作用是类似的

以上就是python学习路程的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product