Python内置常量详解:True、False、None及特殊常量行为
本文深入解析Python中仅有的6个内置常量:True、False、None、NotImplemented、Ellipsis和__debug__。详细阐述它们的类型、赋值限制及特殊行为,重点说明NotImplemented在运算符重载中的回退机制以及Ellipsis在表示循环数据结构时的应用,帮助开发者正确使用这些核心语言特性。
前言
Python语言中内置的常量数量极少,总共仅包含6个:True、False、None、NotImplemented、Ellipsis以及__debug__。接下来将逐一详细介绍这六个常量的具体特性与使用场景。
一. True
True是布尔类型(bool)中用于表示真值的常量。
>>> True True >>> type(True) <class 'bool'>
尝试对常量True执行任何赋值操作,Python解释器均会抛出语法错误(SyntaxError)。
>>> True = 1 SyntaxError: can't assign to keyword
二. False
False是布尔类型(bool)中用于表示假值的常量。
>>> False False >>> type(False) <class 'bool'>
尝试对常量False执行任何赋值操作,Python解释器同样会抛出语法错误(SyntaxError)。
>>> False = 0 SyntaxError: can't assign to keyword
三. None
None用于表示“无”或空值,它是NoneType类型唯一的实例值。
>>> None #表示无,没有内容输出 >>> type(None) <class 'NoneType'>
尝试对常量None执行任何赋值操作,Python解释器会抛出语法错误(SyntaxError)。
>>> None = 2 SyntaxError: can't assign to keyword
在函数定义中,若未显式包含return语句或return后无返回值,该函数执行完毕后默认返回None。
>>> def sayHello(): #定义函数
print('Hello')
>>> sayHello()
Hello
>>> result = sayHello()
Hello
>>> result
>>> type(result)
<class 'NoneType'>
四. NotImplemented
NotImplemented是NotImplementedType类型的常量。
>>> NotImplemented NotImplemented >>> type(NotImplemented) <class 'NotImplementedType'>
通过bool()函数测试可知,NotImplemented在布尔上下文中被视为真值(True)。
>>> bool(NotImplemented) True
NotImplemented并非绝对意义上的只读常量,对其赋值不会引发语法错误,但强烈建议不要对其进行赋值,否则可能导致程序逻辑异常。
>>> bool(NotImplemented) True >>> NotImplemented = False >>> >>> bool(NotImplemented) False
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
Ellipsis是ellipsis类型的常量,其字面量形式为三个点(...),两者等价。
>>> Ellipsis Ellipsis >>> type(Ellipsis) <class 'ellipsis'> >>> ... Ellipsis >>> ... == Ellipsis True
通过bool()函数测试可知,Ellipsis在布尔上下文中被视为真值(True)。
>>> bool(Ellipsis) True
Ellipsis并非绝对意义上的只读常量,对其赋值不会引发语法错误,但强烈建议不要对其进行赋值,否则可能导致程序逻辑异常。
>>> bool(Ellipsis) True >>> Ellipsis = False >>> bool(Ellipsis) False
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__
__debug__是一个布尔类型(bool)的常量。
>>> __debug__ True >>> type(__debug__) <class 'bool'>
尝试对常量__debug__执行任何赋值操作,Python解释器会抛出语法错误(SyntaxError)。
>>> __debug__ = False SyntaxError: assignment to keyword
__debug__的值取决于Python的启动方式:若未使用-O选项启动Python解释器,该常量值为真(True);若使用了-O选项优化启动,则该常量值为假(False)。
总结
以上就是对Python内置常量的完整解析,希望这些内容能对您的学习或工作有所帮助。如有任何疑问,欢迎留言交流,感谢支持。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









