Python进阶(九)-Python陷阱:Nonetype

举报
SHQ1874009 发表于 2020/12/30 01:34:03 2020/12/30
【摘要】 #Python进阶(九)-Python陷阱:Nonetype   今天解决一位网友的问题,内容如下:   请教代码问题 def calc_prod(lst): def ff(): print map(lambda x:x*x,lst) return ff f = calc_prod([1, 2, 3, 4]) print f() 1234567 结果: [1, 4...

#Python进阶(九)-Python陷阱:Nonetype
  今天解决一位网友的问题,内容如下:
  请教代码问题

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

结果:
[1, 4, 9, 16]
None
  这样写输出为什么有None
  针对这一问题,自己在IDEA中进行了调试,发现果然多输出了一行None。出现这一现象确实很令人费解。
自己写了简单的测试语句,如下:

b = print(5)
print(b)

  
 
  • 1
  • 2

通过断点调试,内容如下:
这里写图片描述
  发现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())

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
![这里写图片描述](https://img-blog.csdnimg.cn/img_convert/f9c024e20306fb0e4e3e84a15aab3217.png)

文章来源: shq5785.blog.csdn.net,作者:No Silver Bullet,版权归原作者所有,如需转载,请联系作者。

原文链接:shq5785.blog.csdn.net/article/details/62865547

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。