深入理解Python中的内置常量


Posted in Python onMay 20, 2017

前言

大家都知道Python内置的常量不多,只有6个,分别是True、False、None、NotImplemented、Ellipsis、__debug__。下面就来看看详细的介绍:

一. True

1. True是bool类型用来表示真值的常量。

>>> True
True
>>> type(True)
<class 'bool'>

2. 对常量True进行任何赋值操作都会抛出语法错误。

>>> True = 1
SyntaxError: can't assign to keyword

二. False

1. False是bool类型用来表示假值的常量。

>>> False
False
>>> type(False)
<class 'bool'>

2. 对常量False进行任何赋值操作都会抛出语法错误。

>>> False = 0
SyntaxError: can't assign to keyword

三. None

1. None表示无,它是NoneType的唯一值。

>>> None #表示无,没有内容输出
>>> type(None)
<class 'NoneType'>

2. 对常量None进行任何赋值操作都会抛出语法错误。

>>> None = 2
SyntaxError: can't assign to keyword

3. 对于函数,如果没有return语句,即相当于返回None。

>>> def sayHello(): #定义函数
 print('Hello')

 
>>> sayHello()
Hello
>>> result = sayHello()
Hello
>>> result
>>> type(result)
<class 'NoneType'>

四. NotImplemented

1.  NotImplemented是NotImplementedType类型的常量。

>>> NotImplemented
NotImplemented
>>> type(NotImplemented)
<class 'NotImplementedType'>

2. 使用bool()函数进行测试可以发现,NotImplemented是一个真值。

>>> bool(NotImplemented)
True

3. NotImplemented不是一个绝对意义上的常量,因为他可以被赋值却不会抛出语法错误,我们也不应该去对其赋值,否则会影响程序的执行结果。

>>> bool(NotImplemented)
True
>>> NotImplemented = False
>>> 
>>> bool(NotImplemented)
False

4. NotImplemented多用于一些二元特殊方法(比如__eq__、__lt__等)中做为返回值,表明没有实现方法,而Python在结果返回NotImplemented时会聪明的交换二个参数进行另外的尝试。

>>> class A(object):
 def __init__(self,name,value):
  self.name = name
  self.value = value
 def __eq__(self,other):
  print('self:',self.name,self.value)
  print('other:',other.name,other.value)
  return self.value == other.value #判断2个对象的value值是否相等

>>> a1 = A('Tom',1)
>>> a2 = A('Jay',1)
>>> a1 == a2
self: Tom 1
other: Jay 1
True
>>> class A(object):
 def __init__(self,name,value):
  self.name = name
  self.value = value
 def __eq__(self,other):
  print('self:',self.name,self.value)
  print('other:',other.name,other.value)
  return NotImplemented

>>> a1 = A('Tom',1)
>>> a2 = A('Jay',1)
>>> a1 == a2
self: Tom 1
other: Jay 1
self: Jay 1
other: Tom 1
False

当执行a1==a2(即调用__eq__(a1,a2)),返回NotImplemented时,Python会自动交换参数再次调用__eq__(a2,a1)。

五. Ellipsis

1. Ellipsis是ellipsis类型的常量,它和…是等价的。

>>> Ellipsis
Ellipsis
>>> type(Ellipsis)
<class 'ellipsis'>
>>> ...
Ellipsis
>>> ... == Ellipsis
True

2. 使用bool()函数进行测试可以发现,Ellipsis是一个真值。

>>> bool(Ellipsis)
True

3. Ellipsis不是一个绝对意义上的常量,因为他可以被赋值却不会抛出语法错误,我们也不应该去对其赋值,否则会影响程序的执行结果。

>>> bool(Ellipsis)
True
>>> Ellipsis = False
>>> bool(Ellipsis)
False

4. Ellipsis多用于表示循环的数据结构。

>>> a = [1,2,3,4]
>>> a.append(a)
>>> a
[1, 2, 3, 4, [...]]
>>> a
[1, 2, 3, 4, [...]]
>>> len(a)
>>> a[4]
[1, 2, 3, 4, [...]]
>>>

六. __debug__

1. __debug__是一个bool类型的常量。

>>> __debug__
True
>>> type(__debug__)
<class 'bool'>

2. 对常量__debug__进行任何赋值操作都会抛出语法错误。

>>> __debug__ = False
SyntaxError: assignment to keyword

3. 如果Python没有使用-O选项启动,此常量是真值,否则是假值。

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python深入学习之上下文管理器
Aug 31 Python
Python中字典和JSON互转操作实例
Jan 19 Python
python用reduce和map把字符串转为数字的方法
Dec 19 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
Django+boostrap 美化admin后台的操作
Mar 11 Python
python 的topk算法实例
Apr 02 Python
Pytorch 使用 nii数据做输入数据的操作
May 26 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
python使用pygame创建精灵Sprite
Apr 06 Python
python万年历实现代码 含运行结果
May 20 #Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
May 19 #Python
python通过pip更新所有已安装的包实现方法
May 19 #Python
python django 实现验证码的功能实例代码
May 18 #Python
python实现发送邮件及附件功能
Mar 02 #Python
利用python微信库itchat实现微信自动回复功能
May 18 #Python
利用Python读取文件的四种不同方法比对
May 18 #Python
You might like
php语言流程控制中的主动与被动
2012/11/05 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
2013/06/21 PHP
php 多文件上传的实现实例
2016/10/23 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
jquery replace方法去空格
2017/05/08 jQuery
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
ReactRouter的实现方法
2021/01/25 Javascript
Python遍历numpy数组的实例
2018/04/04 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
Python 面向对象部分知识点小结
2020/03/09 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
Python如何合并多个字典或映射
2020/07/24 Python
html5声频audio和视频video等新特性详细说明
2012/12/26 HTML / CSS
商务英语专业毕业生自荐信
2013/11/05 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
党日活动总结
2014/05/07 职场文书
个人工作主要事迹
2014/05/08 职场文书
联欢会开场白
2015/06/01 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
python - asyncio异步编程
2021/04/06 Python