草庐IT

sched_yield

全部标签

python - "yield item"与 return iter(items) 相比有什么优势?

在下面的示例中,resp.results是一个迭代器。版本1:items=[]forresultinresp.results:item=process(result)items.append(item)returniter(items)版本2:forresultinresp.results:yieldprocess(result)在性能/内存节省方面,在版本1中返回iter(items)是否比简单地返回项目更好/更差?在“PythonCookbook”中,Alex说显式iter()“更灵活但不常使用”,但是返回iter(items)与版本2中的yield的优缺点是什么?此外,对迭代器和

Python 3.3 的 yield 来自

Python3带来了yieldfrom语义。据我所知,它应该屈服于最外层的生成器,在这种情况下,我希望这段代码在N中是线性的。fromcollectionsimportIterabledefflatten(L):foreinL:ifisinstance(e,Iterable):yieldfromflatten(e)else:yieldeN=100L=[-1]foriinrange(N):L=[i,[L],i]foriinrange(100):f=list(flatten(L))print(len(f))如果我设置N=200但是计算时间大约长四倍,这表明flatten是L长度的二次方。我

python - 没有 Yield 的上下文管理器

我能否有一个偶尔不产生的上下文管理器,在这种情况下,with语句中的代码根本不会执行?importcontextlib@contextlib.contextmanagerdefMayNotYield(to_yield):ifto_yield:yieldwithMayNotYield(True):print'Thisworks.'withMayNotYield(False):print'Thiserrors.'我可以要求用户用try-catch包装with语句,但这不是首选。我也可以执行以下操作,但它也很丑陋。importcontextlib@contextlib.contextmana

python - 可使用 yield 或 __next__() 迭代

我正在研究制作可迭代对象,我想知道这两个选项中的哪一个更像pythonic/更好的方法,是没有区别还是我对使用yield的想法有误?对我来说,使用yield似乎更干净,而且显然它比使用__next__()更快,但我不确定。classiterable_class():def__init__(self,n):self.i=0self.n=ndef__iter__(self):returnselfdef__next__(self):ifself.i使用yield:classiterable_class_with_generator():def__init__(self,n):self.i=0

python - 为什么 yield 生成的生成器比 xrange 生成的生成器快?

我正在研究Python生成器并决定进行一个小实验。TOTAL=100000000defmy_sequence():i=0whilei内存使用(使用psutil获取进程RSS内存)和所用时间(使用time.time())在每个方法运行几次并取平均值后如下所示:sequence_of_values=my_sequence()#Memoryusage:6782976BTimetaken:9.53674e-07ssequence_of_values2=my_xrange()#Memoryusage:6774784BTimetaken:2.14576e-06slist_of_values=my_

python - 为什么 __next__() 内部的 yield 会返回生成器对象?

我正在使用yield在我的类中的__next__()函数中返回下一个值。但是它不返回下一个值,它返回生成器对象。我正在尝试更好地理解迭代器和yield。我可能做错了。看看。classMyString:def__init__(self,s):self.s=sdef__iter__(self):returnselfdef__next__(self):foriinrange(len(self.s)):yield(self.s[i])r=MyString("abc")i=iter(r)print(next(i))返回:生成器对象__next__位于0x032C05A0

python - 'yield all the output from a generator' 有简写吗?

是否有单行表达式:forthingingenerator:yieldthing我试过yieldgenerator没有用。 最佳答案 在Python3.3+中,您可以使用yieldfrom.例如,>>>defget_squares():...yieldfrom(num**2fornuminrange(10))...>>>list(get_squares())[0,1,4,9,16,25,36,49,64,81]它实际上可以与任何可迭代对象一起使用。例如,>>>defget_numbers():...yieldfromrange(10)

python - asyncio yield from concurrent.futures.Future 执行者

我有一个long_task函数,它运行大量cpu绑定(bind)计算,我想通过使用新的asyncio框架使其异步。生成的long_task_async函数使用ProcessPoolExecutor将工作卸载到不同的进程,从而不受GIL的约束。问题在于,出于某种原因,从ProcessPoolExecutor.submit返回的concurrent.futures.Future实例在产生时会抛出一个TypeError。这是设计使然吗?这些future与asyncio.Future类不兼容吗?有什么解决方法?我还注意到生成器不可picklable,因此将协程提交给ProcessPoolExe

python - `yield from foo()` 和 `for x in foo(): yield x` 之间的区别

在Python中,大多数yieldfrom的例子都是这样解释的yieldfromfoo()类似于forxinfoo():yieldx另一方面,它似乎并不完全相同,并且有一些魔法。我对使用一个我不理解的魔法函数感到有点不安。关于yieldfrom的魔力,我需要知道什么才能避免发生我意想不到的事情?魔术提供了哪些优势,我应该知道? 最佳答案 当foo()返回一个常规的可迭代对象,两者是等价的。当foo()时,“魔法”开始发挥作用。也是一个生成器。在那一刻,yieldfromfoo()和forxinfoo():yieldx情况大不相同。生

python - yield_per 期间出现 sqlalchemy 游标错误

我收到以下错误:Traceback(mostrecentcalllast):main()foriteminsession.query(Item).yield_per(10):fetch=cursor.fetchmany(self._yield_per)self.cursor,self.context)l=self.process_rows(self._fetchmany_impl(size))row=self._fetchone_impl()self.__buffer_rows()self.__rowbuffer=collections.deque(self.cursor.fetchm