当前位置: 首页 > 面试题库 >

为什么函数对象在python中评估为True?

屠昌胤
2023-03-14
问题内容

在python中进行如下构造是有效的:

def a(): 
    return 0

if a: 
    print "Function object was considered True"
else:  
    print "Function object was considered False"

我想问一个函数指针被评估为True的逻辑是什么。

为什么在语言中插入这种构造?


问题答案:

True在Python中有很多评估结果。从关于布尔运算符的文档中:

在布尔运算的上下文中,以及当控制流语句使用表达式时,以下值将解释为false:False,,None所有类型的数字零以及空字符串和容器(包括字符串,元组,列表,字典,集合和Frozensets)。所有其他值均解释为true。

像很多东西一样,Python中的函数是 对象 ,而不是空的。因此,在布尔上下文中,它们的值为True。



 类似资料:
  • 问题内容: 为什么用Python生成? 我在这里阅读以下内容: 如果两个字符串文字相等,则将它们放在相同的内存位置。字符串是不可变的实体。不会造成伤害。 那么每个Python字符串在内存中只有一个位置吗?听起来很奇怪。这里发生了什么? 问题答案: Python(例如Java,C,C ++ 、. NET)使用字符串池/内联。解释器意识到“ hello”与“ hello”相同,因此它优化并使用了内存中

  • 问题内容: 对于我确定的人来说,这是一个简单的答案。有人可以解释为什么此表达式的值为真吗? 问题答案: 因为您使用的是==(相似性)运算符,而PHP将字符串强制为int。 要解决此问题,请使用===(等于)运算符,该运算符不仅会检查值是否相同,还会检查数据类型是否相同,因此“ 123”字符串和123 int不会被视为相等。

  • 问题内容: 我真的不明白这是如何解析的。为什么第二个示例返回False? 谢谢你的帮助。我想我一定会错过一些非常明显的东西。 我认为这与链接重复项有细微不同: 为什么表达式0 <0 == 0在Python中返回False? 。 这两个问题都与人类对表达的理解有关。在我看来,似乎有两种评估表达方式的方法。当然,两者都不正确,但是在我的示例中,最后的解释是不可能的。 看着您可以想象每个被评估的部分都可

  • 问题内容: 在SQL Server中,如果 在where子句中,则其总值为false。这是违反直觉的,并导致了我很多错误。我确实了解和关键字是正确的方法。但是,为什么SQL Server会以这种方式表现呢? 问题答案: 在这种情况下,请将null视为“未知”(或“不存在”)。在这两种情况下,您都不能说它们相等,因为您不知道它们的价值。因此,null = null的计算结果不为true(false或

  • 问题内容: 我遇到了这个表达式,我认为应该评估为True,但事实并非如此。 上面的语句按预期工作,但在以下情况下: 执行后,其结果为False。 我尝试搜索答案,但无法获得具体答案。谁能帮助我了解这种行为? 问题答案: 是一个运营商链,就像您 要做到这一点,您需要 和 都是如此。后者是错误的,因此是结果。添加括号不会再使运算符链接(某些运算符在括号中),这可以解释工作原理。 尝试: 再一次,一个很

  • 问题内容: 我很难理解算法中问题的根本原因。然后,通过逐步简化函数,我发现Python中对默认参数的求值行为不符合我的预期。 代码如下: 问题是,如果未显式给出属性,则Node类的每个实例都共享相同的属性,例如: 我不了解此设计决定的逻辑吗?为什么Python设计人员决定在定义时评估默认参数?这对我来说似乎很违反直觉。 问题答案: 另一种选择是重量级的-将“默认参数值”存储为函数对象的“ thun