在講這個話題前,首先我們來看一道題:
**1:
def
foo():
return
[lambda x: x**i for i in
range(1
,5,2
)]print
([f(3)
for f in foo()]
)
夥伴們,你們認為這裡產生的結果是什麼呢?我們再來看下這題的變體:
**:2
def
foo():
functions=
for i in
range(1
,5,2
):definside_fun
(x):
return x ** i
return functions
print
([f(3)
for f in foo()]
)
這兩題的結果是一樣的:都是[27,27]。我相信大部分的夥伴也都會有個疑問,為什麼不是[3,27]呢?
這裡的就是我們今天要說的for迴圈中的變數作用域,因為for迴圈不是乙個函式體,所以for迴圈中的變數i的作用域其實和for迴圈同級,即類似下面**
**3:
def
foo():
i=none
for i in
range(1
,5,2
):pass
print
(i)foo(
)# 結果為3,即迴圈結束i的最終值
另外因為python執行到**行時才會去查詢該變數的作用域,所以**1和**2中的i值在呼叫的時候為for迴圈最終值3,所以結果都是執行x**3。
如有不對的地方,或有更好的說明方式,請各位小夥伴不吝賜教,感謝!
python 迴圈建立變數
資料分析時,我們經常會有這樣的需求 將資料集按某乙個維度拆分成若干資料子集 建立多個變數。如果手動去實現,工作量較大。我們可以通過locals 配合迴圈語句來實現這一需求。我們以鳶尾花資料集為例,我們按照花的種類將資料集拆分成資料子集,分別放到不同的變數中去。實現 如下 from sklearn.d...
python迴圈定義變數
在實際問題中,遇到個問題,我需要建立多檔案,名字沒有規律,把出現該名字的行寫入以該名字命名的檔案中 關鍵就在與locals 函式 定義變數格式 locals name f open gongcheng.json r file name js hwl qhgg sq hwl task for name...
Python 變數與迴圈
數字和運算子 資料型別轉換 條件分支與迴圈 在python語言中,變數在指定的同時,必須強制賦初值,否則編譯器會報錯。多個變數賦值 python允許同時為多個變數賦值 one two three 10或one,two,three 10,20,30。one two three三個變數在記憶體中指向同乙...