python学习记录——第3天

本文深入探讨Python中特殊方法如__init__和__repr__的作用,以及如何利用它们来增强类的描述能力。同时,详细解析生成器的概念、工作原理及应用场景,帮助读者理解和掌握这一高效语法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

连续3天开会,苦逼!打乱节奏!趁着会议期间,溜出来看看书,码代码,不亦乐乎!!!

第8章 python类的特殊方法

  1. 是不是常常见到很多双下划线的方法或者属性?这些其实很烦人的,因为看着不舒服。但这些特殊的东东能实现特殊的功能,最常见的就是构造方法:__init__,这个可以实现自己的初始化逻辑。
  2. 问题1:打印输出一个对象,比如类的对象,经常见到如下的东东:
>>> class Item:
	def __init__(self,name,price):
		self.name=name
		self.price=price

	
>>> im=Item('鼠标',29.8)
>>> print(im)
<__main__.Item object at 0x0000020BC93CCE48>
  1. 分析1:这里打印的时候调用了对象的__repr__()方法的返回值,所以你会发现打印对象和该对象的这个方法,打印出来的东东一样。
>>> print(im)
<__main__.Item object at 0x0000020BC93CCE48>
>>> print(im.__repr__)
<method-wrapper '__repr__' of Item object at 0x0000020BC93CCE48>
  1. 扩展1:有了上面这个“自我描述”的方法,我们自己设计类的时候,就可以通过重写这个方法,完全打印类的状态,好用吧?
  2. 问题2:生成器是一种非常优秀的语法,使用这个可以让程序变得很优雅!!!哎呀我去,说的高大上,优雅归优雅,刚碰到这东东还是比较难理解的。
>>> def test(val,step):
	print('函数开始执行')
	cur=0
	for i in range(val):
		cur+=i*step
		yield cur

创建生成器需要两个步骤:(1)定义一个包含yield语句的函数;(2)调用第1步得到生成器。
你会发现如果将test函数的最后一行修改为:print(cur),就成了简单的函数了,实现的功能就是简单的遍历区间,并将循环计数器乘以step后添加到cur变量上。
8. 分析2:yield cur 语句有两个作用:(1)每次返回一个值,类似于return语句;(2)冻结执行,程序每次执行到这里就会暂停。当程序再次调用next()函数获取生成器的下一个值时,程序才会继续向下执行。

>>> t=test(10,2)
>>> print(next(t))
函数开始执行
0
>>> print(next(t))
2

可以看到,程序执行t=test(10,2)的时候,程序并没有执行test()函数,只是第一次调用next函数时,才开始执行test函数。
10. 其它的不好玩,也没感兴趣的,大家自己看看吧。还有个好玩的hash函数,可以获取哈希码,做作业题的童鞋可能需要,自己琢磨着玩一下了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值