您的位置:首页 > 编程语言 > Python开发

python 可迭代对象、迭代器和生成器的关系

2021-10-07 23:29 197 查看
  • Iterable
    : 可迭代对象
  • Iterator
    : 迭代器
  • Generator
    : 生成器

Iterable
: 可迭代对象>
Iterator
: 迭代器>
Generator
: 生成器

可以用下面的代码验证。关于具体的区别点击👉https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640

from typing import Generator, Iterable, Iterator

def createAGenerator(a=100):
"""这是一个生成器函数,用于创建生成器

Args:
a (int): 一个值,用于影响生成器的容量

Returns:
[list]: [while循环结束后,所有i的列表]

Yields:
[int]: [在while循环中的i]
"""
i = 0
arg = []
while i <= a:
arg.append(i)
yield i
i = 1.5 * (i + 1)
return arg

def testCreateAGen(arg=None):
"""检测生成器

Args:
arg ([generator], optional): 一个生成器. Defaults to None.
"""
while True:
try:
i = next(arg)
print(i)
except StopIteration as e:
print(e.value)
break

def testIter(itere=None):
"""检测不同的参数是否为可迭代对象"""
print(
itere,
"\tIterable: ",
isinstance(itere, Iterable),
",Iterator: ",
isinstance(itere, Iterator),
",generator: ",
isinstance(itere, Generator),
)
print("----------------------------")

if __name__ == "__main__":
# 元组和list的属性(可迭代对象)
testIter((12, 32, 34))
testIter([12, 324, 342, 234])
testIter({"name": "suyuesheng", "sex": "man"})
# 迭代器的属性
testIter(iter([13, 23211, 14]))
# 生成器的属性
testIter((x for x in range(100)))
print(type((x for x in range(100))))
print(type(iter([12, 21, 312])))
testIter(createAGenerator())
# 檢測生成器
# print("----------------------------")
testCreateAGen(createAGenerator())
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: