1 #python3 學習筆記17/07/11 2 # !/usr/bin/env python3 3 # -*- conding:utf-8 -*- 4 5 #通過列表生成式可以生成格式各樣的list,這種list 一般是容量小的list 6 #導入os模塊,模塊的概念后面講到 7 import os 8 #生成[1,2,3,4,5,6,7,8,9,10] 9 l1 = list(range(1,11)) 10 print("1-10",l1) 11 12 # 生成[1*1, 2*2,...10*10] 13 l2 = [] 14 for x in range(1, 11): 15 l2.append(x * x) 16 print("平方",l2) 17 18 #比用for循環更簡潔的方法,用生成式 19 print("平方",[x * x for x in range(1,11)]) 20 21 #for 循環后面可以加上if 判斷,這樣我們就可以篩選出 僅奇數 或 偶數的平方 22 print("偶數平方",[x * x for x in range(1, 11) if x % 2 == 0]) 23 print("奇數平方",[x * x for x in range(1, 11) if x % 2 != 0]) 24 25 #使用 兩層循環,生成全排列 26 print([m+n for m in 'ABC' for n in 'XYZ']) 27 28 #列出當前文件所在目錄下的文件和目錄 29 print([d for d in os.listdir('.')]) 30 31 #列表生成式 可以使用兩個變量來生成list 32 d1 = {'x':'A', 'y':'B', 'z':'C'} 33 print([k + '=' + v for k, v in d1.items()]) 34 35 #用列表生成式 把一個list中的所有字符串變成小寫 36 L = ["Hello", "World"] 37 print("lower case ", [s.lower() for s in L]) 38 39 #列表生成器,列表生成式 用[],而列表生成器用(),列表生成器會在生成列表的時候自動計算后續的元素,而不會像生成式子一樣一次生成所有元素,從而節省空間 40 L1 = [x *x for x in range(10)] 41 print(L1) 42 43 #列表生成器 44 g = (x * x for x in range(10)) 45 #用next() 函數獲取下一個生成的元素 46 for n in g: 47 print(n) 48 49 #用普通函數 打印斐波那契數列 50 def fib(max): 51 n, a, b = 0, 0, 1 52 while n < max: 53 print(n, b) 54 a, b = b, a + b 55 n = n + 1 56 return 'done' 57 58 fib(6) 59 60 #將 print(b) 換成 yield b 這個函數就變成了生成器 61 def fibg(max): 62 n, a, b = 0, 0, 1 63 while n < max: 64 yield b 65 a, b = b , a + b 66 n = n + 1 67 return 'done' 68 69 #把函數改成 generator后,我們一般不用next()函數來取下一個返回值,而直接使用for循環來迭代 70 for n in fibg(6): 71 print(n) 72 #generator 拿不到return語句的返回值,如果要拿到返回值,必須捕獲stopIteration 73 g = fibg(6) 74 while True: 75 try: 76 x = next(g) 77 print("g: ",x) 78 except StopIteration as e: 79 print('Generator return value:', e.value) 80 break 81 else: 82 pass 83 finally: 84 pass