1 回答

TA貢獻(xiàn)165條經(jīng)驗(yàn) 獲得超90個(gè)贊
每每看到 Python 的閉包,尤其是 __closure__ 屬性,簡直自豪的要跳起來有沒有 哈哈。
題主的代碼很奇怪,上半截還是Python 3.x 的語法, 后面就開始用 Python2.x 了。
另外輸出還沒有錯(cuò)。。。
題主定義完 一個(gè)閉包演示函數(shù)后,進(jìn)行了四次演示:
def?set_passline(passline): ???? ????def?cmp(val): ????????if?val>=passline: ????????????print('Pass') ????????else: ????????????print('Failed') ????return?cmp f_100?=?set_passline(60) print?(type(f_100)) print?(f_100.__closure__) print?(f_100(89)) print?(type(f_100(89)))
其后得到了6個(gè)輸出:
第一個(gè), <type 'function'> 自然就是?print (type(f_100)) 的輸出。
第二個(gè), (<cell at .......>,) 這個(gè)元組就是f_100 的閉包輸出了, 其中只包含一個(gè)cell 類型, 其內(nèi)容是個(gè) int 類型。
第三個(gè) 第四個(gè), pass 和 其下面的 None, 則是 打印了 f_100(89) 的結(jié)果, 首先 f_100(89) 這個(gè)函數(shù)本身會(huì)打印 Pass, 其次 print(f_100(89)) 由于 f_100(89) 沒有返回值, 自然就會(huì)打印出 None.
第五個(gè) 第六個(gè), Pass 和其下面的 <type 'NoneType'> ?跟 上面的道理一樣, 首先 函數(shù)會(huì)打印Pass 其實(shí) 這個(gè)函數(shù)沒有返回值, 所以 type(f_100(89)) 就是 type None 了。
所以 所有的 題主以為是 異常 的現(xiàn)象, 都有一個(gè)正常的解釋,且跟閉包 沒有什么聯(lián)系。。。 即使定義普通的函數(shù), 如果沒有返回值的話, 也會(huì)出現(xiàn)這種情況。
添加回答
舉報(bào)