深入理解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网页解析利器BeautifulSoup安装使用介绍
Mar 17 Python
python中管道用法入门实例
Jun 04 Python
Python列表生成式与生成器操作示例
Aug 01 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
Python selenium的基本使用方法分析
Dec 21 Python
Python实现序列化及csv文件读取
Jan 19 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
Python面向对象之成员相关知识总结
Jun 24 Python
python 进阶学习之python装饰器小结
Sep 04 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
php中使用临时表查询数据的一个例子
2013/02/03 PHP
php之可变变量的实例详解
2017/09/12 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
javascript动画浅析
2012/08/30 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
python中函数传参详解
2016/07/03 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
Python入门_浅谈字符串的分片与索引、字符串的方法
2017/05/16 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
python中append实例用法总结
2019/07/30 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
纯CSS实现菜单、导航栏的3D翻转动画效果
2014/04/23 HTML / CSS
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
网上商城创业计划书范文
2014/01/31 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
签证工作证明模板
2015/06/15 职场文书
八年级英语教学反思
2016/02/15 职场文书
z-index不起作用
2021/03/31 HTML / CSS
如何使JavaScript休眠或等待
2021/04/27 Javascript
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python