Python基础知识14(# _iterator-可迭代对象)

#可迭代对象

# list , tuple, string, range, set, dict..... 生成器, 迭代器

# 可迭代对象 使用 成员操作符 in, not in

# 迭代器

# 特殊的对象, 一定是可迭代对象, 具备可迭代对象的特征

# 通过 iter方法 把一个可迭代对象封装成一个迭代器

# 通过 next方法, 迭代(驱动) 迭代器对象

# 迭代器对象只能从头到尾迭代一遍

list1 = list(range(3, 10))

e = enumerate(list1, 6)

print(e)

# next()  

# print(next(e))

# print(next(e))

# print(next(e))

# print(next(e))

# print(next(e))

#

list2 = list(range(5,10))  #'list' object is not an iterator

# print(next(list2))

# iter()

it = iter(list2)  # <list_iterator object at 0x0000000001E051F0>

# print(it)

# print(next(it))

# print(next(it))

# print(next(it))

# print(next(it))

# print(next(it))  

# print(next(it))  #  StopIteration

it2 = iter(list2)  # 生成**新的**迭代器对象


 

for i in it:

    print(i) # for 循环内部进行了处理, 发现 it 里没有值了,就停止了

# zip

# l = list(zip(range(5),range(5),range(5))) #拉链函数 zip

l = list(zip(range(5),range(2),range(5))) #拉链函数 zip  #木桶原理

print(l)

dict1 = {k:v for k,v in zip('abcde', range(3))}  # 解构

print(dict1)

dict2 = dict(zip('abcde', range(3)))

print(dict2)

# 生成器的应用

# 无限循环 计数器

def counter():

    i = 0

    while True:

        i += 1

        yield i

c = counter()

res_list = []

for j in range(1,20):

    res_list.append(next(c))

print(res_list)

# 写一个函数, 实现这样的效果, f() => 1 f() => 2

def foo():

    g = counter()

    def _inner():

        return next(g)

    return _inner

f = foo()

print(f())

print(f())

print(f())

print(f())


 

# fib 函数的 生成器 方法

def g_fib():

    pre = 0

    ne = 1

    while True:

        pre, ne = ne , pre + ne # python 赋值特点

        yield ne

def f(n):    

    g2 = g_fib()

    for i in range(1, n+1):

        r = next(g2)

    return r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值