GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — python_test/test6.py at master · sinferwu/python_test Expand file tree/ Copy pathtest6.pyMore file actions 68 lines (54 loc) · 1.74 KB / Copy pathtest6.pyFile metadata and controls68 lines (54 loc) · 1.74 KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 # 练习生成式,生成式就是将列表生成式的中括号改成小括号即可 g = (x for x in range(1,20)) print(g) # 这是个generator对象 print(next(g)) # 不断使用next来进行获取下一个数,当获取到最后一个数时会抛出StopIteration错误 # 可见这种方法对于列表相当大时,就可以节约内存,同时他也可以用for循环来获取元素 for x in g: print(x) # 使用yield来定义一个生成器的函数 def odd(): print('yield 1') # yield就是一个关键字,用来生成生成器 # 每执行一个next函数时,就会运行到一个yield处,把该值返回 yield 1 print('yield 2') yield 2 print('yield 3') yield 3 o = odd() # 他是生成器,所以可以通过next来获取数 print(next(o)) print(next(o)) print(next(o)) # next(o) # 使用yield来编写斐波那契数列 def fib(n): a, b = 0, 1 while n > 0: # 第一和第二个数都是1 yield b a, b = b, a+b n -=1 return 'done' num = fib(6) # 因为是生成器,所以可以通过for循环来获取元素 for x in num: print(x) # 作业:有一个杨辉三角,把每一行看做一个list,试写一个generator,不断输出下一行的list: def triangles(n): l = [1] # 记录第几行,同时知道有多少个元素 num = 1 while num <= n: # 使用切片是避免两个变量指向同一个列表,从而影响了下面操作 L = l[:] yield L num += 1 if len(l) > 1: for d in range(1, num-1): l[d] = L[d] + L[d-1] l[0] = 1 l.append(1) t = triangles(10) for x in t: print(x) |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |