深入理解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持久性管理pickle模块详细介绍
Feb 18 Python
Python中Django框架下的staticfiles使用简介
May 30 Python
浅谈Python中列表生成式和生成器的区别
Aug 03 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
TensorFlow实现非线性支持向量机的实现方法
Apr 28 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
python中列表的切片与修改知识点总结
Jul 23 Python
python实现微信打飞机游戏
Mar 24 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
Python中Selenium模块的使用详解
Oct 09 Python
尝试使用Python爬取城市租房信息
Apr 12 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/02 星际争霸
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
php自定义时间转换函数示例
2016/12/07 PHP
php创建图像具体步骤
2017/03/13 PHP
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
js中判断控件是否存在
2010/08/25 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
python 正则表达式 概述及常用字符
2009/05/04 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
关于Python的一些学习总结
2018/05/25 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
Python argparse模块使用方法解析
2020/02/20 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
pandas 数据类型转换的实现
2020/12/29 Python
毕业生就业自荐信
2013/12/04 职场文书
毕业自荐信
2013/12/16 职场文书
大专毕业生求职信
2014/07/05 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
幼师小班个人总结
2015/02/12 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL