python 函式的一道面試題

2021-10-23 13:04:38 字數 1050 閱讀 6825

一道很有意思的面試題』
def

func()

: acts=

for i in

range(5

):lambda x:i**x)

return acts

acts=func(

)print

(acts[0]

(2))

print

(acts[1]

(2))

print

(acts[2]

(2))

print

(acts[3]

(2))

猜猜看結果是什麼?

相信很多人的答案都是:0,1,4,9

但實際結果是:16,16,16,16

為什麼?

acts返回的是乙個全是lambda表示式的列表,給x賦值後呼叫lambda表示式,按常規思想是直接呼叫每乙個不同的i,但是由於巢狀作用域中的變數只有在該巢狀函式被呼叫時才進行查詢引數的值,所有後面每次呼叫的都是在最後一次迴圈迭代中迴圈變數的值,也就是說每次i的值都是4,所有結果就不是我們所想的那樣。那麼,如何實現想要的結果?

def

func()

: acts=

for i in

range(5

):lambda x,i=i:i**x)

return acts

acts=func(

)print

(acts[0]

(2))

print

(acts[1]

(2))

print

(acts[2]

(2))

print

(acts[3]

(2))

經過修改,將每次的i賦值給預設引數i,這樣呼叫的時候就可以呼叫到所需的i,結果也變成了想要的結果:0,1,4,9

#結語:新手練手之作,不滿之處敬請見諒#

`『』

一道面試題

一道面試題 射擊運動員10發打中90環有多少種可能,請編寫程式計算出來,並列印出結果,0環和10環均有效。打中90環就是沒打中10環,所以打中90環跟打中10環的可能性是一樣的。然後開始遞迴狂打槍,一到10就記錄 if params i 10 在迴圈的控制中已經排除了大於10的可能性 i 10 pa...

一道面試題

前些時候在找工作,就在準備結束此次找工作歷程的時候,去了一家公司面試,去了之後技術經理直接帶到一台電腦旁,給了一張紙條,上面是這樣的題目 用c或c 來實現 1 建立一棵樹,該樹的深度是隨機的,每個節點的位元組點數是隨機的。2 給每個節點分配一段隨機大小的記憶體空間,給每個節點賦乙個隨機數。3 遍歷這...

一道面試題

如果n為偶數,則將它除以2,如果n為奇數,則將它加1或者減1。問對於乙個給定的n,怎樣才能用最少的步驟將它變到1。例如 n 61 n 60 n 2 30 n 2 15 n 16 n 2 8 n 2 4 n 2 2 n 2 1 public class myclass public static vo...