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

Python进阶(九)Python陷阱:Nonetype「建议收藏」而在上面的程序中,虽然高阶函数calc_prod()有返回值ff,但是ff()却没有返回值,则传递到外层函数calc_prod()同样没有返回值,故输出了。针对这一问题,自己在IDEA中进行了调试,发现果然多输出了一行None。只有值可以改变,其他只读。之所以出现是因为定义了一个变量或函数,却没有值或者返回值,因此会默认值为。发现b的值确实为None,且其类型为NoneType。若代码改为如下所示,则可以完美实现列表的输出。它不支持任何运算也没有任何内建方法。对象具有三个特性:身份、类型、值。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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

def calc_prod(lst):
    def ff():
        print map(lambda x:x*x,lst)
    return ff

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

Jetbrains全家桶1年46,售后保障稳定

结果:

[1, 4, 9, 16]
None

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

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

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。 若代码改为如下所示,则可以完美实现列表的输出。

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.net/200399.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • css css样式表 选择器 声明「建议收藏」

    css css样式表 选择器 声明「建议收藏」css部分css指层叠样式表(cascadingstylesheets),它们控制网页内容的外观。使用css设置页面样式时,可以将内容与表现形式分开。网页内容(HTML代码)驻留在HTML文件自身中,而css驻留在另一个文件中(外部样式表*.css)或HTML文档的另一部分(通常为文件头部分)中。写页面时要做到结构(HTML)、样式(css)、行为(js)相分离,

    2022年7月14日
    28
  • DrawImage方法详解(转载)

    DrawImage方法详解(转载)Image和Bitmap类概述GDI+的Image类封装了对BMP、GIF、JPEG、PNG、TIFF、WMF(Windows元文件)和EMF(增强WMF)图像文件的调入、格式转换以及简单处理的功能。

    2022年7月1日
    24
  • java方法中的构造方法与普通方法的区别[通俗易懂]

    “java”方法中的构造方法与普通方法的区别是:一、构造方法的名字必须与定义它的类名完全相同;二、构造方法在初始化对象时自动执行;三、构造方法可以被重载;四、构造方法不能被“static”等关键字修饰。

    2022年1月17日
    66
  • C++ 无锁队列

    C++ 无锁队列atomic 类型的操作是原子操作 是不可分割的 不能被中断的操作 程序代码中的一条简单赋值语句会被翻译为多条汇编指令 那么多个线程同时对某一存储单元进行修改 就有可能出现脏数据 原子操作可以避免脏数据的出现 2 多线程读写三 总结无锁队列依靠原子和 CAS 操作 对队列的读写索引进行判断来入队和出队 它没有使用互斥量 mutex 来进行加锁 从性能上具有明显的优势 但同时编程的复杂性增加了很多 在编码时也要对内存序有简单的了解

    2025年12月11日
    4
  • getelementbyid属性与用法[通俗易懂]

    getelementbyid属性与用法[通俗易懂]语法:oElement=document.getElementById(sID)参数:sID――必选项。字符串 (String) 。返回值:oElemen――对象 (Element) 。说明:根据指定的 id 属性值得到对象。返回 id 属性值等于 sID 的第一个对象的引用。假如对应的为一组对象,则返回该组对象中的第一个。 如果无符合条件的对象,则返回 nul

    2022年7月15日
    46
  • nfs41client loaded successfully_storcli创建raid

    nfs41client loaded successfully_storcli创建raid1、系统准备系统:ubuntu14.04,按照官网系统需要安装以下环境 环境 说明 安装配置方法 Ccompiler 编译器 移植时configure配置为交叉编译器 make 执行Makefile Ubuntu…

    2022年8月15日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号