欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

python返回迭代器和返回列表有什么區別?

夏志豪2年前14瀏覽0評論

Python中生成器能做到迭代器能做的所有事,而且因為自動創建了__iter__()和next()方法,生成器顯得特別簡潔,而且生成器也是高效的,使用生成器表達式取代列表解析,同時節省內存。除了創建和保持程序狀態的自動生成,當發生器終結時,還會自動跑出StopIterration異常。

列表、元組、字典、字符串都是可迭代對象。

數字、布爾值都是不可迭代的。

下面分別來說說這兩者的具體區別:

1、迭代器

迭代器對象要求支持迭代器協議的對象。在Python中,支持迭代器協議就是實現對象的__iter__()和next()方法。其中__iter__()方法返回迭代器對象本身;next()方法返回容器的下一個元素,在結尾時引發StopIteration異常。

下面用個簡單的列表來說迭代器的用法:

看完上面代碼,我想很多人納悶列表怎么可以有一個迭代器。由于面試題篇幅有限,大家如果想了解可迭代對象怎么可以獲取迭代器呢?

2、生成器

生成器(generator)就是一個函數,它提供了一種實現迭代器協議的便捷方式。生成器與普通函數的區別在于它包含yield表達式,并且不需要定義__iter__()和__next__()。

生成器是一種惰性的序列,如果我們需要創建一個0~1000000000的序列,這樣大的序列創建出來會占用比較多的內存,生成器就是為了解決這樣的問題。

下面用個簡單的例子來說生成器的用法:

如果對于有不認同的意見,大家可以在關注我指出和補充,歡迎留言。