请问cmp 函数只有一个print只有一个输出,为何输出None,且返回类型也是NoneType
1 回答
清波
TA贡献165条经验 获得超90个赞
每每看到 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 了。
所以 所有的 题主以为是 异常 的现象, 都有一个正常的解释,且跟闭包 没有什么联系。。。 即使定义普通的函数, 如果没有返回值的话, 也会出现这种情况。
添加回答
举报
0/150
提交
取消