1:只有元组生成生成器对象
2:元组生成器调用注意事项,只能调用一次!
无论通过哪种方式遍历后,若想再使用该生成器对象,都必须重新创建一个生成器,
因为遍历后的原生成器对象已经不存在了。
从最后一个示例可以看出,每访问生成器对象中的一个元素,就会少一个元素。
3:大致推导式的格式相似:i for i in 某元素/range # in的是可迭代元素即可
再在外部加上[],(),{}即可
# 用推导式生成一个有12个元素组成,且每个元素均为0的列表
# python的推导式
a = [0 for i in range(12)] # 列表的
b = (int(i) for i in str("0"*12)) # 元组的比较特殊是生成生成器对象
c = {i:i for i in range(12)} # 字典的
d = [int(i) for i in str("0"*12)]
# 元组打印出来的是生成生成器对象
print(a)
print(c)
print(d)
print(b)
# 访问生成器对象的方法
"""
生成器调用注意事项,只能调用一次!
无论通过哪种方式遍历后,若想再使用该生成器对象,都必须重新创建一个生成器,
因为遍历后的原生成器对象已经不存在了。
从最后一个示例可以看出,每访问生成器对象中的一个元素,就会少一个元素。
"""
# 1.可以使用tuple()或list()将其转换为元组或列表。如下
# 用list,tuple()会报错,must be str,not be list/tuple
# b1 = tuple(b)
# print("访问生成器对象用tuple方法:"+b1)
# b2 = list(b)
# print("访问生成器对象用list方法:"+b2)
# 创建个新元组生成器对象
tuple1=("Amy","Swan")
newtuple=(ch*3 for ch in tuple1)
n1 = [ch*3 for ch in tuple1]
print("打印下这个里面的元素*3遍历长啥样",n1)
print("打印下这个生成器对象",newtuple) # ['AmyAmyAmy', 'SwanSwanSwan']
# print(list(newtuple)) # ['AmyAmyAmy', 'SwanSwanSwan']
# print(tuple(newtuple)) # ()前面调用了一次生成器对象list(newtuple),所以就为空
print("用tuple在前试试",tuple(newtuple)) # ('AmyAmyAmy', 'SwanSwanSwan')
print("list在后",list(newtuple)) # []
# 2.使用for循环遍历
for i in b:
print("生成器对象中的元素每遍历一次,元素就会少一个",i)
print('----下面再来打印下生成器对象b-----:',b)
# 直接使用__next__进行遍历
tuple1=(233,32,57,44,83,590,651)
tuple2=(x for x in tuple1 if x<100)
print(tuple2.__next__()) # 32
print(tuple2.__next__()) # 57
print(tuple2.__next__()) # 44 #到此为止,生成器中的元素还未打印完
print(tuple(tuple2)) # (83,)