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
    
     
     
     

      

        欢迎关注公众号交流:

        公众号二维码

  • 相关阅读:
    Invalid call to dataType on unresolved object, tree: 'goodsid的问题
    本地调试spark程序出现Please set spark.sql.hive.metastore.jars 一类配置错误的问题
    es搜索模型例子
    mysql2es全量更新方案
    利用hive-hbase表做hive表快速入库hbase功能,纬度表的查询
    运行spark报错Error while instantiating 'org.apache.spark.sql.hive.HiveSessionState'
    es常用查询学习记录
    SPSS聚类与判别
    Matlab常微分方程数值解法(1)
    Matlab拟合
  • 原文地址:https://www.cnblogs.com/sesshoumaru/p/python-truth-value-testing.html
Copyright © 2011-2022 走看看