2012-10-02 40 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文檔章節中。特別

注意

所有其他值被認爲是真實的 - 這麼多種類的對象 總是如此。

總之;函數對象始終爲真。