标签: generator

如何在没有循环的情况下将生成器元素添加到 set()?

这个链接它说生成器不像迭代器那样初始化。

如何将生成器的元素添加到集合中?有没有比只是一种for item in generator东西和使用更好的方法setname.add(item)

生成器是cursor.execute("SELECT ...")从连接到 sqlite3 数据库的命令返回到游标的。

python generator set

1
推荐指数
1
解决办法
2449
查看次数

带返回语句的生成器

在我的报道中,我对以下案例感到头疼(python 3.4)

def simple_gen_function(str_in, sep=""):
    if sep == "":
        yield str_in[0]
        for c in str_in[1:]:
            yield c
    else:
        return str_in
        # yield from str_in

str_in = "je teste "
t = "".join(simple_gen_function(str_in))
p = "".join(simple_gen_function(str_in, "\n"))

print("%r %r" % (t, p))
# 'je teste' ''
Run Code Online (Sandbox Code Playgroud)

在生成器中使用 return ,在使用时没有“达到”回报yield from str_in我有预期的结果。

这个问题看起来很简单,但我相信在生成器中使用 return 是可以实现的。

python generator

1
推荐指数
1
解决办法
2900
查看次数

Python 3,yield 表达式返回值受其刚刚通过 send() 接收的值的影响?

在阅读了文档、问题并制作了我自己的测试代码后,我相信我已经理解了 ayield expression是如何工作的。

尽管如此,我对以下示例代码的行为感到惊讶:

def gen(n=0):
    while True:
        n = (yield n) or n+1

g=gen()
print( next(g) )
print( next(g) )
print( g.send(5) )
print( next(g) )
print( next(g) )
Run Code Online (Sandbox Code Playgroud)

我原以为它会返回 0, 1, 2, 5, 6,而它会产生:0, 1, 5, 6, 7。

即:我原以为会yield expression产生这些效果:

  1. 计算 的值yield expression,并将其返回给调用者
  2. 从调用者那里获取值send()并将它们用作生成器函数代码接收的 yield 表达式的值
  3. 在执行任何其他操作之前暂停执行;它将在同一时间在同一点恢复next(g)g.send()调用

...和/或 Python 会注意避免 (1) 和 (2) 中的两个信息流之间的任何干扰,即保证它们是独立的,例如在元组分配中 a, b = f(a,b), g(a,b)

(我什至想知道在 (1) 和 (2) 之间进行暂停是否更好,但也许它会非常复杂,因为这意味着仅执行部分语句,其余部分保留用于下一份简历)

无论如何,操作的顺序是(2),然后(1),然后(3),因此(2)中的赋值发生在之前,并且可以影响(1)中的赋值。即g.send() …

python yield generator

1
推荐指数
1
解决办法
226
查看次数

使用 redux-saga 处理队列

我正在尝试使用 redux-saga 生成器实现一个队列处理程序来管理通知。

基本上,我需要在通知进入队列时按顺序显示通知。

为此,我queue在 redux 存储中有一个数组,一个QUQUE_NOTIFICATION添加到队列和SHOW_NOTIFICATION删除队列通知的操作。

我目前的传奇实现就是这么简单:

export function* watchQueue() {
    while (true) {
        const state = yield select()
        const queue = state.queue
        if (queue.length > 0) {
            yield put({ action: 'SHOW_NOTIFICATION', queue[0])
        }
        yield call(delay, 5000);
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

当前实现的问题在于,当队列为空时QUQUE_NOTIFICATION,调度生成器可能会等待延迟完成。
但是,我想在它进入队列后立即显示第一个通知。有任何想法吗?

generator redux redux-saga

1
推荐指数
1
解决办法
2363
查看次数

koa-router 不与发电机一起工作

当我使用生成器时,我一直在努力让 koa 响应请求。我写了一个 test.js 应用程序来演示这一点。

var koa = require('koa');
var app = new koa();
var Router = require('koa-router');
var router = new Router();

router.get('/', function *(next){
    this.body = "hello world";
    console.log("success")
});

app.use(router.routes())
app.use(router.allowedMethods());

app.listen(3000);
console.log("listening on 3000");
Run Code Online (Sandbox Code Playgroud)

我用 node v4.6.1 运行服务器

没有发生错误,但是当我发送 get 请求时,我得到Not Found并且没有控制台日志。

这段代码虽然有效:

var koa = require('koa');
var app = new koa();
var Router = require('koa-router');
var router = new Router();

router.get('/', function (ctx){
    ctx.body = "hello world";
    console.log("success")
});

app.use(router.routes())
app.use(router.allowedMethods());

app.listen(3000);
console.log("listening …
Run Code Online (Sandbox Code Playgroud)

javascript generator koa koa-router

1
推荐指数
1
解决办法
1946
查看次数

如何编辑 Rails 脚手架模型生成器

我正在尝试自定义 rails 默认脚手架生成器。对于视图,我可以通过简单地在 下添加文件来做到这一点:lib/templates/erb/scaffold/

在这里,我添加了 index.html.erb 并进行了自定义,但我想更改此命令生成的模型:

rails g scaffold model 
Run Code Online (Sandbox Code Playgroud)

我曾尝试将文件添加到 lib/templates/rails/model/model_generator.rb

使用这样的代码:

 module Rails
    module Generators
      class ModelGenerator < NamedBase #metagenerator
        argument :attributes, :type => :array, :default => [], :banner => "field[:type][:index] field[:type][:index]"
        hook_for :orm, :required => true

      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

但是在这方面我什么都不需要帮助,我需要覆盖什么文件以及我需要放置在哪里。

ruby-on-rails generator scaffold

1
推荐指数
1
解决办法
1156
查看次数

python 函数作为可选的生成器

假设我有一个函数,我想选择是否返回结果。这很容易编码:

def foo(N, is_return=False):
    l = []
    for i in range(N):
        print(i)
        if is_return:
            l.append(i)
    if is_return:
        return l
Run Code Online (Sandbox Code Playgroud)

但是现在可以说我希望该函数成为一个生成器。我会写这样的东西:

def foo_gen(N, is_return=False):
    for i in range(N):
        print(i)
        if is_return:
            yield i
Run Code Online (Sandbox Code Playgroud)

所以大概 when is_returnis Falsethenfoo_gen只是一个没有返回值的函数, when is_returnisTrue foo_gen是一个生成器,我希望有两个不同的调用:

In [1]: list(foo_gen(3, is_return=True))
0
1
2
Out[2]: [0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

因为当它是一个生成器并且您必须遍历产生的值时,并且:

>>> In [2]: foo_gen(3)
0
1
2
Run Code Online (Sandbox Code Playgroud)

因为当它不是生成器并且它只是具有副作用并且您不必遍历它时。但是,后一种行为不起作用,而只是返回生成器。你不能从中得到任何东西:

In [3]: list(foo_gen(3, is_return=False))
0
1
2
Out[3]: []
Run Code Online (Sandbox Code Playgroud)

但这并不是很好,并且对于那些不希望必须遍历任何内容以产生副作用的 API 用户来说是令人困惑的。

反正有没有In …

python generator

1
推荐指数
1
解决办法
331
查看次数

iter,范围在for循环python中

我认为“for in”语句接受迭代器而不是迭代器,但不知何故,以下代码工作正常。我很迷惑。实际上,我正在查看以下位置的生成器示例:https : //www.python.org/dev/peps/pep-0289/

>>> for i in range(10):
    print(i)


0
1
2
3
4
5
6
7
8
9
>>> for i in iter(range(10)):
    print(i)


0
1
2
3
4
5
6
7
8
9
>>>
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释在 for 循环中使用 iter(range(10)) 时发生了什么?

python iterator for-loop generator

1
推荐指数
1
解决办法
4606
查看次数

使用带有 fit_generator (Keras, R) 的自定义 R 生成器函数

我想训练一个卷积网络来解决图像数据上的多类、多标签问题。由于数据的性质和原因,我就不告诉你,这将是最好的,如果我可以使用自定义[R生成函数进料fit_generator命令,而其内置的image_data_generatorflow_images_from_directory命令(这点我是能够成功开始工作,而不是针对这个特定问题)。

在这里(https://www.rdocumentation.org/packages/keras/versions/2.2.0/topics/fit_generator)它说我可以做到这一点,而无需提供任何示例。所以我尝试了以下方法。这是我正在尝试做的一个极其精简的示例(此代码完全自包含):

library(keras)
library(reticulate)      #for py_iterator function

play.network = keras_model_sequential() %>%
  layer_dense(units = 10, activation = "relu", input_shape = c(10)) %>%
  layer_dense(units = 1, activation = "relu")

play.network %>% compile(
  optimizer = "rmsprop",
  loss = "mse"
)

mikes.custom.generator.function = function()     #generates a 2-list of a random 1 x 10 array, and a scalar
{
  new.func = function()
  {
    arr = array(dim = c(1,10))
    arr[,] = sample(1:10, 10, replace = TRUE)/10
    return(list(arr,runif(1)))
  } …
Run Code Online (Sandbox Code Playgroud)

r image generator keras

1
推荐指数
1
解决办法
2501
查看次数

自定义 python 生成器中的返回和停止迭代

阅读 Python 中的一些新风格观点,并开始从生成器StopIterationreturn生成器的转变。我的主要问题是这在自定义生成器中应该如何工作。我有一个类,我__next__直接覆盖了方法,因为我必须添加一些逻辑来跟踪生成。

下面非常接近我正在做的事情,包含所有关键元素。请注意,我实际上并不是在创建一个复制列表的生成器,只是将其作为一个最小的示例。

class Test():
    items = <list>

    def __init__(self):
        self.index = 0

    def __next__(self):
        if self.index >= len(self.items):
            raise StopIteration
        value = self.items[self.index]
        self.index += 1
        return value

    def reset(self):
        self.index = 0
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,我会遍历一个列表,直到它耗尽,然后下游调用将决定是重置生成器还是在耗尽后继续。但是,StopIteration由于它已被弃用,我如何在不使用的情况下启用这样的功能?使用returnhere 来提高 a的标准建议StopIteration似乎并不适用,我真的宁愿不更改下游代码来检查生成器产量Nones

那我应该在这里做什么?是StopIteration例外还是可以接受的__next__

python exception generator python-3.x

1
推荐指数
1
解决办法
1595
查看次数