编程语言
首页 > 编程语言> > python-如何将输入视为生成器

python-如何将输入视为生成器

作者:互联网

我正在从一个串行连接(pyserial)中读取行,此刻,我正在使用while循环读取该行,然后对该输入执行一系列功能,然后将其存储在一个对象中(一个测距仪).

已经提到我应该将串行输入视为生成器,因为这是在python中完成的方式.

有人对这个有经验么?
或者至少可以在原则上解释如何实现?
为什么更好?纯粹是为了内存/速度吗?

编辑:

函数在哪里:

at_end()

来自?
我越来越:

AttributeError:“序列”对象没有属性“ at_end”

如果我用

while True:
    yield source.readline()

然后我得到输出.

解决方法:

您可能会看一下Iterator Types.基本上,您实现了一个类:

class SerialReader(object):
    def __init__(self, source):
        super(SerialReader, self).__init__()
        self.source = source

    def next(self):
        """Provide next piece of data from the serial source."""
        # If we have no more data, we have to raise StopIteration exception
        if self.source.at_end():
            raise StopIteration
        else:
            return self.source.read()

    def __iter__(self):
        return self

reader = SerialReader(some_serial_source)

for data in reader:
    do_something_with_data(data)

优点是使用了这样的迭代器/生成器-您可以将其与任何接受迭代器的python方法一起使用:

>列表理解:sample = [serial_reader中数据的数据]
> itertools
>快速简单地转换为列表:list(serial_reader)-将读取所有数据并返回一个列表
> …更多

迭代器是非常Python化的模式,您可以经常见面.许多python库都使用迭代器.

关于内存使用情况:假设您想使用另一个接受数据流的函数来处理源.您不必加载所有源数据,只需将生成器(迭代器)传递给处理函数,即可根据需要读取数据.

标签:input,generator,serial-port,python
来源: https://codeday.me/bug/20191201/2081135.html