草庐IT

yield_per

全部标签

python - 为什么 yield 函数在 Python 中不需要括号?

在Python中,我多次看到用于创建生成器的yield函数。这个函数和print函数在技术上都执行方法的操作,因为它们返回一个值。然而,在从Python2到Python3的转换过程中,print函数像普通方法调用一样获得了括号,但yield保持不变。此外,yield获得保留关键字的淡黄色,而print是保留方法的紫色。为什么yield不被视为一种方法并以这种方式着色而不使用括号语法?(同理,为什么return也没有括号?)让我再补充一些东西,yield和continue在许多其他语言中也没有括号。我只是想知道是什么让它与众不同,而不是保留。还有许多其他的保留方法,它们有括号。

python - 生成器表达式 vs yield : Why isn't 'next()' working?

我知道我一定遗漏了一些简单的东西,但我没有看到。如果我有这样的生成器表达式:>>>serializer=(snforsninxrange(0,sys.maxint))我可以像这样轻松生成单个整数:>>>serializer.next()0>>>serializer.next()1>>>serializer.next()2如果我这样写一个生成器:>>>defser():...forsninxrange(0,100000):...yieldsn这不是布埃诺:>>>ser().next()0>>>ser().next()0>>>ser().next()0???我错过了什么???

python - 将 Python 生成器函数推进到第一次 yield 之前

这个问题在这里已经有了答案:HowcanIruntheinitializationcodeforageneratorfunctionimmediately,ratherthanatthefirstcall?(5个答案)关闭6年前。当您实例化一个生成器函数时,它不会执行任何代码,直到您对其调用next。这意味着如果生成器函数包含某种初始化代码,它将在迭代之前不会执行。考虑这个例子:defgenerator(filename):withopen(filename)asf:data=f.read()whileTrue:yielddatagen=generator('/tmp/some_fil

python - 两个连续的 yield 语句如何在 python 中工作?

这个问题在这里已经有了答案:Whatdoesthe"yield"keyworddo?(51个答案)关闭上个月。我从pymotw.com中偶然发现了这段代码在合并和拆分部分。fromitertoolsimport*defmake_iterables_to_chain():yield[1,2,3]yield['a','b','c']foriinchain.from_iterable(make_iterables_to_chain()):print(i,end='')print()我不明白make_iterables_to_chain()是如何工作的。它包含两个yield语句,它是如何工作的

python - 当 Python yield 语句没有表达式时会发生什么?

我是一名试图理解一些Python代码的C#程序员。有问题的代码是一个生成器函数,看起来像这样:deffunc():oldValue=curValueyieldcurValue=oldValue如果我理解正确,这将生成一个包含一个成员的可迭代序列。但是,yield语句后没有表达式。这样一个没有表达式的语句应该产生什么?有没有使用这种编码方式的Python习语? 最佳答案 它将产生None;就像一个空的return表达式会:>>>deffunc():...yield...>>>f=func()>>>next(f)isNoneTrue您可

python - 将 yield 与多个 ndb.get_multi_async 一起使用

我正在尝试提高我当前从应用引擎数据存储区查询的效率。目前,我使用的是同步方法:classHospital(ndb.Model):name=ndb.StringProperty()buildings=ndb.KeyProperty(kind=Building,repeated=True)classBuilding(ndb.Model):name=ndb.StringProperty()rooms=ndb.KeyProperty(kind=Room,repeated=True)classRoom(ndb.Model):name=ndb.StringProperty()beds=ndb.Ke

python - 在 Python 中有类似于 Java 的 Thread.yield() 的东西吗?这有意义吗?

我想告诉我的Python线程让步,从而避免不必要地占用CPU。在Java中,您可以使用Thread.yield()函数来实现。我认为Python中没有类似的东西,所以我一直在使用time.sleep(t),其中t=0.00001。对于t=0似乎没有效果。我认为也许我对Python的线程模型有一些不正确的理解,因此缺少thread.yield()的原因。有人可以向我澄清这一点吗?谢谢!PS:Java的Thread.yield()的文档是这样说的:Causesthecurrentlyexecutingthreadobjecttotemporarilypauseandallowotherth

python - 理解 : multiple values per iteration

有没有办法在列表/字典/集合理解中每次迭代输出两个(或更多)项目?举个简单的例子,输出1到3整数的所有正负double值(即{x|x=±2n,n∈{1...3}}),是否有类似下面的语法?>>>[2*i,-2*iforiinrange(1,4)][2,-2,4,-4,6,-6]我知道我可以输出(+i,-i)的元组并将其展平,但我想知道是否有任何方法可以使用单一理解完全解决问题。目前,我正在生成两个列表并将它们连接起来(这有效,前提是顺序不重要):>>>[2*iforiinrange(1,4)]+[-2*iforiinrange(1,4)][2,4,6,-2,-4,-6]

python - python 3.3.2+ 中的 yield from 和 yield 之间有什么区别

在python3.3.2+之后python支持创建生成器函数的新语法yieldfrom我已经通过快速尝试了这个>>>defg():...yieldfrom[1,2,3,4]...>>>foriing():...print(i)...1234>>>看似简单易用,但PEP文档很复杂。我的问题是,与之前的yield语句相比,还有其他区别吗?谢谢。 最佳答案 对于大多数应用程序,yieldfrom只是按顺序从左边的iterable开始生成所有内容:defiterable1():yield1yield2defiterable2():yield

python - 在另一个函数中为生成器调用 yield

假设我有一些经理对象。这个对象的API有一个main_hook函数,它获取另一个函数f作为它的参数,并在循环中运行给定的f,做一些事情在每次迭代之间:defmain_hook(self,f):while(self.shouldContinue()):#dosomepreparationsf(self)#dosometeardown现在,我还有(更准确地说,想要)一个函数stop_and_do_stuff,一旦调用,就会停止main_hook它跟踪,将控制权返回给名为main_hook的任何函数,在该函数完成其正在执行的操作后,将控制权返回给main_hook并继续。基本上结果会和做的一