python迭代对象必须实现的方法,python中迭代器的作用
迭代程序
1.迭代器概述:
迭代器是一种访问集合元素的方法。迭代器对象从集合中的第一个元素开始访问,直到所有元素都被访问。迭代器不能回到前面,但这没什么。因为人们很少在迭代过程中倒退。
1.1使用迭代器的好处
对于支持原生随机访问的数据结构(如元组、列表等。),迭代器对于循环索引访问没有classic的优势,反而会丢失索引值。您可以使用内置函数enumerate()返回该索引值。但是,迭代器是访问不能随机访问的数据结构元素的唯一方法,比如set。
另外,迭代器的一个很大的优点就是不需要提前准备整个迭代过程的所有元素。迭代器只能在迭代到一个元素时计算元素,并丢弃之前或之后的元素。这个特性特别适合遍历巨大或无限的集合,比如几个G的文件或斐波那契数列。
迭代器的一大优点是它们提供了访问集合的统一接口。如果定义了__iter__())方法对象,就可以使用迭代器进行访问。
迭代器有两种基本方法。
Next方法:返回迭代器的下列元素
__iter__方法:返回迭代器对象本身。
用生成斐波那契数列的例子来解释为什么要用迭代器。
示例代码1
deffab(最大) :
n,a,b=0,0,1
当n
a,b=b,a b
n=n 1
如果用函数fab(max)直接用print打印,fab会返回None,所以函数的复用性会降低。其他函数无法获得fab函数返回的序列。
示例代码2
deffab(最大) :
L=[]
n,a,b=0,0,1
当n
附加(B)文件.
a,b=b,a b
n=n 1
返回L
2代码满足复用性要求,但是占用内存空间,最好不要。
示例代码3
Class (object): def _ init _ (self,max):
self.max=max
self.n,self.a,self.b=0,0,1
def _ _ ITER _ _(self):returnselfdefnext(self):if self . n
r=自我b
self.a、self.b=self.b
self.n=self.n 1
returnrraise StopIteration(
的双曲正弦值
对于FABS (5):打印键
Fabs类用next()继续返回序列的下一个数字,内存占用始终是确定的。
1.2使用迭代器
您可以使用内置的工厂函数ITER(iterable)来获取迭代器对象。
LST=兰奇(5)it=ITER(1)it
Next))方法可以访问以下元素:
lst。_ _下一个(
0列表。_ _下一个()1
LST。_ _下一个(2
LST。_ _下一个(3
LST。_ _下一个(4
lst。_ _下一个(
Python跨境迭代器抛出StopIteration异常。
现在你可以学习停止迭代器并使用它们来遍历。
Lst=范围(5)
它=ITER(第一次)尝试:
Val=it。_ _ next _ _()printvxhdwlcettopology 3360已通过
for语句自动调用next()获取元素,检查StopIteration异常的工作就完成了。
Lst=范围(5)
它=ITER(lst ) for i init:print(i ) I).
01
2
三
四
发电机
带yield的函数在Python中称为generator,但会在一些例子中说明(或者通过生成斐波那契数列)。
可以看出,代码3远不如代码1简洁,yield可以同时保持代码1的简洁和代码3的效果。
示例代码4
deffab(最大) :
n,a,b=0,0,1
当n
a,b=b,a b
pn=n=1
执行
对于fab(5)中的n:打印n
yield的作用是把一个函数变成一个生成器。带yield的函数不再是普通函数,Python解释器会把它当成生成器。
yield的作用是用一句话保存函数的执行状态。
在生成器中,如果没有返回,默认会一直执行到函数完成;如果遇到return,如果在执行过程中返回,将直接抛出StopIteration终止迭代。
方法
1%的使用率
%[(名称)][标志][宽度]。[精度]类型代码
(name)可选,用于选择指定的键。
Flags是可选的,可用的值有:
右对齐;正数加刚好,负数加负号;
-左对齐;正数前无符号,负数前有负号;
将空格向右对齐;正数前面有空格,负数前面有负号;
0右对齐;正数前无符号,负数前有负号;用0填空。
宽度可选,占用宽度。precision可选,小数点后保留的位数。
需要类型代码。
s,获取传入对象的__str__方法的返回值,并将其格式化到指定位置。
r,获取传入对象的__repr__方法的返回值,并将其格式化到指定位置。
c、integer:将数字转换为其unicode对应值,小数范围为0=i=1114111(py27仅支持0-255);Character:将字符添加到指定位置。
o,将整数转换为八进制表示,并将其格式化到指定位置。
将整数转换为十六进制表示形式,并将其格式化到指定位置。
d、将整数和浮点数转换成十进制表示,并格式化到指定位置。
E、将整数和浮点数转换成科学的计数方法,并格式化到指定位置(小写E)
E、将整数和浮点数转换成科学的计数方法,并格式化到指定位置(大写E)
f、将整数和浮点数转换成浮点数,并格式化到指定位置(默认保留6位小数)。
f,同上。
g、自动调整并转换整数和浮点数为浮点或科学记数法(6位以上用科学记数法表示),并格式化到指定位置(e如果是科学记数法;)
g、自动调整并转换整数和浮点数为浮点或科学记数法(6位以上用科学记数法表示),并格式化到指定位置(e如果是科学记数法;)
%,当字符串中有格式标志时,需要用%%表示百分号。
常见的格式化格式
tpl=我是%s % xhdwltpl=我是%s年龄%d % (xhdwl ,18)
tpl=我是%(姓名)s年龄%(年龄)d % { 姓名: xhdwl ,年龄:18}
tpl=percent %.2f % 99.97623tpl=我就是%(pp).2f % {pp: 123.425556,}
tpl=我是%.2f %% % {pp: 123.425556,}
2.格式模式
[[填充]对齐][符号][#][0][宽度][,][。精度][类型]
填充[可选]填充在空白处的字符。
align[可选]对齐方法(与宽度一起使用)
,内容向右对齐(默认)
=,内容右对齐,符号放置在填充字符的左侧,并且仅对数值类型有效。即使:符号填充数字
,内容居中。
sign[可选]是否有带符号的数字。
,加正加负加负;
-,正号不变,负号加负号;
空格,加空格,减加减;
#[可选]对于二进制、八进制和十六进制,如果加上#将显示0b/0o/0x,否则不显示。
,[可选]向数字添加分隔符,如1,000,000。
width[可选]格式化位的宽度。precision[可选]保留小数位数的精度。
type[可选]格式类型。
传入了“字符串类型”参数
s,格式化字符串类型数据
空白,如果未指定类型,则默认值为None,与s相同。
传入了“整型”参数
b,自动将十进制整数转换成二进制表示并格式化。
自动将十进制整数转换成相应的unicode字符。
十进制整数
o,自动将十进制整数转换成八进制表示然后格式化;
X,十进制整数自动转换成十六进制表示,然后格式化(小写X)
自动将一个十进制整数转换成十六进制表示,然后格式化(大写X)
浮点或十进制类型的参数被传入。
E,转换成科学记数法(小写E)然后格式化;
E,转换成科学记数法(大写E),然后格式化;
f,转换为浮点型(小数点后默认保留6位),然后格式化;
f,转换为浮点型(小数点后默认保留6位),然后格式化;
g,自动在E和f之间切换。
g,自动在E和f之间切换。
%,显示百分比(默认显示6位小数)
通用格式
tpl=我是{},年龄{},{} 。格式(“七”,18,“xhdwl”)
tpl=我是{},年龄{},{} 。格式(*[seven ,18, xhdwl])
tpl=我{0},年龄{1},真的{0} 。格式(七,18)
tpl=我{0},年龄{1},真的{0} 。格式(*[seven ,18])
tpl=我是{姓名},年龄{年龄},真的是{姓名} 。格式(姓名=七,年龄=18岁)
tpl=我是{姓名},年龄{年龄},真的是{姓名} 。格式(**{ 姓名:七,年龄:18})
tpl=本人{0[0]},年龄{0[1]},真的{0[2]} 。格式([1,2,3],[11,22,33])
tpl=我是{:s},年龄{:d},钱{:f} .格式(七,18,88888.1)
tpl=我是{:s},年龄{:d} .格式(*[七,18])
tpl=我是{姓名:s},年龄{年龄:d}”.格式(姓名=七,年龄=18岁)
tpl=我是{姓名:s},年龄{年龄:d}”.格式(**{ 姓名:七,年龄:18})
tpl=numbers: {:b},{:o},{:d},{:x},{:X},{:%} .格式(15,15,15,15,15,15,15.87623,2)
tpl=numbers: {:b},{:o},{:d},{:x},{:X},{:%} .格式(15,15,15,15,15,15,15.87623,2)
tpl=numbers: {0:b},{0:o},{0:d},{0:x},{0:X},{0:%} .格式(15)
tpl=numbers: {num:b},{num:o},{num:d},{num:x},{num:X},{num:%} .格式(数字=15)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。