2011-09-19 54 views
3

heapify返回NoneType

b = heapify([5,4,9,1]) 

,如果我做了

type(b) 

它說,它是不是列表類型NoneType,任何人都知道我在做什麼錯?

+0

使用'l'作爲變量名通常被認爲是不好的樣式,因爲根據字體它很容易被誤認爲是'1'或'I'。 – agf

回答

5

heapify()方法就地轉換列表。這意味着它會改變列表,但不會返回修改後的列表。正如下文所述,heapify()返回None以保護您免受此錯誤。因此,如果你做

lst = [5,4,9,1] 
heapify(lst) 
type(lst) 

,你會看到lst現在heapified。有關更多信息,請參閱library reference

+2

值得補充的是,所有(或者幾乎所有)採取行動的Python方法都會返回None,所以當你不打算的時候,你不會意外地使用就地方法。 – agf

+0

Alex Martelli自己在這裏解釋得很好:http://stackoverflow.com/questions/1682567/why-does-pythons-list-append-evaluate-to-false – steveha

+0

你會從每一個沒有'明確地返回一個值。例如'def f():pass'。 – etuardu

1

heapify改變傳遞給它的列表;就像l.sort()一樣。

>>> import heapq 
>>> l = [9, 8, 7, 6] 
>>> heapq.heapify(l) 
>>> l 
[6, 8, 7, 9]