您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?(3)
    时间:2020-08-12 21:20 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    详细而言,这会影响比较操作(<、<=、==、!=、>、>=、is、is not、in、not in),一元运算符'not',内置函数 callable()、hasattr()、isinstance() 和issubclass() ,字典办法 has_key() ,字符串和 unicode 办法 endswith()、isalnum()、isalpha()、isdigit()、islower()、isspace()、istitle()、isupper() 和startswith(),unicode办法 isdecimal() 和 isnumeric(),以及文件对象的“closed”属性。operator 模块中的断言办法也被改为前往布尔值,包括operator.truth()。

    由于 bool 承袭自 int,因此 True + 1有效且等于 2,依此类推。这关于向后兼容性很重要:由于比较之类的操作以后前往整数值,所以无法确定现有运用顺序怎样运用这些值。

    估量随着时间的推移,标准库将在适当的时分更新为运用 False 和 True (但在以前允许运用 int 的场合,则不需求运用 bool 参数类型)。此更改不应惹起在本 PEP 中未详细阐明的其它成绩。

    C API

    “boolobject.h”头文件为布尔类型定义了 C API。它包含在“Python.h”中,因此不需求再 include 它。

    现有的称号 Py_False 和 Py_True 援用无独有偶的布尔对象 False 和 True (之前,它们辨别援用了值为 0 和 1 的静态整数对象,是众多整数之一)。

    一个新的 API,即 PyObject *PyBool_FromLong(long) ,会接纳一个 C 长整型参数,并前往对 Py_False (当参数为零时)或 Py_True (当非零时)的新援用。

    要反省对象能否为布尔对象,可以运用宏 PyBool_Check()。

    布尔实例的类型是 PyBoolObject *。

    布尔类型对象可作为 PyBool_Type 运用。

    廓清

    本 PEP 没有改动一个理想,即简直一切类型的对象都可以用作真假值。例如,在 if 语句中运用时,一个空列表为 false,一个非空列表为 true;这不会改动,而且也不计划改动。

    独一改动的是在前往或赋值时,用于表示真假值的首选值。以前,这些首选的真假值是 1 和 0;本 PEP 将首选值更改为 True 和 False,并修正内置操作以前往这些首选值。

    兼容性

    由于要向后兼容,所以布尔类型拥有一些不严厉的属性。例如,允许运用布尔参数停止算术运算,行将 False 视为 0,将 True 视为 1。而且,可以将 bool 用作序列对象的索引。

    我不以为这是一个成绩,也不希望朝这个方向开展言语。我以为,对“布尔性(Booleanness)”的更严厉的解释不会使言语更明晰。

    兼容性要求的另一个结果是表达式“True and 6”的值为 6,相似地,表达式“ False or None”的值为 None。

    “and”和“or”运算符被设计来前往第一个决议了却果的参数,这点不会改动;特别地,它们不强迫要求结果为布尔类型。当然,假设两个参数都是布尔值,那么结果一定是一个布尔值。经过写“bool(x and y)”,也可以很容易地将其强迫转成布尔类型。

    处置了的成绩

    (另请参见下面的“评审”部分。)

    由于 bool 值的 repr() 或 str() 与 int 值不同,因此某些代码(例如,基于doctest 的单元测试,以及能够依赖于 “%s”%truth 的数据库代码)能够会出错。处置这个成绩很容易(无需显式援用 bool 类型),并且估量这只会影响十分大批的可以轻松修复的代码。

    其它言语(C99、C ++、Java)均以小写方式命名常量“false”和“true”。关于Python,我更喜欢遵照现有内置常量的常规,这些内置常量全部运用驼峰式命名:None 、Ellipsis、NotImplemented (以及一切的内置异常)。Python 内置的命名空间全部用小写字母表示函数和类型。

    前面提到过,为了满足用户的希冀,关于在布尔上下文中被以为是真的每个 x, x == True 表达式都应该为真,异样,假设 x 被以为是假,则 x == False 也应该为真。那些刚了解布尔变量的新手能够会写:

    if x == True: ... 

    而不是正确的方式:

    if x: ... 

    许多人乍一看会对后一种方式感到不舒适,这在心思和言语上似乎有很强的理由,但是我以为处置办法应该是教育而不是削弱言语。 (责任编辑:admin)