2012-10-02 39 views
1

在蟒蛇它是有效的,使建筑,如:为什么函数对象在python中评估为True?

def a(): 
    return 0 

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

我要问什么是一个函数指针进行评估,以真正的逻辑。

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

+0

你可以发布更多的上下文吗?在其他地方定义了“a”吗? – unutbu

+0

本页面出于您可能希望使用此功能的某些原因:http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/boolean。html – aganders3

+0

与任何编程语言相同......任何不评估为false的东西都会评估为true ...评估为false的东西比枚举更容易(0,False,None,[],“”等等) –

回答

10

很多东西在Python中以True评估。从documentation on Boolean operators

在布尔运算的情况下,以及当表达式通过控制流语句中,以下值解释为假:FalseNone,所有类型的数字零,空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。所有其他值都被解释为true。在Python

功能,像这么多的东西,是对象,而不是空的。因此,在布尔上下文中,它们评估为True。

+0

+1引用文档 –

+0

@MagnusHoff:感谢您的纠正;没有注意到哈希碎片丢失了,这当然是我的意图。 –

1

,在蟒蛇是假的对象列表:

  • None
  • []
  • {}
  • empty set
  • empty frozenset
  • False
  • 0
  • 0.0
  • 0L
  • 0j
  • defaultdict
  • Classes已实施__nonzero__()方法和一个返回值falsy否则 __len__()被调用。在蟒蛇3x __bool__()取代__nonzero__()
+3

和0.0。和0j。和0L。或者长度为0,或者它的__nonzero __()方法返回False。 –

+0

空集 - 和空的frozenset和空的defaultdict和... –

+0

你应该添加'__len __()',因为它没有定义'__nonzero __()'时被评估。还要注意'__bool __()'代替Python 3.x中的__nonzero __()' – moooeeeep

2

评估“真实性”的规则在Truth Value Testing的Python文档章节中。特别

注意

所有其他值被认为是真实的 - 这么多种类的对象 总是如此。

总之;函数对象始终为真。