迭代器和生成器

迭代器

a = "01234567"
a = [1, 2, 3, 4, 5]
#
# b = (6,7,8,9,10,11,12,13)
# for i in b:
#     print(i)
"""
迭代器函数
iter() iterable 必须是能提供可迭代对象
next() iterator(迭代器) 获取下一个元素的记录
迭代器只能往前取值,不会后退
用iter函数可以返回一个可迭代对象的迭代器
iter():生成一个迭代器对象

可迭代的对象

for.. in.. 遍历 也称迭代


"""


# a = iter([1, 2, 3, ])
# print(next(a))
# print(next(a))
# print(next(a))
# print(next(a))  # StopIteration

# def test():
#     for i in range(10):
#         yield i


# result = test()
# print(next(result))
# print("for循环,第一次 \'i'\的值为{}".format(next(result)))
# print("for循环,第二次 \'i'\的值为{}".format(next(result)))
# print("for循环,第三次 \'i'\的值为{}".format(next(result)))
# print("for循环,第四次 \'i'\的值为{}".format(next(result)))
# print("for循环,第五次 \'i'\的值为{}".format(next(result)))
# print("for循环,第六次 \'i'\的值为{}".format(next(result)))
# print("for循环,第七次 \'i'\的值为{}".format(next(result)))
# print("for循环,第八次 \'i'\的值为{}".format(next(result)))
# print("for循环,第九次 \'i'\的值为{}".format(next(result)))
# print("for循环,第十次 \'i'\的值为{}".format(next(result)))
# print("for循环,第十一次 \'i'\的值为{}".format(next(result)))

# result = (i for i in [1, 2, 3])
# # print(type(result))
# # print(next(result))
# # print("for循环,第一次 \'i'\的值为{}".format(next(result)))
# # print("for循环,第二次 \'i'\的值为{}".format(next(result)))
# # print("for循环,第三次 \'i'\的值为{}".format(next(result)))
# # print("for循环,第四次 \'i'\的值为{}".format(next(result)))
# for i in [1,2,]:
#     print(i)

# 迭代器的用法
"""

"""
# def make_iter():
#     for i in range(5):
#         yield i
#
# iter_obj = make_iter()
# for i in iter_obj:
#     print(i)
#
# print("--------------")
# for i in iter_obj:
#     print(i)


iter_obj = (i for i in range(4))
for i in iter_obj:
    print(i)

print("--------------")
for i in iter_obj:
    print(i)

生成器

"""
生成器继承于迭代器,迭代器又继承于可迭代对象
特殊的迭代器,拥有迭代器的所有特性
生成器是python的一个对象(按照某种规律,来生成元素的对象)
"""


# 列表
# list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#
# # 列表推导式
# list_1 = [i for i in range(1, 11)]
# print(list1)
# print(list_1)
#
# # 通过生成器推导式(类似于元组的符号)
# list_2 = (x for x in range(1, 22))
# print(list_2)  # generator 生成器对象
# print(type(list_2))  # <class 'generator'>


# def test1(number):
#     a = 0
#     b = 1
#     n = 0
#     while n < number:
#         yield b
#         a, b = b, (a + b)
#
#         n += 1
#     return "1"

# 定义一个可以使用send传入域名,自动生成一个在前面加上http://, 在后面加上路径/user/login的url地址
# 生成器最多可以生成5个url, 生成5条数据之后再去生成,则报错stopiteration
#
# def work():
#     host = yield
#     for i in range(5):
#         host = yield "https://{}/user/login".format(host)
#
#
# g = work()
# # for i in g:
# #     print(i)
# next(g)  # 启动生成器
# #
# print("send方法生成的数据:", g.send("www.baidu.com"))
# print("send方法生成的数据:", g.send("www.baidu1.com"))
# print("send方法生成的数据:", g.send("www.baidu2.com"))
# print("send方法生成的数据:", g.send("www.baidu3.com"))
# print("send方法生成的数据:", g.send("www.baidu4.com"))
# # print("send方法生成的数据:",g.send("www.baidu5.com"))

# def demo():
#     for i in range(10):
#         res = yield i
#         print("send传入的数据是:", res)
#
# g = demo()
# print("send生成的数据:", next(g))
# print("send生成的数据:", g.send(6))
# print("send生成的数据:", g.send(7))
# print("send生成的数据:",g.send())
# print("send生成的数据:",g.send())

# 案例二: 实现一个可以根据姓名、电话、年龄的生成器
# 可以根据send方法传入的值,来生成不同的数据
# 1.名字
# 2.电话
# 3.年龄
# from faker import Faker
#
# """
# Faker
# 1.姓名
# 2.身份证
# 3.手机号
# 4.银行卡号
#
# name = fk.name()
# print(name)
#
# card = fk.ssn()
# print(card)
#
# phone = fk.phone_number()
# print(phone)
#
# card_number = fk.credit_card_number()
# print(card_number)
# """
# fk = Faker(locale="zh-CN")
#
#
# def work():
#     number = yield
#     while True:
#         if number == 1:
#             number = yield fk.name()
#
#         elif number == 2:
#             number = yield fk.phone_number()
#
#
#         elif number == 3:
#
#             number = yield fk.address()
#
#         else:
#             yield {"name": fk.name(), "phone": fk.phone_number(), "address": fk.address()}
#
#
# g = work()
# next(g)
# print("send生成的内容:", g.send(1))
# print("send生成的内容:", g.send(2))
# print("send生成的内容:", g.send(3))
# print("send生成的内容:", g.send(4))

def work():
    host = yield
    for i in range(5):
        host = yield '传入数据{}'.format(host)

a = work()
# print(type(a))
next(a)
print(a.send(2))
print(a.send(4))
print(a.send(5))

扩展

# match s:
#     case case:

# def http_status(status):
#     match status:
#         case 400:
#             return "Bad request"
#
#         case 404 | 403:
#             return "not found"
#
# h = http_status(403)
# print(h)

# with (open() as f,
#       open() as e,
#       open() as c,
#       ):

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莎萌玩家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值