深入理解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数据结构之Array用法实例
Oct 09 Python
Python类属性与实例属性用法分析
May 09 Python
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
python删除某个字符
Mar 19 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
python不使用for计算两组、多个矩形两两间的iou方式
Jan 18 Python
基于PyQT实现区分左键双击和单击
May 19 Python
python 装饰器的实际作用有哪些
Sep 07 Python
Python如何使用ElementTree解析xml
Oct 12 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 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 删除cookie和浏览器重定向
2009/03/16 PHP
PHP中include()与require()的区别说明
2010/03/10 PHP
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
js类型检查实现代码
2010/10/29 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
详解PHP中pathinfo()函数导致的安全问题
2017/01/05 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
vue实例的选项总结
2020/06/09 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
Flask和pyecharts实现动态数据可视化
2020/02/26 Python
python的json包位置及用法总结
2020/06/21 Python
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
财务部岗位职责
2013/11/19 职场文书
开业庆典答谢词
2014/01/18 职场文书
连锁超市项目计划书
2014/09/15 职场文书
庆祝教师节活动总结
2015/03/23 职场文书
聘任通知书
2015/09/21 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
初中体育课教学反思
2016/02/16 职场文书