python 学习迭代器的认识

# 迭代器的认识
# 获取一个对象的所有方法 任何对象中 只要有 __iter__ 这个字符串就是可迭代对象
s1 = "djflkdjfl"
# l1= [1,2,3,4]
# print(dir(s1)) # 查看一个对象是不是可迭代对象 用 dir() 这个函数来查看,查看对象的所有使用方法
# print("__iter__" in dir(s1)) # 判断对象是不是可迭代对象 用 in

# 判断迭代器 必须在使用方法中 有 __next__ 和 __iter__ 有这个字符串就是迭代器

#print(iter(s1))
# a = iter(s1) # 转换为迭代器
# print(next(a)) # 对迭代器进行取值
# print(next(a)) # 打印一次取一值
# print(next(a))
# print(next(a))
# print(next(a))

# 用while 循环模拟for 循环。
# l1 = [11,22,33,44,55,66]
# opj = iter(l1)
# while 1:
# try: # 检查异常代码
# print(next(opj))
# except StopIteration: # 异常代码报错信息
# break


# 二 生成器
# 生成器是我们自己用python 代码构建的一种数据结构。 生成器也是迭代器的一种
# 获取生成器的 三种方法 1 生成器函数 2 生成器表达式 3 python 内部提供的
# 1 生成器函数
# def fun():
# print('我是中国人')
# #return 4
# yield 4
# yield 5
# yield 6
# req = fun()
# #print(req)
# print(next(req))
# print(next(req))
# print(next(req)) # 生成器函数的调用方法和 迭代器的调用方法是一样的。一次只能调用一个值 (调用一次放到内存中,调用下一个值得时候覆盖上一次得调用值。)

# 生成器函数 只要函数里有 yield 她就是个生成器函数了 。yield 可以存在好多个。她的调用方式就是迭代器的调用方法了。

# def fun(x,l1=[]):
# for x in range(1,x):
# l1.append(f"{x}号包子")
# yield from l1 # yield from (对象 ) 相当于 把对象 做了 iter(对象) 变成了一个迭代器
# req = fun(5)
# print(next(req))
#
# print(next(req))
# print(next(req))
#
# print(next(req))

# 三 列表推导式
# 用一行代码构建一个比较复杂有规律的列表
# list1 = []
# for i in range(11):
#
# list1.append(i)
# print(list1)
#
# list1 = [i for i in range(11)] # 这个就是简单的列表推导式。 这个是简单得循环列表推导式
# print([i for i in range(11)])
# print([i**2 for i in range(11)])
# print([i for i in range(0,100) if i%2==0 ]) # 这个是筛选条件得 列表推导式
# print([f"我吃了{i}个包子" for i in range(10)])

# l1 = [[1,2,3,4,5,6,8,7,9,],[1,2,3,4,5,6,7,8,8,8,9]]
# # for i in l1[0],l1[1]:
# # for j in i:
# # if j ==8:
# # print(j)
# print([j for i in l1 for j in i if j == 8]) # 多层循环嵌套 也可以实现 列表推导式

# 生成器表达式
# 生成器表达式和列表表达是一样 只有一点 把中括号换成小括号
# 生成器表达式 也有 循环模式 筛选模式 多层循环嵌套模式
# opg = (i for i in range(101))
# opg2 = (i for i in range(1,100,3))
#
# print([i for i in range(2,11)]+list("JQKA")) # 列表得相加
posted @ 2020-06-15 12:59  杨涛481  阅读(202)  评论(0编辑  收藏  举报