range和yield的使用

range对象

range类型表示不可变的数字序列,通常用于在for循环指定的次数。

class range(start,stop,step)
start
start 形参的值 (如果该形参未提供则为 0)
stop
stop 形参的值
step
step 形参的值 (如果该形参未提供则为 1)

注意事项 a. range构造器的参数必须为整数(可以是内置的int或任何实现了__index__特殊方法的对象)。如果省略start参数,其默认值为0,若step为零则会引发ValueError。
b. step为正值,确定range内容的公式为r [ i ] = start + stepi 其中i >=0且r [ i ] < stop。
c.step为负值,确定range内容的公式仍然为r [ i ] =start + step
i,但限制条件改为i >= 0且r [ i ] >stop。
d.如果r [ 0 ]不符合值的限制条件,则该range对象为空。range对象确实支持负索引,但是会将其解读为从正索引所确定的序列的末尾开始索引。

#一些range对象的例子:
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
>>> list(range(0, 10, 3))
[0, 3, 6, 9]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> list(range(0))
[]
>>> list(range(1, 0))
[]

range类型相比常规list或tuple的优势在于一个range对象总是占用固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保存了start,stop和step的值,并会根据需要计算具体单项或子范围的值)。

yield的使用

yield的功能类似于return,但是不同之处在于它返回的是生成器。
生成器:
生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器)。
如果一个函数包含yield关键字,这个函数就会变为一个生成器。
生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用。由于生成器也是一个迭代器,那么它就应该支持next方法来获取下一个值。

一位我认为讲的很不错的关于yield的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值