立即学习:https://edu.csdn.net/course/play/25504/304703?utm_source=blogtoedu
d={'x':'A','y':"B",'z':'C'} # 快速生成列表,需要定义Key和Value的变量 print([k + '=' + v for k,v in d.items()]) # 生成list[1,2,3,...10] list(range(1,11)) # range(1,11)返回的是一个对象,把对象转为list需要把对象放到list中 print(list(range(1,11))) # 生成[1*1,2*2,...10*10]列表 print([x*x for x in range(1,11)]) # 定义X变量为x*x,在定义一个for循环,x*x是列表汇总元素表达式的值,后面是列表 # 可用多个for循环将字符串拼接组成为新的字符串 'abc','123' print([m + n for m in 'abc' for n in '123']) print([m + n for m in 'a.b.c' for n in '123' if m != '. ']) # 过滤英文句号,还生成a1..c1 可以在表达式中做if判断 # 生成器 g = (x*x for x in range(10)) print(g) # yield方法并没有自动生成1-10的序列,而是得到一个生成器对象generator object # 通过next方法得到generator生成器中的值,执行一次得到一次,generator保存的是算法,每次调用时会计算出下一个元素值,直到计算到最后一个元素 print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) # print(next(g)) # 直到最后没有数据可以输出时,会抛出数据异常StopIteration停止迭代 for n in g: print(n) # 使用for in会直接输出所有数,for循环调用的也是next函数 # yield生成 #生成斐波那契额数列1,1,2,3,5,8,后一个数永远是之前一个的合 def fib(max): n,a,b = 0,1,1 while n <max: print(b) # 每次循环都会输出b,b就是每一个值,循环n+1次.max的意思是要输出几个数 a,b = b, a+b n = n+1 return 'done' print(fib(6)) # 将斐波那契改为yiled函数,将输出关键字换成yield,return意思是告诉用户,数列输出完了 def fib(max): n,a,b = 0,1,1 while n <max: yield b # 此处yiled后变量不加括号,yield函数和return类似,此时,fib就不是函数而是生成器 a,b = b, a+b n = n+1 return 'done' print(next(fib(6))) print(next(fib(6))) g = fib(6) # yield 对象需要定义一个变量,否则调用pritn(text)时只会输出相同的第一次 print(next(g)) print(next(g)) print(next(g)) for n in g: print(n) # 使用next方法,是不知道循环是什么时候结束的,因为调用一次生成一个值,用一种方法让代码不出错又能把对象都输出出来. while True: try: # 主动抛异常,代码不出错 x = next(g) print(x) except StopIteration as e: # stopIteration是大写 print('没有数据了',e.value) break # 这样不会报错,终止代码,而会将无数据作为一个输出提示用户