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

分享一下我的偶像大神的人工智能教程!http://blog.csdn.net/jiangjunshow

也欢迎转载我的文章,转载请注明出处 https://blog.csdn.net/mm2zzyzzp

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


这里写图片描述

分享一下我的偶像大神的人工智能教程!http://blog.csdn.net/jiangjunshow

也欢迎转载我的文章,转载请注明出处 https://blog.csdn.net/mm2zzyzzp

猜你喜欢

转载自blog.csdn.net/mm2zzyzzp/article/details/83075152