【问题标题】:Empty String Boolean Logic空字符串布尔逻辑
【发布时间】:2016-07-01 00:22:29
【问题描述】:

我只是偶然发现了这个,我找不到足够的答案:

x = ""

为什么会这样:

x == True
False

x == False
False

x != True
True

x != False
True

我是否应该得出结论,x 既不是True 也不是False?

【问题讨论】:

  • 什么?!您将得出结论,x 不等于 True 或False。你为什么认为会这样?你有没有被docs.python.org/2/library/stdtypes.html#truth-value-testing弄糊涂了?它仍然会在布尔上下文中评估 false-y:if x:、bool(x) 等。
  • 博士。重言式,我认为您要测试的是bool(x) == False。不过,用户名签出。
  • 现在看看如果你设置x=0,你的测试会发生什么。然后用x=1 做同样的事情。
  • @PM2Ring 在 stackoverflow 上问一个不好的问题,它会毁了你的一天。FML
  • 嘿,这还不错。当然,它的净得分为零,但您从中赢得了一些代表点,并且您得到了一些好的答案。但是,是的,这是相当基本的信息,在官方文档中并不难找到。

标签: python string boolean


【解决方案1】:

检查 x 是真还是假:

bool("")
> False

bool("x")
> True

有关is 和== 语义的详细信息,请参阅this question

【讨论】:

    【解决方案2】:

    在 python '==' 中测试相等性。空字符串不等于True,所以你比较的结果是False。

    您可以通过将空字符串传递给 bool 函数来确定空字符串的“真实性”:

    >>> x = ''
    >>> bool(x)
    False
    

    【讨论】:

      【解决方案3】:

      在布尔上下文中,空/空字符串为假(Falsy)。如果你使用

      testString = ""
      
      if not testString:
          print("NULL String")
      else:
          print(testString)
      

      正如snakecharmerb所说,如果你将字符串传递给 bool() 函数,它将返回 True 或 False

      >>> testString = ""
      >>> bool(testString)
          False
      
      >>> testString = "Not an empty string"
      >>> bool(testString)
          True
      

      查看关于真值测试的文档以了解更多信息:

      Python 2:

      https://docs.python.org/2/library/stdtypes.html#truth-value-testing

      Python 3:

      https://docs.python.org/3/library/stdtypes.html#truth-value-testing

      【讨论】:

        【解决方案4】:

        我是否应该得出 x 既不是真也不是假的结论?

        没错。 x 既不是True 也不是False,而是""。区别从类型开始:

        >>> print(type(""), type("x"), type(True), type(False))
        builtins.str, builtins.str, builtins.bool, builtins.bool
        

        Python 是一种高度面向对象的语言。因此,字符串是对象。 python 的好处是它们可以为if x: print("yes") 提供布尔表示,例如。 g.. 对于字符串,此表示为 len(x)!=0。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-10
          • 1970-01-01
          • 2020-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多