1 回答

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