今天在看python基礎的時候搞明白了乙個很小的點,但也是乙個進步。
下面**回答輸出的結果是什麼?為什麼?
result =
[lambda x: x + i for i in
range(10
)]print
(result[0]
(10))
答案是19,而且不論print的時候result[0~9]
都會是19
當然如果輸入result[10]
則會顯示indexerror: list index out of range
這裡是因為輸入了超出迴圈遍歷範圍的數字
但為什麼問題的答案是19呢?
這道題考察了變數作用域、匿名函式、列表推導式的知識,算得上一道比較複雜的題目
對於lambda函式,這種函式沒有函式名,只有記憶體位址,可以在一行當中表達的函式往往會寫成這個樣子,不用定義函式體,少了一些麻煩
[0]的意思是:由於result是乙個列表型變數,其中每乙個元素都是乙個匿名函式,i的值在0~9之間;
(10)的意思是將10作為引數傳入匿名函式之中
由於函式具有呼叫時才查詢變數的特性。在你沒呼叫它之前,它不會儲存也不關心它內部變數的具體值。只有等到你呼叫它的時候,它才逐一去找這些變數的具體值。這裡的result[0]被呼叫的時候,變數i已經迴圈完畢,變成9了,所以得到的就是10+9 = 19;
那下邊這個語句將輸出什麼結果呢?
result =
[lambda x, i=i: x + i for i in
range(10
)]print
(result[0]
(10))
python學習日記
動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯的時候定義的,而是執行時動態建立的.直接在類中定義的是類屬性,如 class student object name student 例項屬性必須通過例項繫結。如self.age xx 根據python的規則,定義時千萬不要把類屬性和例項屬性...
python學習日記
第一章 起步 第二章 變數和簡單資料型別 安裝vm模擬機和windows的python3.8.2和geany,編寫第乙個hello world。課後題,自動隨時排盤,自動解析每宮的程式。排盤,每宮每個專案代表含義,能量表示,時間動態變化 歷史查詢 print 輸出 n hello 變數 n.titl...
Python學習日記
如下 示例 exemple.py tempstr input 請輸入帶有符號的溫度值 if tempstr 1 in f f c eval tempstr 0 1 32 1.8print 轉換後的溫度是c format c elif tempstr 1 in c c f 1.8 eval temps...