zoukankan      html  css  js  c++  java
  • Python内置类型(1)——真值测试

     

    python中任何对象都能直接进行真假值的测试,用于if或者while语句的条件判断,也可以做为布尔逻辑运算符的操作数

    python中任何对象都能直接进行真假值的测试,而不需要额外的类型转换

    这一点是和其它语言不一样的。比如C#,一个非bool的对象,如果要进行逻辑判断则必须先强制进行类型转换、或者调用对象的自身判断方法进行判断。

    var message = " ";
    if (message.IsNullOrEmpty()){
        ...
    }
    

    而python中可以直接对对象进行逻辑判断无需类型转换

    message = " "
    if message :
        pass
    

    对象的真假值测试的结果,要么是True,要么是False

    布尔类型的值只有True和False,所以对象是不管什么类型,其真假值的测试结果必然是True和False中的一个。在python中真假值的测试结果可以通过调用内置函数bool来确认。

    >>> bool(' ')
    True
    >>> bool('')
    False
    

    以下的内置对象会被视为False值

    • None
      >>> bool(None)
      False
      
    • False
      >>> bool(False)
      False
      
    • 任何数值类型的零,例如,0、0.0、0j
      >>> bool(0),bool(0.0),bool(0j)
      (False, False, False)
      
    • 任何空序列,例如,”、()、[]
      >>> bool(''),bool(()),bool([])
      (False, False, False)
      
    • 任何空映射,例如,{}
      >>> bool({})
      False
      
      内置对象除了以上值之外的都是真值

    常量NotImplemented、Ellipsis、True是真值

    >>> bool(NotImplemented)
    True
    >>> bool(Ellipsis)
    True
    >>> bool(True)
    True
    

    对于用户自定义的类,其真假值取决于该类有没有定义__bool__()__len__(),以及这两个方法返回的值

    如果自定义类未没有定义__bool__()__len__()方法,则该类的实例对象的真假值测试总是True。

    >>> class A:
        pass
    
    >>> a =  A()
    >>> bool(a)
    True
    

    如果自定义类只定义了__bool__()方法,则该类的实例对象的真假值测试结果为__bool__()方法返回的结果

    >>> class B():
        def __init__(self,name):
            self.name = name
        def __bool__(self):
            return bool(self.name)
    
    >>> b1 = B('')
    >>> bool(b1)
    False
    >>> b2 = B('jay')
    >>> bool(b2)
    True
    

    如果自定义类只定义了__len__()方法,则该类的实例对象的真假值测试结果为__len__()方法返回的结果是否为整数0

    >>> class C():
        def __init__(self,name):
            self.name = name
        def __len__(self):
            return len(self.name)
    
    >>> c1 = C('')
    >>> bool(c1)
    False
    >>> c2 = C('jay')
    >>> bool(c2)
    True
    

    如果自定义类同时定义了__bool__()__len__()方法,则该类的实例对象的真假值测试结果为__bool__()方法返回的结果,即__bool__()方法优先级高于__len__()方法。

    >>> class D():
        def __len__(self):
            return 1
        def __bool__(self):
            return False
    
    >>> d = D()
    >>> bool(d)
    False
    
    
    >>> class E():
        def __len__(self):
            return 0
        def __bool__(self):
            return True
    
    >>> e = E()
    >>> bool(e)
    True
    
     
     
     

      

        欢迎关注公众号交流:

        公众号二维码

  • 相关阅读:
    Atitit  基于meta的orm,提升加速数据库相关应用的开发
    Atitit机器学习原理与概论book attilax总结
    Atitti 文本分类  以及 垃圾邮件 判断原理 以及贝叶斯算法的应用解决方案
    Atitit 贝叶斯算法的原理以及垃圾邮件分类的原理
    Atiti  qq空间破解(3)------------gui图形化通用cli执行器atiuse
    Atitit dsl对于数组的处理以及main函数的参数赋值
    Atitit main函数的ast分析  数组参数调用的ast astview解析
    Atiti 重定向标准输出到字符串转接口adapter stream流体系 以及 重定向到字符串
    Atititcmd cli环境变量的调用设置与使用
    如何有效使用Project(2)——进度计划的执行与监控
  • 原文地址:https://www.cnblogs.com/sesshoumaru/p/python-truth-value-testing.html
Copyright © 2011-2022 走看看