【问题标题】:How do I use a Boolean in Python?如何在 Python 中使用布尔值?
【发布时间】:2010-12-17 10:41:17
【问题描述】:

Python 是否真的包含布尔值?我知道你可以这样做:

checker = 1
if checker:
    #dostuff

但我很迂腐,喜欢在 Java 中看到布尔值。例如:

Boolean checker;
if (someDecision)
{
    checker = true;
}
if(checker)
{
    //some stuff
}

Python 中是否有布尔值之类的东西?我似乎在文档中找不到类似的东西。

【问题讨论】:

  • 记住...创建变量时不需要声明类型。只需 'checker = False' 就足够了。
  • @Dominic Bou-Samra:“你不需要声明类型”?这并不完全正确。我认为您应该说“您不可能为变量声明类型。”
  • @S.Lott "你不可能为变量声明一个类型"...仍然不正确,因为您可以对some_var = int("1234")...进行类型转换...该行明确设置some_var => @987654325 @
  • @KolobCanyon:这并没有声明some_var 的类型。名称没有类型,它们具有与对象的绑定。对象有类型,名称没有。 “Declare”通常意味着“说这个名字有这个类型”,但即使是some_var = int("1234"),下一行也可以是some_var = "abc",现在这个名字被绑定到一个str类型的对象上。

标签: python boolean


【解决方案1】:
checker = None 

if some_decision:
    checker = True

if checker:
    # some stuff

[编辑]

欲了解更多信息:http://docs.python.org/library/functions.html#bool

您的代码也可以工作,因为1 在必要时会转换为True。 实际上 Python 很长一段时间都没有布尔类型(就像在旧的 C 中一样),一些程序员仍然使用整数而不是布尔类型。

【讨论】:

  • 通常使用 checker=(some_decision) (例如 checker=(a
  • 这个 sn-p 有点误导......你仍然需要在测试之前定义“检查器”。虽然 OP 之前定义了它,但在您的示例中 checker = None 是绝对必要的,否则您将获得 UnboundLocalError
  • Python 布尔值是整数。 TrueFalse 是对扩展 int 对象的引用,并覆盖了 __str____repr__
  • Python 布尔值不是整数; 1 is not True,但 1 == True.
  • @BallpointBen:它们是int 类型实例的常识意义上的整数,如isinstance(True, int) 所示。
【解决方案2】:

布尔内置函数大写:TrueFalse

还请注意,您可以将checker = bool(some_decision) 用作一种简写形式——bool 只会返回TrueFalse

很高兴知道classes defining __nonzero__ or __len__ 将是TrueFalse 以供将来参考,具体取决于这些函数的结果,但几乎所有其他对象的布尔结果都将是TrueNone 除外对象、空序列和数字零)。

【讨论】:

  • 非常感谢您的洞察力。随着大众投票转向另一个答案,我授予巴斯蒂安“接受的答案”。但是你的最有帮助! :)
  • 虚张声势:不接受您认为最有帮助的答案有什么意义?如果另一个答案得到更多支持,这完全无关紧要。
  • 而人气投票也与这个答案有关。考虑改变你的投票。
【解决方案3】:

True ... 和False 显然。

否则,None 的计算结果为 False,整数 0 和浮点数 0.0 也是如此(尽管我不会使用这样的浮点数)。 此外,空列表 []、空连音符号 () 和空字符串 ''"" 评估为 False。

bool()函数自己试试吧:

bool([])
bool(['a value'])
bool('')
bool('A string')
bool(True)  # ;-)
bool(False)
bool(0)
bool(None)
bool(0.0)
bool(1)

等等。

【讨论】:

    【解决方案4】:

    布尔类型在文档中定义:
    http://docs.python.org/library/stdtypes.html#boolean-values

    引自文档:

    布尔值是两个常量对象 False 和 True。它们用于表示真值(尽管其他值也可以被认为是假或真)。在数字上下文中(例如,当用作算术运算符的参数时),它们的行为分别类似于整数 0 和 1。内置函数 bool() 可用于将任何值转换为布尔值,前提是该值可以解释为真值(请参阅上面的真值测试部分)。

    它们分别写为 False 和 True。

    所以在 java 代码中删除大括号,将 true 更改为 True 就可以了 :)

    【讨论】:

      【解决方案5】:

      是的,有一个bool 数据类型(它继承自int,并且只有两个值:TrueFalse)。

      但 Python 对每个对象都有 boolean-able 概念,在调用函数 bool([x]) 时使用。

      查看更多:object.nonzeroboolean-value-of-objects-in-python

      【讨论】:

      • x = bool(0) # false && x = bool(1) # true
      【解决方案6】:

      与声明 boolean flag = True 的 Java 不同,在 Python 中你可以声明 myFlag = True

      Python 会将其解释为布尔变量

      【讨论】:

        【解决方案7】:

        python 中的布尔值是整数的子类。布尔值的构造函数是bool。 bool 类继承自 int 类。

         issubclass(bool,int) // will return True
         isinstance(True,bool) , isinstance(False,bool) //they both True
        

        TrueFalse 是单例对象。它们将在您的应用程序的整个生命周期中保留相同的内存地址。当你输入True 时,python 内存管理器将检查它的地址并拉取值'1'。对于False,它的值为'0'。

        任何布尔表达式与TrueFalse 的比较都可以使用is(身份)或==(相等)运算符来执行。

        int(True) == 1
        int(False) == 0
        

        但请注意,True 和 '1' 不是同一个对象。您可以检查:

         id(True) == id(1) // will return False
        

        你也很容易看到

          True > False // returns true cause 1>0
        

        任何整数运算都可以使用布尔值。

          True + True + True =3 
        

        python 中的所有对象都有一个关联的真值。每个对象都有True 值,除了:

        • 错误

        • 任何数字类型的0(0,0.0,0+0j等)

        • 空序列(列表、元组、字符串)

        • 空映射类型(字典、集合等)

        • 实现__bool____len__ 方法的自定义类返回False0

        python 中的每个类都有由特殊实例方法定义的真值:

         __bool__(self)   OR
         __len__
        

        当你调用bool(x)时,python 会真正执行

         x.__bool__() 
        

        如果实例x没有这个方法,则执行

         x.__len__()
        

        如果不存在,默认值为True

        例如int类我们可以定义bool如下:

          def __bool__(self):
              return self != 0
        

        对于 bool(100),100 !=0 将返回 True。所以

        bool(100) == 真

        您可以轻松检查bool(0) 是否为False。对于 int 类的实例,只有 0 会返回 False。

        另一个例子= bool([1,2,3])

        [1,2,3] 没有定义 __bool__() 方法,但它有 __len__() 并且由于它的长度大于 0,它将返回 True。现在您可以看到为什么空列表返回 False

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-10
          • 1970-01-01
          • 1970-01-01
          • 2017-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-10
          相关资源
          最近更新 更多