相關練習 1、處理文件,用戶指定要查找的文件和內容,將文件中包含要查找內容的每一行都輸出到屏幕 2、寫生成器,從文件中讀取內容,在每一次讀取到的內容之前加上 ‘ *** ’ 之後再返回給用戶。 面試題 生成器相關的面試題 for 迴圈套生成器表達式的題,就把 for 迴圈拆開 題一:閱讀下麵代碼,p ...
相關練習
1、處理文件,用戶指定要查找的文件和內容,將文件中包含要查找內容的每一行都輸出到屏幕
#比較 low 的方法 def check_file(filename,aim): with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄 for line in f: if aim in line: print(line.strip()) check_file('E:/py/log/log.txt','add') #生成器實現 def check_file(filename,aim): with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄 for line in f: if aim in line: yield line g = check_file('E:/py/log/log.txt','add') for i in g: print(i.strip())
2、寫生成器,從文件中讀取內容,在每一次讀取到的內容之前加上 ‘ *** ’ 之後再返回給用戶。
def check_file(filename): with open(filename,encoding='utf-8')as f: for i in f: yield '***'+i.strip() #g = check_file("E:/py/log/log.txt") #for i in g: # print(i) #也可以這樣寫 for i in check_file("E:/py/log/log.txt"): print(i)
面試題
生成器相關的面試題
for 迴圈套生成器表達式的題,就把 for 迴圈拆開
題一:閱讀下麵代碼,print 列印的結果是什麼?
def demo(): for i in range(4): yield i g=demo() g1=(i for i in g) g2=(i for i in g1) #print(list(g)) #list() 字元串強轉 print(list(g1)) #[0, 1, 2, 3] print(list(g2)) #[] #為什麼 list(g2) 中會是空呢? #因為:g1 裡面的值已經悉數給到 list() 當 g2 在找 g1 要值時,g1 已經沒值了 所以 g2 返回為空
題二:閱讀下麵代碼,print 列印的結果是什麼?
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() for n in [1,10,5]: g=(add(n,i) for i in g) print(list(g)) #[15,16,17,18] """ #把以上的 for 迴圈拆開 在 g 這個未知數換成已知的 ###很重要的一點 當 n=1,n=10 的時候,程式並沒有執行,只是做了賦值的工作,就過去了 ###那程式是什麼時候開始取值的呢?在 list(g) 的時候才執行,這是時候的 n 就是最後一個 n 了 ###前面的 n 已經消失了 n = 1 g=(add(n,i) for i in g) #g=test() n = 10 g=(add(n,i) for i in g) #g=(add(n,i) for i in test())) n = 5 g=(add(n,i) for i in g) #g=(add(n,i) for i in (add(n,i) for i in test()))) #組合起來就是 n = 1 g=(add(n,i) for i in test()) n = 10 g=(add(n,i) for i in (add(n,i) for i in test())) n = 5 g=(add(n,i) for i in add(n,i) for i in (add(n,i) for i in test())) #結果為:g=[15,16,17,18] """