我是Python新手。我有一個開頭方法:爲什麼我在Python中找不到`len(list)`?
def foo(self, list):
length = len(list)
我在其他情況下,所謂的len()
成功,但在這裏我得到:
TypeError: object of type 'type' has no len()
如何說服Python的這個對象傳入是一個列表?我錯過了什麼?
我是Python新手。我有一個開頭方法:爲什麼我在Python中找不到`len(list)`?
def foo(self, list):
length = len(list)
我在其他情況下,所謂的len()
成功,但在這裏我得到:
TypeError: object of type 'type' has no len()
如何說服Python的這個對象傳入是一個列表?我錯過了什麼?
因爲list
是列表類型的名稱。
使用不同的名稱。
def foo(self, lst):
length = len(lst)
並確保你不叫foo
這樣的:
Foo.foo(list)
這沒有意義,也不會導致問題。一個參數或變量可以有任何名稱,即使是一個影響內建的名稱,它也不會神奇地引用內建而不是實際的值。 – 2010-03-09 12:52:13
也許它在編輯之後變得更有意義,但我認爲KennyTM也在說要確保不要調用通過名爲「list」的方法(除非它也被覆蓋爲意味着別的東西)。 我認爲我們大多數人會同意,當你學習一門語言時,使用相同的名字作爲內建函數是一個萬無一失的方法,可能會遇到問題和困惑。作爲一種最佳實踐,編碼者應該避免這種情況,除非他們真的打算覆蓋/隱藏內建(這很罕見)。 – Matthew 2010-03-09 14:45:17
看起來像你打電話type()
list
這是一種類型本身。不要將名稱list
用於列表,因爲它已經是內置類型。使用L
或mylist
或其他什麼,它應該工作。
你遮蔽內置。您傳遞給foo
方法的值不是一個列表對象,而是一個list
類型,它沒有任何長度。
我無法重現此錯誤。我不明白爲什麼它不應該工作。當然你的'list'參數會影響'list'類型,但是你仍然可以調用'len'。你可以提供一個最小的列表,將失敗,並出現該錯誤? – 2010-03-09 11:40:15
對不起,沒時間了。我把名字改爲'lst',它起作用。 – 2010-03-09 12:30:23
-1:「對不起,沒有時間」。您無法提供足夠的信息來幫助我們?抱歉,我們不能提供更多幫助,但沒有更多信息,我們只是猜測。 – 2010-03-09 15:25:37