1. 程式人生 > 程式設計 >Python 迭代,for...in遍歷,迭代原理與應用示例

Python 迭代,for...in遍歷,迭代原理與應用示例

本文例項講述了Python 迭代,for...in遍歷,迭代原理與應用。分享給大家供大家參考,具體如下:

迭代是訪問集合元素的一種方式。什麼時候訪問元素,什麼時候再迭代,比一次性取出集合中的所有元素要節約記憶體。特別是訪問大的集合時,用迭代的方式訪問,比一次性把集合都讀到記憶體要節省資源。

demo.py(迭代,遍歷):

import time
from collections import Iterable
from collections import Iterator
# 有__iter__方法的類是Iterable(可迭代的)。
# 既有__iter__方法又有__next__方法是Iterator(迭代器)。
class Classmate(object):
  def __init__(self):
    self.names = list()
    self.current_num = 0
  def add(self,name):
    self.names.append(name)
  def __iter__(self):
    """Iterable物件必須實現__iter__方法"""
    return self # __iter__方法必須返回一個Iterator(既有__iter__方法,又有__next__方法)
  # __next__的返回值就是for迴圈遍歷出的變數值
  def __next__(self):
    if self.current_num < len(self.names):
      ret = self.names[self.current_num]
      self.current_num += 1
      return ret
    else:
      raise StopIteration # 丟擲StopIteration異常時,for遍歷會停止迭代
classmate = Classmate()
classmate.add("老王")
classmate.add("王二")
classmate.add("張三")
# print("判斷classmate是否是可以迭代的物件:",isinstance(classmate,Iterable))
# classmate_iterator = iter(classmate) # iter()會呼叫物件的__iter__方法
# print("判斷classmate_iterator是否是迭代器:",isinstance(classmate_iterator,Iterator))
# print(next(classmate_iterator))  # next()會呼叫物件的__next__方法
for name in classmate: # 遍歷時會先呼叫classmate的__iter__方法(必須返回Iterator物件)。
  print(name)  # 遍歷出的name就是返回的Iterator物件的__next__方法的返回值
  time.sleep(1) # 當__next__丟擲StopIteration異常時,for遍歷會停止迭代

執行結果:

老王
王二
張三

demo.py(迭代的應用):

li = list(可迭代物件) # 將可迭代物件轉換成list型別。 底層就是通過迭代實現的。
print(li)
tp = tuple(可迭代物件) # 將可迭代物件轉換成tuple型別。
print(tp)
# for ... in 可迭代物件 # for遍歷也是通過迭代實現的

如上例改寫如下:

示例1:

class Classmate(object):
  def __init__(self):
    self.names = list()
    self.current_num = 0
  def add(self,for遍歷會停止迭代
classmate = Classmate()
classmate.add("老王")
classmate.add("王二")
classmate.add("張三")
li = list(classmate)  # 將可迭代物件轉換成list型別。 底層就是通過迭代實現的。
print(li)

輸出:

['老王','王二','張三']

示例2:

class Classmate(object):
  def __init__(self):
    self.names = list()
    self.current_num = 0
  def add(self,for遍歷會停止迭代
classmate = Classmate()
classmate.add("老王")
classmate.add("王二")
classmate.add("張三")
tp = tuple(classmate)  # 將可迭代物件轉換成tuple型別。
print(tp)

輸出:

('老王','張三')

更多關於Python相關內容可檢視本站專題:《Python資料結構與演算法教程》、《Python Socket程式設計技巧總結》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》及《Python入門與進階經典教程》

希望本文所述對大家Python程式設計有所幫助。