【问题标题】:Check if object is a number or boolean检查对象是数字还是布尔值
【发布时间】:2013-02-22 08:28:31
【问题描述】:

设计一个等价于以下语句的逻辑表达式:

x是三五个元素的列表,其中第二个元素是 字符串'Hip',其中第一个不是数字或布尔值。

我有什么:

x = ['Head', 'Hip', 10]
print x[1] is 'Hip'

我的问题:如何检查它是布尔值还是数字?

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    我想说的最简单:

    type(x) == type(True)
    

    【讨论】:

    • 有点hacky但没有导入,所以+1
    • 可以直接type(x) is bool?
    • 使用type创建pylint消息:C0123: Using type() instead of isinstance() for a typecheck. (unidiomatic-typecheck)正确答案需要被接受
    【解决方案2】:

    在 python3 中,这将是:type(x)==bool 参见 example

    【讨论】:

    • 我的两者都适用。逻辑也主要与语言无关。
    【解决方案3】:

    回答具体问题:

    isinstance(x[0], (int, float))
    

    这会检查 x[0] 是否是元组 (int, float) 中任何类型的实例。

    您也可以在其中添加bool,但这不是必需的,因为bool 本身就是int 的子类。

    文档参考:


    要评论您当前的代码,您不应依赖interning of short strings。您应该使用== 运算符比较字符串:

    x[1] == 'Hip'
    

    【讨论】:

      【解决方案4】:

      Python 2

      import types
      
      x = False
      print(type(x) == types.BooleanType) # True
      

      Python 3

      # No need to import types module
      x = False
      print(type(x) == bool) # True
      

      【讨论】:

      【解决方案5】:

      我喜欢保持简单易读.. 这将接受 bool、string、number 并将其读入 bool

      def var2bool(v):
      if type(v) == type(True):
          res = v
      elif type(v) == type(0):
          if v == 0:
              res = False
          else:
              res = True
      elif v.lower() in ("yes", "true", "t", "1"):
          res = True
      else:
          res = False
      return res
      

      【讨论】:

        【解决方案6】:

        您应该将x 的类型与bool 类进行比较:

        type(x) == bool
        

        或:

        type(x) == type(True)
        

        这里有更多关于type method

        来自Data model docs

        布尔值(布尔值)

        这些代表真值 False 和 True。表示值 False 和 True 的两个对象是唯一的布尔对象。布尔类型是整数类型的子类型,布尔值在几乎所有上下文中的行为分别类似于值 0 和 1,但转换为字符串时返回字符串“False”或“True”的例外情况,分别。

        【讨论】:

          【解决方案7】:

          我按照最近的回答谁告诉使用type,根据pylint验证,这似乎是不正确的方式:

          我收到了消息:

          C0123:使用 type() 而不是 isinstance() 进行类型检查。 (unidiomatic-typecheck)

          即使这是一个旧答案,正确的答案也是@Lev Levitsky 的公认答案:

          isinstance(x[0], (int, float))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-12-31
            • 2011-04-06
            • 2011-06-02
            • 2011-03-02
            • 1970-01-01
            • 2021-12-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多