## 深入分析 iter() 方法 顶原

DemonFS

### 一、上代码、学用法

iter(object[, sentinel]) sentinel 英文翻译为 哨兵。

sentinel 参数是可选的，当它存在时，object 不再传入一个可迭代对象，而是一个可调用对象，通俗点说就是可以通过()调用的对象，而 sentinel 的作用就和它的翻译一样，是一个“哨兵”，当时可调用对象返回值为这个“哨兵”时，循环结束，且不会输出这个“哨兵”。

``````from random import randint

def guess():
return randint(0, 10)

num = 1
# 这里先写死心里想的数为5
for i in iter(guess, 5):
print("第%s次猜测，猜测数字为: %s" % (num, i))
num += 1

# 当 guess 返回的是 5 时，会抛出异常 StopIteration，但 for 循环会处理异常，即会结束循环
``````

### 二、还是看看文档吧

The first argument is interpreted very differently depending on the presence of the second argument.

Without a second argument, object must be a collection object which supports the iteration protocol (the _iter_() method), or it must support the sequence protocol (the _getitem_() method with integer arguments starting at 0). If it does not support either of those protocols, TypeError is raised.

``````In [5]: iter("123")
Out[5]: <str_iterator at 0x105c9b9e8>

In [6]: iter([1, 2, 3])
Out[6]: <list_iterator at 0x105f9f8d0>

In [7]: iter(123)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
----> 1 iter(123)

TypeError: 'int' object is not iterable
``````

If the second argument, sentinel, is given, then object must be a callable object. The iterator created in this case will call object with no arguments for each call to its _next_() method; if the value returned is equal to sentinel, StopIteration will be raised, otherwise the value will be returned.

One useful application of the second form of iter() is to build a block-reader. For example, reading fixed-width blocks from a binary database file until the end of file is reached:

``````from functools import partial
with open('mydata.db', 'rb') as f:
for block in iter(partial(f.read, 64), b''):
process_block(block)
``````

### 三、小结一下

1、iter() 方法不管有没有第二个参数，返回的都是迭代器

2、iter() 方法第一个参数的参数类型，根据有无第二个参数决定

### DemonFS

Caffe深入分析(源码)

Caffe的整体流程图： 程序入口：main() 1 int main(int argc, char** argv) {2 .....3 return GetBrewFunction(caffe::string(argv[1]))();4 ....5 } gbrewmap实现过程，首先通过 typedef定义......

liurio
2017/08/05
0
0
C++ map的基本操作和用法

1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小，除了那个操作节点，对其他的节点都没有什么影响。对于迭代器来说，可以修改实值，而不能修改key。 2、map的功...

2012/04/13
89.5K
2
C++ map的PC蛋蛋平台搭建基本操作和用法

PC蛋蛋平台搭建Q1446595067 1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小，除了那个操作节点，对其他的节点都没有什么影响。对于迭代器来说，可以修改实值，...

oidda
2018/07/18
0
0

2018/01/02
0
0
Python的迭代器和生成器

Python的迭代器和生成器 先说迭代器，对于string、list、dict、tuple等这类容器对象，使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数，iter()是python的内置函数。iter(...

2015/07/30
219
0

Linux输入法fcitx的安装问题

Fcitx 总共要安装的包如下 fcitxfcitx-binfcitx-config-commonfcitx-config-gtk | fcitx-config-gtk2fcitx-datafcitx-frontend-allfcitx-frontend-gtk2fcitx-frontend-gtk3......

CHONGCHEN
39分钟前
3
0

40分钟前
3
0
spring boot升级到spring cloud

1、先升级spring boot 版本到2.1.3 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.3.RELEAS......

moon888
43分钟前
10
0

DevOps源于Development和Operations的组合 常见的定义 DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变...

46分钟前
1
0

54分钟前
2
0