迭代器顾名思义,是用来迭代里面的每一个元素的。
生成迭代器
一般可以将【列表】【元祖】【字典】【集合】转换为迭代器
用 iter(list/tuple/dict) 函数来生成迭代器。
遍历迭代器
遍历迭代器可以用 next(迭代器变量) 的形式来遍历迭代器的某一个元素。next控制着一个类似于指针的对象,这个指针会取出当前指向的迭代器元素。
综合实例
rate_book = (
{
'rank': 1,
'rate': 1.0
},
{
'rank': 2,
'rate': 1.2
},
{
'rank': 3,
'rate': 1.5
},
{
'rank': 4,
'rate': 2.1
},
)
emplyees = [
{
'name': 'john',
'rank': 1,
'salary': 5600
},
{
'name': 'cherry',
'rank': 2,
'salary': 7800
},
{
'name': 'mark',
'rank': 2,
'salary': 8000
},
{
'name': 'martin',
'rank': 3,
'salary': 9300
},
{
'name': 'rosa',
'rank': 3,
'salary': 9000
},
{
'name': 'frank',
'rank': 4,
'salary': 12000
},
]
width = 15
def comput_extend(rank: int):
rate = 0.0
for dict in rate_book:
if dict['rank'] == rank:
rate = dict['rate']
break
return rate
使用了yield的函数就是一个生成器。生成器只能用于迭代操作
def get_all_salary():
# 在函数内部也创建了一个迭代器,用来迭代员工列表
it = iter(emplyees)
trigger = True
while trigger:
try:
dd = next(it)
name = dd['name']
salary = dd['salary']
rank = dd['rank']
money = comput_extend(rank) * salary
result = '姓名:{}'.format(name).ljust(width) + '等级:{}'.format(rank).ljust(width) + '原始收入:${}'.format(
salary).ljust(width) + '最终收入:${}'.format(money).ljust(width)
yield result
except:
trigger = False
生成器函数执行一遍,会返回一个迭代器
kk = get_all_salary()
go = True
while go:
try:
# 然后用next函数配合while循环去遍历迭代器的输出内容
# 没执行一次next函数,就会向后迭代输出的内容
print(next(kk))
except StopIteration as error:
print(error)
go = False