目錄
前言:
🦠面試題一(難度為中等偏上且必須掌握)
️️題目要求
️️題目提示
️️流程圖分析
️️答案以及解析
運行結果
解析
拓展思考
🦠面試題二(難度為難且必須掌握)
️️題目要求
️️題目提示
️️答案以及解析
運行結果
解析
🦠面試題三進階版
️️題目要求
️️答案以及解析
運行結果
解析
結語:
本篇博客主要向各位小伙伴們介紹的<Python生成器面試題>,帶各位掌握Python希望各位小伙伴們能夠在這裡收獲到更多知識!讓我們一起學習!一起進步!
作者希望:由於博主水平限制,博客難免會有錯誤和不准之處,我也非常希望各位小伙伴能夠在留言區指出。讓我們一起共勉。
以下代碼執行後的輸出結果是什麼?
def func(): for i in range(4): yield i g=func() g1=(i for i in g) g2=(i for i in g1) print(list(g1)) print(list(g2))
1、同一個生成器中的數據只能取一次,取完就沒有了
2、生成器的特點惰性運算:不找生成器取值,它就根本不工作
運行結果
解析
1、先定義了三個生成器g、g1、g2
g=func() g1=(i for i in g) g2=(i for i in g1)
2、因為遇到了list(g1),所以list要向g1要值,由於g1 = (i for i in g),所以g1又向g要值然後g執行依次返回0,1,2,3給g1,g1又依次返回給list,所以最後打印出了[0,1,2,3]
下一步執行list(g2)所以g2要向g1要值。因為g1的值在list(g1)的時候都給了list,所以g1裡面已經沒有值了,所以g1更不會向g取值,所以list(g2)打印出的只是一個空列表
拓展思考
如果將print(list(g1))注釋掉打印出的結果是什麼:
因為沒有list(g1)向g1要值,所以g是不為空的,所以list(g2)打印的結果是[0,1,2,3]
下列代碼執行後的輸出結果是什麼:
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() for n in [1,10]: g=(add(n,i) for i in g) print(list(g))
將代碼中的
for n in [1,10]: g=(add(n,i) for i in g)
用以下代碼替換之後在思考一下
n = 1 g = (add(n,i) for i in g) n = 10 g = (add(n,i) for i in g)
運行結果
解析
將提示中的代碼進一步替換
n = 1 g = (add(n,i) for i in g) n = 10 g = (add(n,i) for i in g)
替換為以下代碼:
n = 1 g = (add(n,i) for i in g) n = 10 g = (add(n,i) for i in (add(n,i) for i in test()))
題目就可以替換為
def add(n,i): return n+i def test(): for i in range(4): yield i g=test() n = 1 g = (add(n,i) for i in g) #當執行n=10後n=1就徹底消失了,就不用管了 n = 10 g = (add(n,i) for i in (add(n,i) for i in test())) #也可以進一步換為g = (add(10,i) for i in (add(10,i) for i in test())) print(list(g))
所以代碼運行結果為:[20, 21, 22, 23]就顯而易見了
如果面試題三已經明白了,那就做一下面這個進階版的面試題三吧(如果還沒懂的話額…那就多看幾遍吧相信一定會看懂)
下列代碼執行後的輸出結果是什麼?
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))
運行結果
解析
可以將代碼等價為如下代碼
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) n = 1 g=(add(n,i) for i in g) #g=(add(n,i) for i in test()) n = 10 g=(add(n,i) for i in g) #g=(add(n,i) for i in (add(n,i) for i in test())) n = 5 g=(add(5,i) for i in (add(5,i) for i in (add(5,i) for i in test()))) print(list(g))
相信通過上面的代碼你就可以更好的了解題目,和答案的產生了到此本次分享就結束了
感謝各位能夠看到這裡:
最後一句:代碼看懂了不是懂,一定要自己實際操作哇,這樣才能更好的理解和吸收。
最後來一句:一個人可以在任何他懷有無限熱忱的事情上成功,讓我們一起進步吧!!