前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python进阶(九)Python陷阱:Nonetype「建议收藏」

Python进阶(九)Python陷阱:Nonetype「建议收藏」

作者头像
全栈程序员站长
发布2022-11-01 11:40:51
1.4K0
发布2022-11-01 11:40:51
举报
文章被收录于专栏:全栈程序员必看

今天解决一位网友的问题,内容如下: 请教代码问题

代码语言:javascript
复制
def calc_prod(lst):
    def ff():
        print map(lambda x:x*x,lst)
    return ff

f = calc_prod([1, 2, 3, 4])
print f()

结果:

代码语言:javascript
复制
[1, 4, 9, 16]
None

这样写输出为什么有None?针对这一问题,自己在IDEA中进行了调试,发现果然多输出了一行None。出现这一现象确实很令人费解。

自己写了简单的测试语句,如下:

代码语言:javascript
复制
b = print(5)
print(b)

通过断点调试,内容如下:

这里写图片描述
这里写图片描述

发现b的值确实为None,且其类型为NoneType。

什么是Nonetype?

要理解这个,首先要理解Python对象,python对象具有三个特性:身份、类型、值。

这三个特性在对象创建时被赋值。只有值可以改变,其他只读。类型本身也是对象。

NullNonePython的特殊类型,Null对象或者是None Type,它只有一个值None

它不支持任何运算也没有任何内建方法。None和任何其他的数据类型比较永远返回False

None有自己的数据类型NoneType。你可以将None复制给任何变量,但是你不能创建其他NoneType对象。

一句话总结:Null对象是python对象,又叫做NoneTypeNone是这个对象的值。

看过了NoneType的解释,之所以出现None就很好理解了。

NoneType之所以出现是因为定义了一个变量或函数,却没有值或者返回值,因此会默认值为None

而在上面的程序中,虽然高阶函数calc_prod()有返回值ff,但是ff()却没有返回值,则传递到外层函数calc_prod()同样没有返回值,故输出了None。 若代码改为如下所示,则可以完美实现列表的输出。

代码语言:javascript
复制
def calc_prod(lst):
    def ff():
        return map(lambda x:x*x,lst)
    return ff

	f = calc_prod([1, 2, 3, 4])
	print(f())

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/200399.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档