列表推导式
# 基本代码
lt = []
for i in range(10):
lt.append(i) # 输出0-9
# 列表推导式
lt = [i for i in range(10)] # 输出0-9
#扩展
lt = [i**2 for i in [1,2,3]]
# lt = [i**2(可以做运算) for i in [1,2,3]] # [1,4,9]
print(lt)
# python一切皆对象,range(10)属于可迭代对象
from typing import Iterable # 导出一个可迭代对象类型
print(isinstance(range(10),Iterable)) # 判断是否属于该数据类型
# True
字典生成式
# 基本代码
dic = {}
for i in range(10):
dic[i] = i
print(dic)
# 字典生成式
dic = {i:i**2 for i in range(10)}
print(dic)
# zip()
res = zip([1,2,3],[4,2,3,4,2,3,4,2,3],'abcadsfasdfasdf') # res是一个迭代器,__next__返回元组
print(res.__next__()) # (1,4,'a') # type:tuple
print(res.__next__()) # (2.2,'b') # type:tuple
print(res.__next__()) # (3.3,'c') # type:tuple
# print(res.__next__()) # type:tuple # 超过次数报错
lt1 = ['a', 'b', 'c']
lt2 = [1, 2, 3]
dic = {k: v for k, v in zip(lt1, lt2)} #两个列表变成一个字典
# dic = {k: v ** 2 for k, v in zip(lt1, lt2)}
print(dic)
lt = list('abc') # list列表-->属于可迭代对象,一个值一个值迭代进去,list为容器类元素
print(lt)
# ['a','b','c']
生成器生成
generator 本质是一个迭代器-->生成器:本质是迭代器,生成器就是一个自定义的迭代器
g = (i for i in range(10000000)) # 生成器表达式: 看成老母鸡,节省内存空间,用就下蛋
print(g)
# for i in g:
# print(i)
lt = [i for i in range(10000000)] # 列表推导式: 看成一筐鸡蛋,非常占用内存空间
print(lt)
生成器
# 生成器:含有yield关键字的函数叫做生成器
# def func():
# pass
#
# print(func())
def ge():
yield 3 # 一个yield相当于一个next; 暂停函数
yield 4
# print(ge()) # ge()得到一个生成器 --> 生成器本质是迭代器
g = ge() # 得到一个生成器
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# for i in g:
# print(i)
# yield的特性
# 1. 暂停函数
# 2. 通过next取值
# return的特性
# 1. 终止函数
# 2. 通过调用函数拿到值