Python陷阱:Nonetype
【摘要】 今天解决一位网友的问题,内容如下:请教代码问题def calc_prod(lst): def ff(): print map(lambda x:x*x,lst) return fff = calc_prod([1, 2, 3, 4])print f()结果:[1, 4, 9, 16]None这样写输出为什么有None?针对这一问题,自己在IDEA中进行了调试,发现果...
今天解决一位网友的问题,内容如下:
请教代码问题
def calc_prod(lst):
def ff():
print map(lambda x:x*x,lst)
return ff
f = calc_prod([1, 2, 3, 4])
print f()
结果:
[1, 4, 9, 16]
None
这样写输出为什么有None?针对这一问题,自己在IDEA中进行了调试,发现果然多输出了一行None。出现这一现象确实很令人费解。
自己写了简单的测试语句,如下:
b = print(5)
print(b)
通过断点调试,内容如下:
发现b的值确实为None,且其类型为NoneType。
什么是Nonetype?
要理解这个,首先要理解Python
对象,python
对象具有三个特性:身份、类型、值。
这三个特性在对象创建时被赋值。只有值可以改变,其他只读。类型本身也是对象。
Null
与None
是Python
的特殊类型,Null
对象或者是None Type
,它只有一个值None
。
它不支持任何运算也没有任何内建方法。None
和任何其他的数据类型比较永远返回False
。
None
有自己的数据类型NoneType
。你可以将None
复制给任何变量,但是你不能创建其他NoneType
对象。
一句话总结:Null
对象是python
对象,又叫做NoneType
,None
是这个对象的值。
看过了NoneType
的解释,之所以出现None
就很好理解了。
NoneType
之所以出现是因为定义了一个变量或函数,却没有值或者返回值,因此会默认值为None
。
而在上面的程序中,虽然高阶函数calc_prod()有返回值ff,但是ff()却没有返回值,则传递到外层函数calc_prod()同样没有返回值,故输出了None
。 若代码改为如下所示,则可以完美实现列表的输出。
def calc_prod(lst):
def ff():
return map(lambda x:x*x,lst)
return ff
f = calc_prod([1, 2, 3, 4])
print(f())
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)