黄哥Python:如何判断一个对象是生成器还是迭代器?

351 阅读1分钟
原文链接: zhuanlan.zhihu.com

有网友问,如何判断一个对象是生成器还是迭代器?

如何查看Python对象的属性是迭代器还是生成器?www.zhihu.com图标


1、如何判断一个对象是生成器,可以用下面的函数

'''
黄哥Python培训 黄哥所写
Python 3 qq:1465376564

'''


def isgenerator(iterable):
    return hasattr(iterable,'__iter__') and not hasattr(iterable,'__len__')



def foo():
    yield 1
    yield 2


p = zip([1, 2, 3], ["Python", "Go", "Java"])

print(isgenerator(foo()))
print(isgenerator((i for i in range(10))))
print(isgenerator((i for i in range(10))))
print(isgenerator(p))

2、如何判断一个对象是迭代器。

'''
黄哥Python培训 黄哥所写
Python 3 qq:1465376564

'''
from typing import Iterable



class Reverse:
    """Iterator for looping over a sequence backwards."""
    def __init__(self, data):
        self.data = data
        self.index = len(data)

    def __iter__(self):
        return self

    def __next__(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]


s = "Hello 黄哥Python"
p = range(10)

print(isinstance(s, Iterable))
print(isinstance(p, Iterable))
print(isinstance(Reverse([1, 2, 3, 4]), Iterable))
黄哥:黄哥Python培训是这样训练学员的zhuanlan.zhihu.com图标