深入理解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 ORM框架SQLAlchemy学习笔记之安装和简单查询实例
Jun 10 Python
初步探究Python程序的执行原理
Apr 11 Python
Python优先队列实现方法示例
Sep 21 Python
详解Python使用tensorflow入门指南
Feb 09 Python
Python3实现的字典遍历操作详解
Apr 18 Python
python带参数打包exe及调用方式
Dec 21 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 Python
浅谈Python中的模块
Jun 10 Python
python不同版本的_new_不同点总结
Dec 09 Python
Python破解极验滑动验证码详细步骤
May 21 Python
python+opencv实现视频抽帧示例代码
Jun 11 Python
用Python可视化新冠疫情数据
Jan 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
全国中波电台频率表
2020/03/11 无线电
获取PHP警告错误信息的解决方法
2013/06/03 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
js以对象为索引的关联数组
2010/07/04 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
vue+node+webpack环境搭建教程
2017/11/05 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
Python实现的彩票机选器实例
2015/06/17 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
Python3操作MongoDB增册改查等方法详解
2020/02/10 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
会计出纳岗位职责
2013/12/25 职场文书
幼儿园中班新学期寄语
2014/01/18 职场文书
学生干部学习的自我评价
2014/02/18 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
银行实习推荐信
2015/03/27 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
与死神共舞观后感
2015/06/15 职场文书
聘任通知书
2015/09/21 职场文书
python自动化测试通过日志3分钟定位bug
2021/11/20 Python