草庐IT

Generator

全部标签

python - Python 中的生成器和 for 循环

所以我有一个生成器函数,看起来像这样。defgenerator():whileTrue:forxinrange(3):forjinrange(5):yieldx在我加载这个函数并多次调用“next”之后,我希望它能够产生值00000111112222200000...但它总是产生0。这是为什么呢?>>>execfile("test.py")>>>generator>>>generator().next()0>>>generator().next()0>>>generator().next()0>>>generator().next()0>>>generator().next()0>>>

python - "max_q_size"中使用的参数 "model.fit_generator"是什么?

我构建了一个简单的生成器,它生成一个tuple(inputs,targets),其中inputs和targets列表中只有单个项目。基本上,它是爬取数据集,一次一个样本项。我将这个生成器传递给:model.fit_generator(my_generator(),nb_epoch=10,samples_per_epoch=1,max_q_size=1#defaultsto10)我明白了:nb_epoch是训练批处理将运行的次数samples_per_epoch是每个epoch训练的样本数但是max_q_size的用途是什么,为什么它会默认为10?我认为使用生成器的目的是将数据集批处理成

python - "max_q_size"中使用的参数 "model.fit_generator"是什么?

我构建了一个简单的生成器,它生成一个tuple(inputs,targets),其中inputs和targets列表中只有单个项目。基本上,它是爬取数据集,一次一个样本项。我将这个生成器传递给:model.fit_generator(my_generator(),nb_epoch=10,samples_per_epoch=1,max_q_size=1#defaultsto10)我明白了:nb_epoch是训练批处理将运行的次数samples_per_epoch是每个epoch训练的样本数但是max_q_size的用途是什么,为什么它会默认为10?我认为使用生成器的目的是将数据集批处理成

python - 获取生成器的子集

我有一个生成器函数,想从中获取前十个项目;我的第一次尝试是:my_generator()[:10]这不起作用,因为生成器不可下标,正如错误告诉我的那样。现在我已经解决了这个问题:list(my_generator())[:10]这很有效,因为它将生成器转换为列表;但是,它效率低下并且破坏了拥有发电机的意义。是否有一些内置的Pythonic等价于生成器的[:10]? 最佳答案 importitertoolsitertools.islice(mygenerator(),10)itertools有许多使用迭代器的实用程序。islice使用

python - 获取生成器的子集

我有一个生成器函数,想从中获取前十个项目;我的第一次尝试是:my_generator()[:10]这不起作用,因为生成器不可下标,正如错误告诉我的那样。现在我已经解决了这个问题:list(my_generator())[:10]这很有效,因为它将生成器转换为列表;但是,它效率低下并且破坏了拥有发电机的意义。是否有一些内置的Pythonic等价于生成器的[:10]? 最佳答案 importitertoolsitertools.islice(mygenerator(),10)itertools有许多使用迭代器的实用程序。islice使用

python - 递归调用返回自身迭代器的对象方法

我目前正在编写一个需要第三方代码的项目,该代码使用返回自身迭代器的方法,这是我的代码中的示例:defgenerate():forxinobj.children():foryinx.children():forziny.children():yieldz.thing目前,这只会使我的代码变得困惑,并且在3个级别之后变得难以阅读。理想情况下,我会让它做这样的事情:x=recursive(obj,method="children",repeat=3).thing在Python中有内置的方法吗? 最佳答案 从python3.3开始,可以使用

python - 递归调用返回自身迭代器的对象方法

我目前正在编写一个需要第三方代码的项目,该代码使用返回自身迭代器的方法,这是我的代码中的示例:defgenerate():forxinobj.children():foryinx.children():forziny.children():yieldz.thing目前,这只会使我的代码变得困惑,并且在3个级别之后变得难以阅读。理想情况下,我会让它做这样的事情:x=recursive(obj,method="children",repeat=3).thing在Python中有内置的方法吗? 最佳答案 从python3.3开始,可以使用

python - 从流中产生的正确方法是什么?

我有一个Connection类型,用于包装来自asyncio的读/写流对。classConnection(object):def__init__(self,stream_in,stream_out):self._streams_=(stream_in,stream_out)defread(self,n_bytes:int=-1):stream=self._streams_[0]returnstream.read(n_bytes)defwrite(self,bytes_:bytes):stream=self._streams_[1]stream.write(bytes_)yieldfro

python - 从流中产生的正确方法是什么?

我有一个Connection类型,用于包装来自asyncio的读/写流对。classConnection(object):def__init__(self,stream_in,stream_out):self._streams_=(stream_in,stream_out)defread(self,n_bytes:int=-1):stream=self._streams_[0]returnstream.read(n_bytes)defwrite(self,bytes_:bytes):stream=self._streams_[1]stream.write(bytes_)yieldfro

python - 大数据多处理

我正在使用multiprocessing.Pool()来并行化一些繁重的计算。目标函数返回大量数据(一个巨大的列表)。我的内存快用完了。如果没有multiprocessing,我只需将目标函数更改为生成器,通过yield在计算结果元素时一个接一个地处理。我知道多处理不支持生成器——它会等待整个输出并立即返回,对吗?没有屈服。有没有办法让Pool工作人员在可用时立即生成数据,而无需在RAM中构建整个结果数组?简单示例:deftarget_fnc(arg):result=[]foriinxrange(1000000):result.append('dvsdbdfbngd')#这是Pytho