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

    成绩是每团体的做法都不一样。例如,你应该运用“FALSE”、“false”、“False”、“F”还是“f”呢?另外,假值应该为 0 或 None,或是一个其它的布尔类型打印出“true”或“false”呢?在言语中添加一个标准的布尔类型可以处置这些成绩。

    一些外部库(例如数据库和 RPC 相关的包)需求可以区散布尔值和整数值,虽然通常可以制定出处置方案,但假设言语本身提供了标准的布尔类型,则会更容易。这也适用于 Jython:某些 Java 类具有辨别用于 int 和 boolean 参数的重载办法或结构函数。布尔类型可用于选择布尔变量。(显然,某些 COM 接口也是如此。)

    标准的布尔类型(bool type)也可以作为强迫将值解释为布尔值(Boolean)的办法,该办法可用于标准化布尔值。当一个布尔值需求归一化为两个值之一时,bool(x) 比“not not x”更明晰,也比这种写法更繁复:

    if x: 

     

    return 1 

     

    else

     

    return 0 

    这是从教授 Python 中得出的一些阅历。当向人们在交互式终端中展现比较运算符时,我以为这有点美观:

    >>> a = 13 

     

    >>> b = 12 

     

    >>> a > b 

     

    1 

     

    >>> 

    假设是这样的话:

    >>> a > b 

     

    True 

     

    >>> 

    每次会少花一毫秒的时间思索打印出的 0 或 1。

    还有一个成绩(它甚至困扰了曾经阅历丰厚但远离了 Python 一段时间的人):

    >>> cmp(a, b) 

     

    1 

     

    >>> cmp(a, a) 

     

    0 

     

    >>> 

    你能够会倾向于以为 cmp() 也前往一个布尔值,但实践上它可以前往三个不同的值(-1、0、1)。假设整数没有(通常)被用于表示布尔值结果,则这可以愈加清楚地表达出其它的含义。(译注:即只用 True/False 表示布尔值,则整数表达其它含义时就不会有歧义)

    标准

    以下 Python 代码详细罗列了新类型的大少数属性:

    class bool(int): 

     

     

    def __new__(cls, val=0): 

     

    # This constructor always returns an existing instance 

     

    if val: 

     

    return True 

     

    else

     

    return False 

     

     

    def __repr__(self): 

     

    if self

     

    return "True" 

     

    else

     

    return "False" 

     

     

    __str__ = __repr__ 

     

     

    def __and__(self, other): 

     

    if isinstance(other, bool): 

     

    return bool(int(self) & int(other)) 

     

    else

     

    return int.__and__(self, other) 

     

     

    __rand__ = __and__ 

     

     

    def __or__(self, other): 

     

    if isinstance(other, bool): 

     

    return bool(int(self) | int(other)) 

     

    else

     

    return int.__or__(self, other) 

     

     

    __ror__ = __or__ 

     

     

    def __xor__(self, other): 

     

    if isinstance(other, bool): 

     

    return bool(int(self) ^ int(other)) 

     

    else

     

    return int.__xor__(self, other) 

     

     

    __rxor__ = __xor__ 

     

     

    # Bootstrap truth values through sheer willpower 

     

    False = int.__new__(bool, 0

     

    True = int.__new__(bool, 1

    False 和 True 将是单例的(singletons),像 None 一样。由于这种类型有两个值,也许应该将它们称为“doubletons”?实践的完成将不允许创立 bool 的其它实例。

    True 与 False 会被正确地序列化和打包,例如 pickle.loads(pickle.dumps(True)) 将前往 True, 而marshal.loads(marshal.dumps(True)) 也一样。

    一切在定义上需前往布尔结果的内置操作,都将更改为前往 False 或 True,而不再是 0 或 1。

    (责任编辑:admin)