Python for循環(huán)的真面目竟是while,如何讓自己自定義的類實(shí)現(xiàn)for循環(huán)
首先從for循環(huán)開始,我們來看一對等效的代碼
易得這段代碼的運(yùn)行結(jié)果為
再來看一段等效的代碼
這段代碼與上面這段代碼等效,由此可知,如果需要讓一個類可以迭代,就需要實(shí)現(xiàn)inter方法,并且這個被inter方法返回的對象要實(shí)現(xiàn)next方法,并在迭代完成所有元素后拋出一個異常。
分析完成后我們就可以自己實(shí)現(xiàn)一個能迭代的類了
現(xiàn)在我們有一個Student類
現(xiàn)在我想通過for循環(huán)獲取Student實(shí)例的id和name,就要先實(shí)現(xiàn)inter方法
這里偷懶了就直接把Student本身作為迭代器,因此Student需要實(shí)現(xiàn)next方法
但是如果現(xiàn)在去用for循環(huán)迭代Student實(shí)例會發(fā)現(xiàn)一直返回none
所以需要在迭代結(jié)束時拋出一個停止迭代的異常
于是最終代碼為
輸出為
標(biāo)簽: