标签: generator

导航时取消一些 redux sagas

我在这里面临一个复杂的问题,非常感谢您的帮助。当我导航到应用程序的不同页面时,某些服务响应错误,并且我在不同页面中看到该错误。例如,假设我想买东西,为此我调用一个处理此任务的传奇。然后我立即注销,并在登录中看到错误。当我更改屏幕时,我想取消当前页面中运行的所有传奇故事。为了解决这个问题,我做了一个动作,当用户从一个屏幕切换到另一个屏幕时调度该动作。此操作正在调用生成器函数:

function* taskCancelHelper(actions, sagas) {
.....
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是如何“采取”当前屏幕中调度的所有预期操作并调用适当的传奇。我用了:

const action = take(action => [..actions in the current screen].indexOf(action.type) < 0); but it does not seem to work.
Run Code Online (Sandbox Code Playgroud)

然后我想将调度此操作时调用的所有传奇故事传递到数组中[上述操作的传奇故事]。我的想法是在我的 taskCancelHelper* 生成器函数中传递这两个数组,并使用 for 循环来取消每个任务:

For (i=0; i < actions.length; i++) {
   yield cancel(sagas[i])
}
Run Code Online (Sandbox Code Playgroud)

您知道如何执行当前屏幕上调用传奇的所有操作吗?

javascript generator helper redux-saga

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

埃拉托色尼筛中的生成器递归跳过步骤

我在这里编写的筛选算法遇到了问题。我已经尝试修复它总共大约10个小时了。我在这里四处寻找类似的问题,但似乎找不到任何遇到此问题的人。我对 python 比较陌生,在阅读了大量生成器文档后,我设法编写了有效的代码。然而,我仍然不知道为什么我的第一次尝试失败了。

我所想到的是,在每个连续的筛分步骤中,似乎 gen1 实际上并没有被清空。因此,我尝试交替使用名称 gen1 和 gen2,并删除每个名称以避免此问题。那也没用。

我真的很感激对此的一些见解,以及任何改进我现在所拥有的建议。

这是失败的代码:

def primes(n):
    "yields primes up to n. For use with large n"
    q = 0
    yield 2
    gen1 = (x for x in range(3,n,2))
    while q*q < n:
        q = next(gen1)
        gen1 = (x for x in gen1 if x%q != 0)
        yield q
    else:
        while 1:
            try:
                yield next(gen1)
            except:
                StopIteration
                break
Run Code Online (Sandbox Code Playgroud)

这是我当前的代码:

import math
global gen1
global gen
def gen1(x):
    for i in range(3,x,2):
        yield i
def …
Run Code Online (Sandbox Code Playgroud)

python recursion generator generator-expression sieve-of-eratosthenes

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

如何使用兰德板条箱更换发电机?

“The Rust Rand Book”记录了各种生成器。thread_rng声称是加密安全的,而其他人则不然。但是,我没有看到任何关于如何更改发电机的参考。我也没有看到任何方法可以找出使用时使用的生成器thread_rng。我想对各种可用选项进行测试,我该怎么做?

random generator rust

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

如何在 tf.data.Dataset 对象上使用序列/生成器将部分数据放入内存?

我正在 Google Colab 上使用 Keras 进行图像分类。我使用 tf.keras.preprocessing.image_dataset_from_directory() 函数(https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image_dataset_from_directory)加载图像,该函数返回 tf.data.Dataset 对象:

train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=1234,
  image_size=(img_height, img_width),
  batch_size=batch_size,
  label_mode="categorical")
Run Code Online (Sandbox Code Playgroud)

我发现当数据包含数千张图像时,model.fit() 将在训练多个批次后使用所有内存(我正在使用 Google Colab,并且可以看到 RAM 使用量在第一个 epoch 期间增长)。然后我尝试使用 Keras Sequence,这是将部分数据加载到 RAM 中的建议解决方案(https://www.tensorflow.org/api_docs/python/tf/keras/utils/Sequence):

  class DatasetGenerator(tf.keras.utils.Sequence):
      def __init__(self, dataset):
          self.dataset = dataset

      def __len__(self):
          return tf.data.experimental.cardinality(self.dataset).numpy()

      def __getitem__(self, idx):
          return list(self.dataset.as_numpy_iterator())[idx]
Run Code Online (Sandbox Code Playgroud)

我用以下方法训练模型:

history = model.fit(DatasetGenerator(train_ds), ...)

问题是getitem ()必须返回一批带索引的数据。然而,我使用的 list() 函数必须将整个数据集放入 RAM 中,因此当 DatasetGenerator 对象实例化时会达到内存限制(tf.data.Dataset 对象不支持使用 [] 进行索引)。

我的问题:

  1. 有没有办法实现getitem ()(从数据集对象中获取特定批次)而不将整个对象放入内存?
  2. 如果第1条不可行,有什么解决办法吗?

提前致谢!

generator out-of-memory keras tensorflow tf.data.dataset

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

扩展运算符如何使用 Javascript 中的迭代器/生成器从对象获取值?

我有以下定义数组的代码,然后带有生成器的迭代器对象从该数组中生成值,并使用扩展运算符输出每个值:

\n
const arr = ['0', '1', '4', 'a', '9'];\nconst my_obj = {\n  [Symbol.iterator]: function*() {\n    for(let index of arr) {\n      yield `${index}`;\n    }\n  }\n};\n\nconst all = [...my_obj] \n\nconsole.log(...my_obj)\n
Run Code Online (Sandbox Code Playgroud)\n

结果是:

\n
0\n1\n4\na\n9\n
Run Code Online (Sandbox Code Playgroud)\n

我不明白\xe2\x80\x99t 的是扩展运算符变量\xe2\x80\x9c...my_obj\xe2\x80\x9d 如何获取数组的值如果\xe2\x80\x9cmy_obj\xe2\x80 \x9d 是一个对象,而不是数组。据我了解: \xe2\x80\x9cmy_obj\xe2\x80\x9d 正在接收一个对象,如果应用扩展运算符,它应该得到 \xe2\x80\x9ckey:value\xe2\x80\x9d。

\n

有人能解释一下它是如何获得这些值的吗?

\n

javascript iterator generator spread

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

如果没有生成数据,则在生成器内引发错误

yield如果没有发生,我想在生成器内引发错误。下面是我的问题的一个非常简单的示例:

def test1():
  for i in range(1, 28):
    if i % 5 == 0:
      yield str(i)
  raise CustomEXception

def test2(x):
  for i in range(1, 38):
    if i % x == 0:
      yield str(i)
  raise CustomEXception
   
a = test1()
b = test2()
Run Code Online (Sandbox Code Playgroud)

实际上,test1和正在循环数据、搜索匹配项、操作数据 和。如果没有产生数据,则会出现错误。test2yield

for w,q in itertools.products(a, b):
   try:
     print(w + q)
     # do some more operation with w, q
   except CustomException:
     # do some more checking
Run Code Online (Sandbox Code Playgroud)

生成器的结果用于创建笛卡尔积。

问题是这不起作用,引发了异常,之前没有产生任何结果。

python generator

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

异步生成器在解决时产生承诺结果

假设我想同时获取 10 个 url,并在收到响应时对其进行处理(其顺序可能与它们在原始列表中出现的顺序不同)。忽略拒绝的可能性,一种方法是简单地为每个 Promise 附加一个“then”回调,然后等待它们全部使用完成Promise.all()

const fetch_promises = [
  fetch("https://cors-demo.glitch.me/allow-cors"),
  fetch("/"),
  fetch("."),
  fetch(""),
  fetch("https://enable-cors.org"),
  fetch("https://html5rocks-cors.s3-website-us-east-1.amazonaws.com/index.html"),
  fetch("https://api.github.com"),
  fetch("https://api.flickr.com/services/rest/"),
];
const processing_promises = [];
for (const fetch_promise of fetch_promises) {
  processing_promises.push(fetch_promise.then(response => {
    // Process response.  In this example, that means just
    // print it.
    console.log("got a response: ",response);
  }));
}
await Promise.all(processing_promises);
Run Code Online (Sandbox Code Playgroud)

切换到输出更清晰、更具确定性的示例:

const sleep = millis => new Promise(resolve=>setTimeout(resolve, millis));
const sleep_promises = [
    sleep(3000).then(()=>"slept 3000"),
    sleep(1000).then(()=>"slept 1000"),
    sleep(5000).then(()=>"slept 5000"),
    sleep(4000).then(()=>"slept 4000"),
    sleep(2000).then(()=>"slept 2000"),
];
const processing_promises …
Run Code Online (Sandbox Code Playgroud)

javascript generator fetch promise async-await

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

为什么生成器函数在下一次调用时不起作用?

生成器函数:

def getPositiveCount():
    n = 0
    while n<100:
        yield n
        n+=1
Run Code Online (Sandbox Code Playgroud)

上面的生成器函数在方法中调用时不会执行预期的操作next(..)。为什么next调用总是返回0?

print(next(getPositiveCount())) # prints 0
print(next(getPositiveCount())) # prints 0; should've printed 1
print(next(getPositiveCount())) # prints 0; should've printed 2
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其设置为循环,它就可以正常工作:

for i in getPositiveCount():
    print(i)

# prints 0,1,2 ... 99
    
Run Code Online (Sandbox Code Playgroud)

这也让我再次问,生成器函数与生成器表达式(通常使用 range、xrange 或类似类型的内置函数)相同吗?例如,next生成器表达式中的调用完美地工作:

squares = (n** 2 for n in range(5))
print(next(squares)) # 0
print(next(squares)) # 1
print(next(squares)) # 4
Run Code Online (Sandbox Code Playgroud)

python generator python-3.x

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

不重复的随机数生成器(cpp/c++)

我想创建一个生成数字但不重复的函数。如果生成了每个数字,则可以清空数组并重新开始。

这是我编写的代码,但它不起作用。代码中的注释对代码进行了一些解释。允许的最大数字是“howManyWords”。这用于显示存储在数组中的单词

我想这样使用它:array\[random()\]

#include <stdio.h>
#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;
//public scope
int howManyWords; // how many words you have enter

int random(){
    int random;
    int numbers[howManyWords];
    srand(time(0)); //changing the algorithm
    random = rand() % howManyWords;
    numbers[random] = random; // store the digit in the position in the array equal to the digit that is generated
    for(int i=0; i<howManyWords; i++){ // going through every element in the array
        if(numbers[i] == random){ // if the number …
Run Code Online (Sandbox Code Playgroud)

c++ random function generator

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

为什么生成器在循环后产生值

我一直在学习发送方法和产量分配如何在生成器中工作并遇到一个问题:

def gen():
    for i in range(5):
        x = yield i
        print(x)
s = gen()
print(next(s))
print(s.send(15))
Run Code Online (Sandbox Code Playgroud)

输出:

0 #after print(next(s))
15
1
Run Code Online (Sandbox Code Playgroud)

所以它会在 后打印 15 和 1 print(s.send(15))。它打破了我对yield的理解,因为我不明白为什么它在打印x后会产生1。我想知道是否有人知道答案。

python generator

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