深入理解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 相关文章推荐
安装dbus-python的简要教程
May 05 Python
python 计算两个日期相差多少个月实例代码
May 24 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
kaggle+mnist实现手写字体识别
Jul 26 Python
Python 函数返回值的示例代码
Mar 11 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
Aug 26 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
python isinstance函数用法详解
Feb 13 Python
python学生管理系统的实现
Apr 05 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
Python实现手绘图效果实例分享
Jul 22 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
编译问题
2006/10/09 PHP
php 删除无限级目录与文件代码共享
2008/11/22 PHP
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
PHP将数据导出Excel表中的实例(投机型)
2017/07/31 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[00:32]2018DOTA2亚洲邀请赛Liquid出场
2018/04/03 DOTA
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
Python实现的端口扫描功能示例
2018/04/08 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
python for循环remove同一个list过程解析
2019/08/14 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
总经理助理岗位职责
2013/11/08 职场文书
应届大专毕业生自我鉴定
2014/04/08 职场文书
工地例会施工汇报材料
2014/08/22 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
大学辅导员述职报告
2015/01/10 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
2015年秋季校长开学典礼致辞
2015/07/29 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP