題目:分析**結果
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 ...