練習 面試題 關於生成器函式的求和問題

2022-06-16 09:00:11 字數 748 閱讀 7429

# 求和  ***面試重點的題***

def add(a, b):

return a + b

# 生成器函式 # 0-3

def test():

for i in range(4):

yield i

g = test() # 獲取生成器 g的取值範圍 0,1,2,3

for n in [2, 10]:

g = (add(n, i) for i in g)

print(list(g))

# for迴圈等價於

# n = 2

# g = (add(n, i) for i in g)

# n = 10

# g = (add(n, i) for i in g) #此時括號裡的g 是n=2 迴圈的時候的g 實際上是g = (add(n, i) for i in (add(n, i) for i in g))

# 當執行到最後一行 list(g)的時候,因為list中的__next__() 會觸發生成器開始取值, 此時的n=10.

# 所以把n=10 帶入g = (add(n, i) for i in (add(n, i) for i in g))

# g = (add(10, i) for i in (add(10, i) for i in g)) g取值範圍 0-3 帶入

# 結果 [20, 21, 22, 23]

面試題 等概率生成器

問題一 已知一隨機發生器,產生0的概率是p,產生1的概率是1 p,現在要你構造乙個發生器,使得它構造0和1的概率均為1 2 構造乙個發生器,使得它構造1 2 3的概率均為1 3 構造乙個發生器,使得它構造1 2 3 n的概率均為1 n,要求複雜度最低。解決方法 原始的隨機數生成器,生成0 的概率為p...

生成器面試題之二

l for i in xrange 10 print ll a for i in xrange 10 a num i print l 輸出結果 python 第一段 解答 以上兩段 的本質區別是第乙個是直接傳物件,第二個是傳物件的引用。第一段 給列表新增,是直接新增字典物件,for迴圈中每次新增的物...

Python面試題之Python生成器

首先說明一下生成器也是迭代器,也有迭代器的那些優點。那為什麼要生成器呢?因為到目前為止都 不是你寫的迭代器,都是別人定義好的。那如何自己去造乙個迭代器呢?下面的內容就會給你答案。想要自己造乙個迭代器,我們可以根據迭代器的特徵 只要乙個物件有 iter 和 next 方法那它就是迭代器 自己定義乙個類...