可迭代對象:能夠重複取值,而且每一次的取值都是在上一次的結果之上而來的。凡是內部有_iter_()方法的都是可迭代對象。spa
迭代器對象:經過序列類型._iter_(),獲得返回值就是迭代器對象。code
迭代取值方式:
print(迭代器對象._next_())對象
for循環內部原理:
for item in 可迭代對象:
print itemblog
#重複迭代,每一次迭代的結果都是基於上一次的結果而來的 #可迭代對象:str, list, tuple, set, dict, f文件 # str = 'hello world' # list = [1,2,3] # tuple = (4,5,6) # dict = {'name':'nick','age':18} # set = {7,8,9} # f = open('a.txt','r',encoding='utf-8') #str 示範 # str_iter = str.__iter__() #經過str._iter_()獲取迭代器對象str_iter # print(str_iter.__next__()) #經過迭代器對象str_iter._next_()獲取值 # print(str_iter.__next__()) # print(str_iter.__next__()) #由於上述作法都是重複,可寫成循環 #循環版本 #str_iter = str.__iter__() # while True: # print(str_iter.__next__()) #雖然能夠循環了,可是取完最後一個值後報錯:StopIteration #解決辦法 # str_iter = str.__iter__() # while True: # try: #經過關鍵字try一直嘗試,捕獲異常 # print(str_iter.__next__()) # except StopIteration: #直到遇到StopIteration # break #就停下來 #for循環版本 # for item in f: # print(item) #可迭代對象是迭代器對象嗎? # str_iter = str.__iter__() # print((str_iter is str)) #False 結論:可迭代對象不必定是迭代器對象 # list_iter = list.__iter__() # print((list_iter is list)) #False 結論:可迭代對象不必定是迭代器對象 # tuple_iter = tuple.__iter__() # print((tuple_iter is tuple)) #False 結論:可迭代對象不必定是迭代器對象 # set_iter = set.__iter__() # print((set_iter is set)) #False 結論:可迭代對象不必定是迭代器對象 # dict_iter = dict.__iter__() # print((dict_iter is dict)) #False 結論:可迭代對象不必定是迭代器對象 # f_iter = f.__iter__() # print((f_iter is f)) #True 文件比較特殊,它既是可迭代對象,又能夠是迭代器對象 #迭代器對象也是一個可迭代對象 # str_iter = str.__iter__() # print(