python迭代器

*定义*

迭代器是一个可以遍历容器的一个对象

\1. 迭代器返回一个对象

\2. 那些东西可以进行迭代

容器类型的---list set 字典 字符串

*方法*

"""

迭代器

#注意是两个下划线

list01.iter() 返回一个迭代器对象

<list_iterator object at 0x0000024037E0C588>

list01 = [1,2,3,4]

#注意是两个下划线

a = list01.iter()

print(a) #<list_iterator object at 0x0000024037E0C588>

1.我听要他何用,他是一个对象,我想要的是值

迭代器对象.next() 返回一个值

2.他只能返回第一个值吗 no

因为next()可以记忆位置,每次你调用一次,他会记住这位置,然后下一次从下一个位置开始

3.我要是一直调用,可以吗

报错StopIteration,没有数据了

我们的next没有办法回头,不会从头开始,他只会从记忆的位置的开始

"""

list01 = [1,2,3,4]

a = list01.iter()

print(a.next()) #1

print(a.next()) #2

print(a.next()) #3

print(a.next()) #4

print(a.next()) #报错

*迭代*

list01 = [1,2,3,4]

#注意是两个下划线

a = list01.iter()

"""

迭代对象的遍历

1.next() 不会从头开始, 每次从记忆的位置开始

2.for循环就相当于是不断的打印next()。但是为什么没报错

自己抛出StopIteration,然后停止循环

"""

for i in list01:

print(i)

*迭代对象*

\1. 那些东西可以进行迭代

容器类型的---list set 字典 字符串

*为什么是两个下划线*

有些方法以双下划线 “__” 开头和结尾,它们是Python的魔法函数,用于特殊用途

Next()

.next()

.Next()

init()

iter()

Func_sum()

*生成器*

*定义*

生成器也是一种迭代器,但是你只能对其迭代一次。

>>> a = func_add01([2,3,5,7,9])

>>> a

<generator object func_add01 at 0x000001AD11F8D148>

>>> for i in a:

print(i)





3

4

6

8

10

>>> a.next()

Traceback (most recent call last):

File "<pyshell#18>", line 1, in <module>

a.next()

StopIteration

>>> b = func_add01([2,3,5,7,9])

>>> b.next()

3

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个特殊的迭代器。

>>> func_add01([1,2,3,4])

<generator object func_add01 at 0x000001AD11F8D148

生成器可以一边循环一边计算

优点是节省内存

关键字是:yield

*代码*

>>> def func_add(list01):

list02 = []

for i in list01:

list02.append(i+1)

return list02



>>> func_add([1,2,3,4])

[2, 3, 4, 5]

>>> def func_add01(list01):

for i in list01:

yield i+1





>>> func_add01([1,2,3,4])

<generator object func_add01 at 0x000001AD11F8D148>

>>> list(func_add01([1,2,3,4]))

[2, 3, 4, 5]

>>> a = func_add01([2,3,5,7,9])

>>> a

<generator object func_add01 at 0x000001AD11F8D148>

>>> for i in a:

print(i)





3

4

6

8

10

>>> a.next()

Traceback (most recent call last):

File "<pyshell#18>", line 1, in <module>

a.next()

StopIteration

>>> b = func_add01([2,3,5,7,9])

>>> b.next()

3

>>>

*语法*

由于生成器是一个返回迭代器的函数

生成器一边循环一边计算

关键字是yield

def func_name(canshu):

for i in canshu:

yield luoji

*总结*

\1. 生成器都是迭代器,迭代器不一定是生成器

\2. 字符串,列表,元组,字典,集合都可以被for循环,说明他们都是可迭代对象

\3. 迭代器的两个方法:1.有iter() 2. 有next()

\4. isinstance() 类型判断。isinstance(a,Iterable) 判断a 是否是可迭代对象。

*练习*

\1. 定义一个函数,list01=[1,2,3,4,5],把里面的每一个元素进行平方,返回一个新列表

\2. 定义一个函数,list01=[1,2,3,4,5],把里面的每一个元素对2进行取余,返回一个新列表

*推导式*

*引入*

"""

普通循环

"""

for i in [1,2,3,4]:

print(i)

"""

推导式

"""

[print(i) for i in [1,2,3,4]]

*定义*

推导式是从一个或者多个迭代器快速创建序列的一种方法。

*语法*

[逻辑/结果 for i in 序列类型的变量]

你想要什么类型,就在外层包裹什么

序列类型

[] () {k,v} {}

*用法*

*列表类型*

"""

推导式

"""

list01 = [1,2,3,4]

a= [i+1 for i in list01]

print(a) #[2, 3, 4, 5]

print(type(a)) #<class 'list'>

*元组类型*

#把里面的代码看成一个整体,一个对象

#利用我们的tuple()函数

a= tuple(i+1 for i in list01)

print(a) #(2, 3, 4, 5)

print(type(a)) #<class 'tuple'>

*集合类型*

list01 = [1,2,3,4]

a= {i+1 for i in list01}

print(a) #{2, 3, 4, 5}

print(type(a)) #<class 'set'>

*字典类型*

dict01 = {"王五":20,"张三":50,"李四":80,"赵六":18}



for k,v in dict01.items():

print(k,v)



{print(k,v) for k,v in dict01.items()}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值