深入理解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和GO语言实现的消息摘要算法示例
Mar 10 Python
详解Python中内置的NotImplemented类型的用法
Mar 31 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
Python3学习urllib的使用方法示例
Nov 29 Python
Django学习笔记之ORM基础教程
Mar 27 Python
python dict 相同key 合并value的实例
Jan 21 Python
python中property和setter装饰器用法
Dec 19 Python
Python如何用filter函数筛选数据
Mar 05 Python
PyMongo 查询数据的实现
Jun 28 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
当海贼王变成JOJO风
2020/03/02 日漫
php 获取本地IP代码
2013/06/23 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
php常用的url处理函数总结
2014/11/19 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
利用JS制作万年历的方法
2017/08/16 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
实例讲解python中的序列化知识点
2018/10/08 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
python logging.info在终端没输出的解决
2020/05/12 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
详解python中的异常捕获
2020/12/15 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
环保专业大学生职业规划设计
2014/01/10 职场文书
小学生美德少年事迹
2014/02/02 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
人事任命通知
2015/04/20 职场文书
计划生育目标责任书
2015/05/09 职场文书
暑假生活随笔
2015/08/15 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS