深入理解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实现的多线程端口扫描工具分享
Jan 21 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
基于Python闭包及其作用域详解
Aug 28 Python
Python模拟随机游走图形效果示例
Feb 06 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 Python
Django app配置多个数据库代码实例
Dec 17 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
Python 爬虫的原理
Jul 30 Python
python实现文件分片上传的接口自动化
Nov 19 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无限分类的类
2007/01/02 PHP
php 获取百度的热词数据的代码
2012/02/18 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
2020/08/06 PHP
JavaScript学习笔记(十)
2010/01/17 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
javascript的几种写法总结
2016/09/30 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
python的id()函数介绍
2013/02/10 Python
详细探究Python中的字典容器
2015/04/14 Python
答题辅助python代码实现
2018/01/16 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
Python如何安装第三方模块
2020/05/28 Python
基于python实现操作redis及消息队列
2020/08/27 Python
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
教师师德教育的自我评价
2013/10/31 职场文书
创新型城市实施方案
2014/03/06 职场文书
高中数学教学反思范文
2016/02/18 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
pandas进行数据输入和输出的方法详解
2022/03/23 Python