Tag: 发电机

Python中yieldexpression式的结果是什么?

我知道yield会将函数转换为生成器,但yieldexpression式本身的返回值是多less? 例如: def whizbang(): for i in range(10): x = yield i 这个函数执行的variablesx的值是什么? 我已经阅读了Python文档: http : //docs.python.org/reference/simple_stmts.html#grammar-token-yield_stmt ,似乎没有提到yieldexpression式本身的价值。

在Python中产生突破

根据这个问题的答案,C#中的yield break相当于在python中返回。 在正常情况下,“返回”确实停止了发电机。 但是,如果你的函数什么都不做,只能返回,你将得到一个None不是一个空的迭代器,它是通过在C# def generate_nothing(): return for i in generate_nothing(): print i 你会得到一个TypeError:'NoneType'对象是不可迭代的。 但是如果我在返回之前添加一个永不退出的yield,这个函数返回我所期望的。 def generate_nothing(): if False: yield None return 如果工作,但似乎有线。 谁有更好的主意? 谢谢,

我怎么知道一台发电机是否刚起步?

我想要一个函数, is_just_started ,其行为如下: >>> def gen(): yield 0; yield 1 >>> a = gen() >>> is_just_started(a) True >>> next(a) 0 >>> is_just_started(a) False >>> next(a) 1 >>> is_just_started(a) False >>> next(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> is_just_started(a) False 我怎样才能实现这个function? 我看着.gi_running属性,但似乎用于其他的东西。 如果我知道需要发送到生成器的第一个值,我可以这样做: def safe_send(gen, a): try: return gen.send(a) […]

对于y()中的x:这是如何工作的?

我正在寻找代码在terminal中旋转光标,并发现这一点。 我想知道代码中发生了什么。 特别是for c in spinning_cursor():我从来没有见过这种语法。 是因为我一次从产生器返回一个元素,并且这个元素被分配给c? 在y()中使用x的这个任何其他的例子? import sys import time def spinning_cursor(): cursor='/-\|' i = 0 while 1: yield cursor[i] i = (i + 1) % len(cursor) for c in spinning_cursor(): sys.stdout.write(c) sys.stdout.flush() time.sleep(0.1) sys.stdout.write('\b')

运行`rails generate controller`时跳过创buildtesting,资产和助手的语法是什么?

我阅读帮助和尝试以下命令跳过生成的testing,资产和帮手文件 $ bin/rails generate controller home index –helper false –assets false –controller-specs false –view-specs false create- app/controllers/home_controller.rb route get "home/index" invoke erb create app/views/home create app/views/home/index.html.erb invoke rspec error false [not found] error false [not found] 正如你可能注意到这个工程&唯一controller, routes上面的输出,会生成controller, routes和views 。 但是最后两行很有意思: error false [not found] error false [not found] 显然,rails似乎不喜欢–option-name false语法。 所以这个错误,因为我使用了错误的语法? 如果是,那么正确的方法是什么? 谢谢

在Python中重置生成器对象

我有多个yield返回的generator对象。 准备调用这个发生器是相当费时的操作。 这就是为什么我想重复使用发生器几次。 y = FunctionWithYield() for x in y: print(x) #here must be something to reset 'y' for x in y: print(x) 当然,我正在考虑将内容复制到简单列表中。

如何从生成器中构build一个numpy数组?

我怎样才能build立一个生成器对象的numpy数组? 让我来说明这个问题: >>> import numpy >>> def gimme(): … for x in xrange(10): … yield x … >>> gimme() <generator object at 0x28a1758> >>> list(gimme()) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> numpy.array(xrange(10)) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> numpy.array(gimme()) array(<generator object at 0x28a1758>, dtype=object) >>> […]

由于非平行等待asynchronous生成器中的承诺而导致速度放慢

我正在使用生成器和蓝鸟编写代码,我有以下几点: var async = Promise.coroutine; function Client(request){ this.request = request; } Client.prototype.fetchCommentData = async(function* (user){ var country = yield countryService.countryFor(user.ip); var data = yield api.getCommentDataFor(user.id); var notBanned = yield authServer.authenticate(user.id); if (!notBanned) throw new AuthenticationError(user.id); return { country: country, comments: data, notBanned: true }; }); 但是,这是一种缓慢,我觉得我的应用程序正在等待太多的I / O,它不是并行的。 我怎样才能提高我的应用程序的性能? 对于countryFor + 400来说,对于getCommentDataFor + 600来说,总的响应时间是800,因此在总共1800毫秒内是很多的。

如何在Python中实现一个有效的素数数字生成器?

这不是功课,我只是好奇而已。 无限是这里的关键词。 我希望用它作为primes()中的p。 我相信这是Haskell的一个内置函数。 所以,答案不能像“只是做一个筛子”那样幼稚。 首先,你不知道会消耗多less连续的素数。 那么,假设你可以一次制造100个。 你会使用相同的筛法和质数公式的频率吗? 我更喜欢非并发的方法。 感谢您阅读(和写作))!