迭代器
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,
# ):