Python开发中的Nonetype类型详解

 更新时间:2023年12月26日 09:19:14   作者:wrr-cat  
这篇文章主要介绍了Python开发中的Nonetype类型详解,None有自己的数据类型NoneType,你可以将None复制给任何变量,但是你不能创建其他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, 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())

注意:一个实例的私有属性就是以__开头的属性,无法被外部访问。

这些属性定义有什么用?

虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。除了可以定义实例的属性外,还可以定义实例的方法。

实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的。

class Person(object):
    def __init__(self, name):
        self.__name = name
    def get_name(self):
        return self.__name

get_name(self) 就是一个实例方法,它的第一个参数是 self。__init__(self, name)其实也可看做是一个特殊的实例方法。

调用实例方法必须在实例上调用:

p1 = Person('Bob')
print p1.get_name()  # self不需要显式传入
# => Bob

在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。

请给 Person 类增加一个私有属性 __score,表示分数,再增加一个实例方法 get_grade(),能根据 __score 的值分别返回 A-优秀, B-及格, C-不及格三档。

注意 get_grade()是实例方法,第一个参数为 self。

参考代码:

class Person(object):
    def __init__(self, name, score):
        self.__name = name
        self.__score = score
    def get_grade(self):
        if self.__score >= 80:
            return 'A'
        if self.__score >= 60:
            return 'B'
        return 'C'
p1 = Person('Bob', 90)
p2 = Person('Alice', 65)
p3 = Person('Tim', 48)
print p1.get_grade()
print p2.get_grade()
print p3.get_grade()

运行结果

到此这篇关于Python开发中的Nonetype类型详解的文章就介绍到这了,更多相关Python中的Nonetype内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python logging 重复写日志问题解决办法详解

    python logging 重复写日志问题解决办法详解

    这篇文章主要介绍了python logging 重复写日志问题解决办法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python冒泡排序简单实现方法

    python冒泡排序简单实现方法

    这篇文章主要介绍了python冒泡排序简单实现方法,实例分析了Python冒泡排序的简单实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Python web框架实现增加BasicAuth认证详解

    Python web框架实现增加BasicAuth认证详解

    这篇文章主要为大家详细介绍了Python如何在web框架中实现增加BasicAuth认证,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-05-05
  • 分享7个 Python 实战项目练习

    分享7个 Python 实战项目练习

    这篇文章主要介绍了分享7个 Python 实战项目代码,经过Python3.6.4调试通过的代码,就具一点的参考价值,需要的小伙伴可以参考一下
    2022-03-03
  • python3实现多线程聊天室

    python3实现多线程聊天室

    这篇文章主要为大家详细介绍了python3实现多线程聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Python项目路径配置超详细指南(推荐!)

    Python项目路径配置超详细指南(推荐!)

    在Python项目中路径管理是一个重要的方面,它涉及到项目目录结构、工作目录的设置、以及模块导入等多个方面,这篇文章主要介绍了Python项目路径配置的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • pytorch中index_select()的用法详解

    pytorch中index_select()的用法详解

    这篇文章主要介绍了pytorch中index_select()的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 使用TensorFlow搭建一个全连接神经网络教程

    使用TensorFlow搭建一个全连接神经网络教程

    今天小编就为大家分享一篇使用TensorFlow搭建一个全连接神经网络教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 详解用python写网络爬虫-爬取新浪微博评论

    详解用python写网络爬虫-爬取新浪微博评论

    这篇文章主要介绍了python爬取新浪微博评论,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python实现mysql数据库更新表数据接口的功能

    Python实现mysql数据库更新表数据接口的功能

    这篇文章主要给大家介绍了关于Python如何实现mysql数据库更新表数据接口功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11

最新评论