深入理解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实现求最大公约数及判断素数的方法
May 26 Python
在Python的Django框架中更新数据库数据的方法
Jul 17 Python
Python实现新浪博客备份的方法
Apr 27 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
Python简单I/O操作示例
Mar 18 Python
wxpython绘制音频效果
Nov 18 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
python实现磁盘日志清理的示例
Nov 05 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 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
Terran魔法科技
2020/03/14 星际争霸
基于PHP文件操作的详解
2013/06/05 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
PHP chop()函数讲解
2019/02/11 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
JS中style属性
2006/10/11 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
js实现查询商品案例
2020/07/22 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
python中反射用法实例
2015/03/27 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
遗传算法之Python实现代码
2017/10/10 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
python实现微信自动回复及批量添加好友功能
2019/07/03 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
python Gabor滤波器讲解
2020/10/26 Python
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
应届大学生自荐信
2013/12/05 职场文书
法律专业应届生自荐信范文
2014/01/06 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
环卫工人节活动总结
2014/08/29 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
Redis高并发缓存架构性能优化
2022/05/15 Redis