Python剖析 老男孩經典面試題目 閉包

2021-10-08 07:43:42 字數 776 閱讀 7531

題目:分析**結果

def num():

return [lambda x:i*x for i in range(4)]

print([m(2)for m in num()])

**輸出是[6,6,6,6]
此題目涉及閉包問題,首先來了解一下什麼是閉包:

閉包是巢狀在函式中的函式

閉包必修是內層函式對外層函式的變數(非全域性變數)的引用

像下面的例項一樣a就是閉包

a = 1

def inner():

print(a)

return inner

閉包有什麼作用呢?

1.儲存區域性資訊不被銷毀,保證資料的安全性。

2.裝飾器的本質

如何區分閉包?

print(***.__code__.co_freevars)
那麼回到原理的題目 可以把匿名函式轉回普通形式的函式:

def num():

dic =

for i in range(4): #值得注意 這裡的i 並不是0123 而是3

def num2(x):

return x * i

return dic

因位內層巢狀函式的變數i 是在for 迴圈外層函式的for迴圈中的i 執行完才引用的,這是乙個閉包的概念

「老男孩學習python」筆記一

systemerror parent module not loaded,cannot perform relative import和 valueerror attempted relative import beyond top level package等各種報錯,在網上查閱了相關資料後把 加...

python好嗎 老男孩學習python好嗎?

眾所周知,python是一門簡單易學的計算機語言,而且對於很多零基礎的人員來說,都會選在python進行學習,因此python受到了不少人的喜歡,很多人可能都在想,python入門簡單,但是其實入門簡單,想要精通是一件非常困難事情。學習python需要多長時間呢?我覺得因人而異,因情況而決定,每個人...

Python 簡易購物系統 老男孩作業

from colorama import init,fore import os,time init autoreset true user list shops goods shopping cart 購物車def cart deal good name,counts,list shopping ...