深入理解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列表操作使用示例分享
Feb 21 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
python模块之StringIO使用示例
Apr 08 Python
简单理解Python中的装饰器
Jul 31 Python
Python实现的文本简单可逆加密算法示例
May 18 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
实例详解Matlab 与 Python 的区别
Apr 26 Python
PyQt5多线程刷新界面防假死示例
Dec 13 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
python用opencv 图像傅里叶变换
Jan 04 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
如何用Python提取10000份log中的产品信息
Jan 14 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
php 保留小数点
2009/04/21 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
Smarty3配置及入门语法
2017/02/22 PHP
PHP实现简易计算器功能
2020/08/28 PHP
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
vue实现验证用户名是否可用
2021/01/20 Vue.js
python对DICOM图像的读取方法详解
2017/07/17 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
Python实现全排列的打印
2018/08/18 Python
Python短信轰炸的代码
2020/03/25 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
房地产促销活动方案
2014/03/01 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
期末个人总结范文
2015/02/13 职场文书
2015年新农合工作总结
2015/03/30 职场文书
思品教学工作总结
2015/08/10 职场文书
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android