python学习路程
这一章中作者简要的介绍了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
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). 否则就是表示对象的字符串:
<br>
以上是python学习路程的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

C语言中没有内置求和函数,需自行编写。可通过遍历数组并累加元素实现求和:循环版本:使用for循环和数组长度计算求和。指针版本:使用指针指向数组元素,通过自增指针遍历高效求和。动态分配数组版本:动态分配数组并自行管理内存,确保释放已分配内存以防止内存泄漏。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

distinct 和 distinguish 虽都与区分有关,但用法不同:distinct(形容词)描述事物本身的独特性,用于强调事物之间的差异;distinguish(动词)表示区分行为或能力,用于描述辨别过程。在编程中,distinct 常用于表示集合中元素的唯一性,如去重操作;distinguish 则体现在算法或函数的设计中,如区分奇数和偶数。优化时,distinct 操作应选择合适的算法和数据结构,而 distinguish 操作应优化区分逻辑效率,并注意编写清晰可读的代码。

!x 的理解!x 是 C 语言中的逻辑非运算符,对 x 的值进行布尔取反,即真变假,假变真。但要注意,C 语言中真假由数值而非布尔类型表示,非零视为真,只有 0 才视为假。因此,!x 对负数的处理与正数相同,都视为真。

C语言中没有内置的sum函数用于求和,但可以通过以下方法实现:使用循环逐个累加元素;使用指针逐个访问并累加元素;对于大数据量,考虑并行计算。

H5页面需要持续维护,这是因为代码漏洞、浏览器兼容性、性能优化、安全更新和用户体验提升等因素。有效维护的方法包括建立完善的测试体系、使用版本控制工具、定期监控页面性能、收集用户反馈和制定维护计划。

如何在爬虫时获取58同城工作页面的动态数据?在使用爬虫工具爬取58同城的某个工作页面时,可能会遇到这样�...

复制粘贴代码并非不可行,但需谨慎对待。代码中环境、库、版本等依赖项可能与当前项目不匹配,导致错误或不可预料的结果。务必确保上下文一致,包括文件路径、依赖库和 Python 版本。此外,复制粘贴特定库的代码时,可能需要安装该库及其依赖项。常见的错误包括路径错误、版本冲突和代码风格不一致。性能优化需根据代码原用途和约束重新设计或重构。理解并调试复制的代码至关重要,切勿盲目复制粘贴。
