适才发现之前在pydev中使用的语法检查器是python3.2,而解释器是python2.7……罪过罪过,从此篇之后,不出意外都是使用python3.x版本解释器
本文主要举例介绍python的built-in函数iter,以及类中的两个函数__iter__,__next__。其中作为iterator的对象是类,而不是容器(因为容器或generator作为iterator对象很简单,这里不多说了)
iter函数有两种用法,一种是传一个参数,一种是传两个参数。返回的结果都是返回一个iterator对象。
先说传两个参数的,比如有
i1 = iter(itr, 'c')
这个意思是说,返回itr的iterator,而且在之后的迭代之中,迭代出来'c'就立马停止。对这个itr有什么要求呢?这个itr在这里必须是callable的,即要实现__call__函数
再说传一个参数,有
i2 = iter(itr)
这里itr必须实现__iter__函数,这个函数的返回值必须返回一个iterator对象
看例子:
class Itr(object):
def __init__(self):
self.result = ['a', 'b', 'c', 'd']
self.i = iter(self.result)
def __call__(self):
res = next(self.i)
print("__call__ called, which would return ", res)
return res
def __iter__(self):
print("__iter__ called")
return iter(self.result)
itr = Itr()
# i1必须是callable的,否则无法返回callable-iterator
i1 = iter(itr, 'c')
print("i1 = ", i1)
# i2只需要类实现__iter__函数即可返回
i2 = iter(itr)
print("i2 = ", i2)
for i in i1:
print(i)
for i in i2:
print(i)
输出结果是:
i1 = <callable_iterator object at 0x1349710>
__iter__ called
i2 = <list_iterator object at 0x133a090>
__call__ called, which would return a
a
__call__ called, which would return b
b
__call__ called, which would return c
a
b
c
d
可以看到传入两个参数的i1的类型是一个callable_iterator,它每次在调用的时候,都会调用__cal__函数,并且最后到c就停止了。
而i2就简单的多,itr把自己类中一个容器的迭代器返回就可以了。
有朋友可能不满意,对上面的例子只是为了介绍iter()函数传两个参数的功能而写,如果真正想写一个iterator的类,需要使用__next__函数。这个函数每次返回一个值就可以实现迭代了。
class Next(object):
def __init__(self, data = 1):
self.data = data
def __iter__(self):
return self
def __next__(self):
print("__next__ called")
if self.data > 5:
raise StopIteration
else:
self.data += 1
return self.data
for i in Next(3):
print(i)
输出结果是:
__next__ called
4
__next__ called
5
__next__ called
6
__next__ called
很简单把。唯一需要注意下的就是__next__中必须控制iterator的结束条件,不然就死循环了。
分享到:
相关推荐
标题中的“Python库 | mdf_iter-0.0.2-cp38-cp38-win32.whl”指的是一个特定版本的Python库——mdf_iter,版本号为0.0.2,专为Python 3.8(cp38)编译,并且适用于Windows 32位操作系统。这个库的安装文件格式是`....
标签中的关键词包括“mog-python”,“mog”,“高斯模型”,“高斯模型_python”以及“高斯混合_python”,这些标签强调了MOG算法与Python语言的关联,以及高斯模型在其中的重要作用。 压缩包内的文件名如“iter_...
在机器学习领域,全局优化是寻找复杂函数最优解的关键任务,尤其在参数调优、模型选择等场景中显得尤为重要。高斯过程(Gaussian Process,GP)是一种非参数概率模型,它提供了一种强大的框架来处理不确定性,并进行...
标题中的"res10_300x300_ssd_iter_140000_fp16.caffemodel"是指一个经过训练的深度学习模型,用于目标检测任务,特别是人脸检测。这个模型是基于Caffe框架实现的,Caffe是一种广泛使用的深度学习库,以其高效和速度...
"array-iter-next-crnt"就是一个这样的库,专门针对数组操作,特别是迭代和跟踪当前项。这个库的核心功能是实现了一个迭代器,可以逐个获取数组中的元素,并在迭代过程中保持对当前项的记录。 在JavaScript中,`...
for _ in range(max_iter): # 更新速度和位置 # ... (根据速度更新公式进行计算) # 检查并更新个人和全局最好位置 # ... # 打印当前全局最好位置的函数值 # ... return gbest, pbests ``` 这里的`...
在Python编程语言中,`iter()`函数和`next()`函数是处理迭代操作的关键工具,尤其在遍历序列、集合和其他可迭代对象时。本文将详细解释这两个函数的工作原理及其在Python编程中的应用。 首先,`iter()`函数是用于将...
在本篇中,我们将深入探讨这些模型的背景、用途以及与OpenCV的关系。 **Caffe模型:res10_300x300_ssd_iter_140000_fp16.caffemodel** `Caffe` 是一个广泛使用的深度学习框架,以其高效、速度和灵活性而闻名。这个...
标题“res10_300x300_ssd_iter_140000_fp16.7z”指的是一个人脸识别模型,该模型基于Caffe深度学习框架,并且经过了140,000次迭代的训练。模型的分辨率是300x300像素,表明它被设计用于处理这类尺寸的输入图像。"fp...
本篇文章将详细探讨如何使用Python与XML文件进行交互。 首先,我们需要导入`xml.etree.ElementTree`模块,它是Python的标准库之一,提供了XML处理的API。这个模块包含了两个主要的类:`ElementTree`和`Element`。`...
VGG_VOC0712_SSD_300x300_iter_120000.caffemodel,caffe-SSD下已经训练好的VGG模型文件,希望对大家有所帮助。
在这个场景中,"VGG_VOC0712_SSD_300x300_iter_120000.ckpt.zip" 是一个包含了SSD模型训练成果的压缩文件,特别提到了SSD300,意味着该模型采用了300x300的输入尺寸。 SSD的主要创新在于它结合了预测固定大小边界框...
在Python编程环境中,K-Means聚类是一种广泛使用的无监督机器学习算法,用于将数据集划分成不同的簇。这个算法基于一个简单的概念:通过迭代调整数据点的分类,使得同一簇内的数据点尽可能接近,而不同簇之间的数据...
pose_iter_584000.caffemodel) coco(pose_deploy_linevec.prototxt; pose_iter_440000.caffemodel) mpi(pose_deploy_linevec.prototxt; pose_deploy_linevec_faster_4_stages.prototxt; pose_iter_160000.caffe...
标题中的"res10_300x300_ssd_iter_140000.caffemodel"和"deploy.prototxt"是两个关键文件,它们在计算机视觉领域,特别是深度学习模型的训练和应用中扮演着重要角色。这两个文件通常与Caffe框架有关,一个深度学习...
faceparsing_79999_iter.pth,人脸分割faceparsing的预训练模型,PyTorch版本。
使用`collections.Counter`类统计输入文本中各字符的出现次数。 ```python from collections import Counter def count_chars(text): return Counter(text) ``` 2. 构建哈夫曼树: 可以用两个队列`min_heap`...
在这个示例代码中,`admm_rpca`函数接受输入矩阵X、松弛参数rho和最大迭代次数max_iter。函数内部,我们首先初始化L和S为零矩阵,然后通过ADMM的三个步骤进行迭代更新。在每次迭代中,我们使用随机化奇异值分解...
标签“python 开发语言 Python库”表明这是与Python编程语言相关的开发资源,`tsne_mp`库是Python社区中的一员,可以帮助开发者处理数据降维和可视化的问题。 综上所述,`tsne_mp`是一个优化过的Python库,专为并行...