深入理解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打开网页和暂停实例
Sep 30 Python
python实现挑选出来100以内的质数
Mar 24 Python
Python命令行参数解析模块getopt使用实例
Apr 13 Python
Python读取网页内容的方法
Jul 30 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
关于numpy数组轴的使用详解
Dec 05 Python
np.random.seed() 的使用详解
Jan 14 Python
Python面向对象中类(class)的简单理解与用法分析
Feb 21 Python
Django实现后台上传并显示图片功能
May 29 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版(1)
2006/10/09 PHP
WINXP下apache+php4+mysql
2006/11/25 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
php自定义加密与解密程序实例
2014/12/31 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
Javascript 遍历对象中的子对象
2009/07/03 Javascript
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
Vue2.0 axios前后端登陆拦截器(实例讲解)
2017/10/27 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
利用python求相邻数的方法示例
2017/08/18 Python
python出现&quot;IndentationError: unexpected indent&quot;错误解决办法
2017/10/15 Python
python针对excel的操作技巧
2018/03/13 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
Python list与NumPy array 区分详解
2019/11/06 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
个人授权委托书格式
2014/08/30 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android