猿问

为什么闭包一个print输出两个值,输出None怎么回事?

请问cmp 函数只有一个print只有一个输出,为何输出None,且返回类型也是NoneType

5736e5fb0001a67104870134.jpg


风景不在对岸
浏览 1789回答 1
1回答

清波

每每看到 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 了。所以 所有的 题主以为是 异常 的现象, 都有一个正常的解释,且跟闭包 没有什么联系。。。 即使定义普通的函数, 如果没有返回值的话, 也会出现这种情况。
随时随地看视频慕课网APP

相关分类

Python
我要回答