最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

python学习路程

来源:懂视网 责编:小采 时间:2020-11-27 14:14:20
文档

python学习路程

python学习路程:这一章中作者简要的介绍了python数据模型,主要是python的一些特殊方法。比如__len__, __getitem__. 并用一个纸牌的程序来讲解了这些方法 首先介绍下Tuple和nametuple的区别:Nametuple是类似于元组的数据类型。除了能够用索引来访问数据,还支持用方便的属性
推荐度:
导读python学习路程:这一章中作者简要的介绍了python数据模型,主要是python的一些特殊方法。比如__len__, __getitem__. 并用一个纸牌的程序来讲解了这些方法 首先介绍下Tuple和nametuple的区别:Nametuple是类似于元组的数据类型。除了能够用索引来访问数据,还支持用方便的属性
这一章中作者简要的介绍了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__的作用是类似的


声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

python学习路程

python学习路程:这一章中作者简要的介绍了python数据模型,主要是python的一些特殊方法。比如__len__, __getitem__. 并用一个纸牌的程序来讲解了这些方法 首先介绍下Tuple和nametuple的区别:Nametuple是类似于元组的数据类型。除了能够用索引来访问数据,还支持用方便的属性
推荐度:
标签: 学习 笔记 路径
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top