Python 生成器 & 迭代器

迭代器顾名思义,是用来迭代里面的每一个元素的。

生成迭代器

一般可以将【列表】【元祖】【字典】【集合】转换为迭代器

用 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值