python基础十一之迭代器和生成器
生活随笔
收集整理的這篇文章主要介紹了
python基础十一之迭代器和生成器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
可迭代
內置方法中含有__iter__的數據類型都是可迭代的,只要是可迭代的就可以使用for循環,反之亦然。
print(dir('')) # dir()函數可以獲取當前數據類型的所有內置方法 返回值是list print('__iter__' in dir([])) # 判斷是否含有__iter__內置方法?
迭代器
內置方法中含有__iter__和__next__的都是迭代器,所以迭代器一定是可迭代的
# 一個可迭代的對象調用__iter__()之后會返回一個迭代器 print(type([].__iter__())) # <class 'list_iterator'>迭代器可以使用__next__()方法一個一個去獲取值
li = [1, 2, 3, 4, 5] iterator = li.__iter__() print(iterator.__next__()) # 1 print(iterator.__next__()) # 2 print(iterator.__next__()) # 3?
迭代器的好處:
從容器內一一取值,可以取出全部內容
節省內存空間:每次取值時才在內存中生成一個值
?
迭代器和可迭代判斷方法
from collections import Iterator from collections import Iterable print(isinstance([], Iterator)) # Iterator 迭代器 print(isinstance([], Iterable)) # Iterable 可迭代?
?
生成器
生成器是含有yield關鍵字的迭代器。
# 定義 """def generator():函數體yield 返回值 """調用生成器后返回的是一個生成器。
def generator():print('生成器')yield 'zxc'return 'a' # 生成器中yield和return能同時存在,return在yield后面定義沒有任何意義, # return在yield前面定義將無法執行yield,也就不在是生成器了 ret = generator() print(type(ret)) # <class 'generator'>?
轉載于:https://www.cnblogs.com/zxc-Weblog/p/8179123.html
總結
以上是生活随笔為你收集整理的python基础十一之迭代器和生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业标准有效期是几年?
- 下一篇: Python 基础函数