python表示空类型的关键字_Python 为什么没有 void 关键字?
原标题:Python 为什么没有 void 关键字?
void 是编程语言中最常见的关键字之一,从字面上理解,它是“空的、空集、空白”的意思,最常用于表示函数的一种返回值类型。
维基百科上有一个定义:
The void type, in several programming languages derived from C and Algol68, is the type for the result of a function that returns normally, but does not provide a result value to its caller.
在 C、Algol68 及它们所派生的几种编程语言中,void 类型是函数正常返回的一种类型,但是不会给调用者返回一个值。
简单来说,void 是一种类型(type),但是没有具体的值(value)。
这到底是什么意思呢?
以 Python 的几种常见类型为例,我们可以从对比中看出规律:int 是一种表示整数的类型,它有无限个可能的整数值;bool 是一种布尔类型,它有两个可能的值(True 和 False);NoneType 是一种表示 None 的类型,它只有一个值(None)。
至于 void,它是一种更为抽象的特殊类型,但是不包含任何值。
介绍完概念上的含义,我们就可以进入正题了。标题中的问题可以进一步分解成两个:
其它语言为什么要使用 void 关键字?
Python 为什么不设计出 void 关键字?
对于第一个问题,我们以 C/C++ 为例,先看看 void 的两种使用场景(PS:此处只考虑函数的用法,不考虑指针的用法,因为 Python 没有指针):
当 void 用在函数的参数位置时,它表示该函数不需要传参。
最初 C 语言的 f 表示参数数量不确定,为了另外表达“不需要参数”的语义,所以引入 f(void) 作为限定。后来的语言(包括 Python)基本不在参数中使用 void,而是直接用 f 表示不需传参。C++ 为了兼容 C,所以才同时支持这两种语法。
当 void 用在函数前作修饰时,它表示该函数没有返回值。
在 C 语言中,若不声明返回类型,则 f 函数在编译后会返回整型的值。为了避免混乱,当不需要返回值时,就使用 void f 来作限定。
同时,更主要的是,它还起到了占位符的作用,表明一个函数的类型是已知的,这对代码可读性和编译都有所帮助。
void 作为函数的空返回值类型,这种用法在 C++/Java 中也被继承了。另外,在 Java 中也有 void 的身影,只不过它成了一种操作符,起到了完全不同的作用,此处不表。
但是, Python 从头到尾都没有 void 关键字。
为什么会这样?难道是因为在 Python 中不存在其它语言所面对的问题么?还是说,Python 中有自己的一套解决方案?
仍以跟函数相关的两种用法为例作分析吧。
在表示函数不需传参时, f(void)这种写法根本就是多余的,所以 Python使用了最简单明了的无参式写法 f 。
至于返回值类型的用法,在我们定义出一个函数时,例如最简单的 def func:pass ,为了让它的调用结果 func 是一个合法的对象,那它必须具有一个有效的类型(type)。
这应该是以类型为基的编程语言都会遇到的共性问题,Python 也不例外。
这个时候,如果函数本身没有显式地 return 出一个对象的话,就有两种可能的解决办法:
方法一,即声明该函数为 void 类型,像 C 和其它语言所做的那样,只要能通过类型检查即可
方法二,则是 Python 所用的方法,即令解释器隐式地返回一个 None 对象,也就是令函数默认得到一个 NoneType 类型,再用于类型检查(PS:Java 也类似,只不过它默认返回的是 undefined,它不是一个对象,而是一种表示“未定义”的类型,类似于 void)
简单而言,Python 的设计思路是直接复用已有的 NoneType 类型,并让解释器来填补缺失掉的函数类型。
关于 Python 解释器的这个隐式填补过程,我已在上一篇《 Python 函数为什么会默认返回 None? 》文章详细分析过,感兴趣的同学可去查阅。
这样做的好处至少有两点: 一是没有引入新的 void 类型和关键字;二是不需要程序员在函数前声明返回类型,这就跟有显式返回值的写法保持了一致。
试想一下,如果 Python 不让函数默认有返回值的话,就可能要写成 void def func:... 这样的形式,那它就变成了函数定义时的一种特例。与另一种特例函数相比,即异步函数 asyc def func:... ,就可能引起混乱。
总体而言,Python 似乎认为 void 空类型不是那么有存在的必要,似乎 NoneType 类型就足够了,而当缺少返回值时,让解释器统一注入是极为方便的,因此才出现了我们看到的现状。
至此,文章标题的问题算是圆满回答了。返回搜狐,查看更多
责任编辑:
python表示空类型的关键字_Python 为什么没有 void 关键字?相关推荐
- python表示空类型的关键字_Python基本数据类型
Python中包括以下常用数据类型:数字.布尔值. 字符串.列表.元组.字典.集合.collention系列 一.数字 关键字:int 数字的常用操作方法: a = "123" p ...
- python中表示空类型的是_python中怎么表示空值
首先了解python对象的概念 python中,万物皆对象,所有的操作都是针对对象的. 那什么是对象?5是一个int对象,'oblong'是一个str对象,异常也是一个对象,抽象一点是,人,猫,够也是 ...
- python中表示空类型的是_python中什么表示空类型
python中什么表示空类型? python中None表示空类型.表示该值是一个空对象,空值是Python里一个特殊的值,用None表示.None不能理解为0,因为0是有意义的,而None是一个特殊的 ...
- python return用法_Python 为什么没有 void 关键字?
void 是编程语言中最常见的关键字之一,从字面上理解,它是"空的.空集.空白"的意思,最常用于表示函数的一种返回值类型. 维基百科上有一个定义: The void type, i ...
- python系统关键字_Python基础教程 - global关键字及全局变量的用法
Python中global关键字主要作用是声明变量的作用域. 在C语言中,由于变量一定是先声明,后使用,所以我们可以清楚的知道,现在使用的变量是全局还是局部,比如: int a = 5; void t ...
- python定义变量类型为数字_python 学习(四)- 变量类型
一.变量的定义和使用 为什么需要变量?当然是通过变量来存储数据,而存储的数据类型可能是数字.字符串.字符等等,将这些数据存储在变量中,可以方便我们去使用,除了变量之外还有一个常量,区别就是,常量是不可 ...
- python创建空字典什么意思_Python创建空列表的字典2种方法详解
如果要在 Python 中创建键值是空列表的字典,有多种方法,但是各种方法之间是否由区别?需要作实验验证,并且分析产生的原因.本文针对两种方法做了实验和分析. 如果要在 Python 中创建一个键值都 ...
- c语言所有关键字作用,void_C语言void关键字详解
void类型修饰符(type specifier)表示"没有值可以获得".因此,不可以采用这个类型声明变量或常量.void 类型可以用于下面各小节所描述的目的. void用于函数声 ...
- python计算空类型_python的变量 类型和存储
表达式(创建处理对象) => 语句 => 模块 => 程序 变量 创建: 第一次赋值时生成, 规则: -1包含字母数字下划线 -2 只能以字母下划线开头 -3 不能有空格 -4 避免 ...
最新文章
- jetty作为内嵌服务器自启动
- html5 网页游戏 开源,HTML5 网页游戏,基于 WebGL 打造
- freebsd ports安装mysql_FreeBSD Ports 方式安装MySQL及注意事项
- java11正式发布了,让java代码更完美
- linux用dd测试磁盘速度
- ConstraintLayout 学习笔记
- 分享21个丰富多彩的 HTML5 小游戏
- C++ 四种类型转换运算符
- 【Python】求n!
- HTTP 和 WebSocket的区别
- 链接选项 rpath 的原理和应用
- FlasCC例子研究之bitmapdata
- IT人士易犯4大职业病 鼠标手居第一位
- jupyter中subplots_adjust()调整子图大小无效、子图溢出和日期标签遮挡坐标轴刻度的问题解决
- 理解的三极管输出特性曲线图的放大区和饱和区,利用∆Ic小于∆βIb差值比较曲线左移右移关系
- 三点式女青年和免费的笔记本电脑
- 读钱钟书的《写在人生边上 人生边上的边上 石语》(一)
- Hdu4939 Stupid Tower Defense
- jarsigner签名APK完整步骤
- 多场景项目实战 (总结有点多今天)