清波
每每看到 Python 的闭包,尤其是 __closure__ 属性,简直自豪的要跳起来有没有 哈哈。题主的代码很奇怪,上半截还是Python 3.x 的语法, 后面就开始用 Python2.x 了。另外输出还没有错。。。题主定义完 一个闭包演示函数后,进行了四次演示: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 类型, 其内容是个 int 类型。第三个 第四个, pass 和 其下面的 None, 则是 打印了 f_100(89) 的结果, 首先 f_100(89) 这个函数本身会打印 Pass, 其次 print(f_100(89)) 由于 f_100(89) 没有返回值, 自然就会打印出 None.第五个 第六个, Pass 和其下面的 <type 'NoneType'> 跟 上面的道理一样, 首先 函数会打印Pass 其实 这个函数没有返回值, 所以 type(f_100(89)) 就是 type None 了。所以 所有的 题主以为是 异常 的现象, 都有一个正常的解释,且跟闭包 没有什么联系。。。 即使定义普通的函数, 如果没有返回值的话, 也会出现这种情况。