**
迭代器
**
可迭代对象:可调用__iter__()方法的对象,大部分对象都是可迭代的
string='hello world'
print(string.__iter__())
输出:
<str_iterator object at 0x0311CB10>
容器:•容器是一系列元素的集合,str、list、set、dict、file、sockets对象都可以看作是容器,容器都可以被迭代(用在for,while等语句中),因此他们被称为可迭代对象。
迭代器:将可迭代对象通过iter方法放入一个容器中
基本方法:
生成迭代器:iter(iterable_object)
获取迭代器内数据:iter_generator.next()
生成迭代器:
string='hello world'
it=iter(string)
print(next(it))
print(type(it))
#输出:
h
<class 'str_iterator'>
迭代器的特点:
迭代器对象从集合的第一个元素开始访问,每个元素只能访问一次,知道结束,无法循环访问,超过可访问的次数即报错
string=[1,2,3,4]
it=iter(string)
print(next(it))
print(next(it))
print(next(it))
print(next(it))
print(next(it))
输出:
1
2
3
4
Traceback (most recent call last):
File "C:\Users\高顿\Desktop\myblog.py", line 7, in <module>
print(next(it))
StopIteration
生成器
生成器:生成器其实是一种特殊的迭代器
特征:一个函数,不用return返回,而用yield返回,返回的是一个迭代器
#用生成器
def mygenerator():
for i in range(100):
if i >50:
yield i
f=mygenerator()
print(next(f))
输出:
51
*************************************
#用普通函数
def mygenerator():
s=[]
for i in range(100):
if i >50:
s.append(i)
return s
f=mygenerator()
print(f)
#输出:
[51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
可以看出,使用生成器,可以省代码,更简洁。