标签: generator

pydev 无法进入生成器

我在 Windows 7 x64 上使用 pydev,我发现生成器函数中的断点被忽略(如果我注释掉yield,一切正常)。

然后我发现了一个旧的 SO question Python debugger step in generators?

答案是“我刚刚测试了 eclipse,它将在安装 pydev 的情况下进行调试。”

但是当我测试代码时,断点仍然被忽略。

def example(n):
    i = 1
    while i <= n:
        yield i
        i += 1

print "hello"

print "goodbye"

if __name__ == '__main__':
    example(8)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. PyDev 是否​​能够介入生成器?
  2. 如果没有,我应该怎么做来调试这样的代码?

python debugging generator pydev

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

避免在 Python Generator 中使用多个 Next() 语句

我正在使用一个返回生成器的库。有没有办法在不使用多个next()语句的情况从特定迭代开始?

在一个简单的 for 循环中,我可以执行以下操作。

array = [2, 5, 1, 4, 3]

for i in array [2:]:
    # do something
Run Code Online (Sandbox Code Playgroud)

在发电机中,我不能做如上所示。相反,我必须使用多个next ()语句从第三个索引开始。尝试执行与 for 循环相同的操作时,我收到一条错误消息,指出“生成器不可编写脚本”。

python iteration iterator yield generator

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

在 JavaScript 中实现协程控制流

下面实现了一个控制流包装器,co使异步代码只能由yield关键字描述。

这基本上是什么async/await在ESwhatever引擎盖下呢?

co(function*() {
    console.log('...');
    yield one();
    console.log('...');
    yield two();
})


function co(gFn) {
    var g = gFn();

    return Promise.resolve()
        .then(go);

    function go() {        
        var result = g.next();
        if(result.done) {
            return;
        }
        if(isPromise(result.value)) {
            return result.value.then(go); // Promises block until resolution.
        }
        return Promise.resolve(result);
    }    
}

function isPromise(o) {
    return o instanceof Promise;
}

function one() {
    return new Promise(resolve => setTimeout(() => (console.log('one'), resolve()), 1000));
}

function two() {
    return new …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous generator async-await

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

使用 PHP 动态创建站点地图

我正在尝试使用 php 生成有效的站点地图。逻辑很简单。我将所有 ^(.+)index_sitemal.xml 请求转发到 .htaccess 中的 index_sitemap.php 文件。PHP脚本如下:

<?php 
header( "content-type: application/xml; charset=UTF-8" );
    echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
    echo '<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";
    $len = 10;   // to take
    $min = 50;  // minimum
    $max = 100;  // maximum
    $range = [];
    foreach (range(0, $len - 1) as $i) {
        while(in_array($num = mt_rand($min, $max), $range));
        $range[] = $num;
        echo '<sitemap><loc>http://'.$_SERVER['SERVER_NAME'].'/sitemap/'.$num.'.xml</loc></sitemap>'."\n";
    }
    echo '</sitemapindex>';
?>
Run Code Online (Sandbox Code Playgroud)

在浏览器中显示良好。

图片链接 - (抱歉,声誉低)https://i.ibb.co/4ZmLJ1D/Screenshot-at-Jan-29-10-47-01.png

但是在尝试验证 xml 时,我遇到了类型错误。

图片链接 - (对不起,声誉低)https://i.ibb.co/Ws11cBj/Screenshot-at-Jan-29-10-55-28.png

有没有办法使用php显示动态站点地图?

php xml sitemap generator http-headers

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

如何对迭代器排序而不将其全部放入向量中?

我正在构建一个类似于生成器的通用接口,该生成器将数据从一个流传输到另一个流,以最终完成以下操作:

file |> toCsv |> filter |> sort |> filter...
Run Code Online (Sandbox Code Playgroud)

我知道如何对向量/片段进行排序,但是如何将传入的流/迭代器排序而不将其全部放入向量中?

stream.iter().collect_sorted()
Run Code Online (Sandbox Code Playgroud)

我需要融合向量,树,文件,数据库等,因此有时我不知道全部消耗不知道传入数据的大小。

我不反对存储结果。问题是排序与切片/向量有关。我需要能够:

stream.iter().collect_sorted()
Run Code Online (Sandbox Code Playgroud)

代替:

datasource |> Algo.sort |> next...
Run Code Online (Sandbox Code Playgroud)

针对不同的用例存在不同的排序算法,因此最终我希望对现有数据应用最好的排序方法:

let data = datasource |> into_vec
data.sort()
data |> next...
Run Code Online (Sandbox Code Playgroud)

sorting generator rust

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

为什么此生成器(使用递归)无法产生直观的结果

我编写了一个简单的生成器函数,该函数接受一个可能包含子列表的列表,并尝试展平该列表:

因此[1,[2,3],4,[5,[6,7],8]]应产生1,2,3,4,5,6,7,8

如果我只想打印出值(而不是生成器),它看起来像这样,这可行:

#  Code A
def flatten_list_of_lists(my_list):
    for element in my_list:
        if isinstance(element, list):
            flatten_list_of_lists(element)
        else:
            print(element)

my_list = [1, [2, 3], 4, [5, [6, 7], 8]]
flatten_list_of_lists(my_list)
Run Code Online (Sandbox Code Playgroud)

并按预期打印出1,2,3,4,5,6,7,8

但是,当我将代码更改为此:

#  Code B
def flatten_list_of_lists(my_list):
    for element in my_list:
        if isinstance(element, list):
            flatten_list_of_lists(element)
        else:
            yield element

for i in flatten_list_of_lists(my_list):
    print(i)
Run Code Online (Sandbox Code Playgroud)

只是将打印转换为成品,程序仅打印出1,4。

我将在下面粘贴有效的代码。但是我想知道为什么以前的代码不起作用?如果代码A正确地“打印”了数字,为什么代码B不能正确地“屈服”数字呢?

似乎我对生成器如何使用递归有基本的误解。

该代码实际上有效:

#  Code C
def flatten_list_of_lists_v2(my_list):
    for element in my_list:
        if isinstance(element, list):
            for sub_element in flatten_list_of_lists_v2(element):
                yield sub_element
        else:
            yield element

l = [] …
Run Code Online (Sandbox Code Playgroud)

python recursion generator

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

Python generator time complexity log(n)

In python3 range built with help of generators

对数时间— O(log n)当算法在每一步中减少输入数据的大小时,被称为具有对数时间复杂度。例如,如果我们要在生成器的帮助下打印前10位数字,则首先将得到一个元素,因此剩下的9个元素必须处理,然后再得到第二个元素,因此剩下的8个元素必须处理

for index in range(0, len(data)):
    print(data[index])
Run Code Online (Sandbox Code Playgroud)

当我检查python生成器的时间复杂度时,它说O(n)。

由于每次它只生成一个输出(因为我们需要这样做),__next__ 因此每次将生成1个单位成本。

我可以对此进行解释吗

python generator time-complexity space-complexity

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

TypeScript isolatedModules 真正的导出生成器函数

我有一个index.ts导出生成器函数的文件

export function* myFunction() { [...] }
Run Code Online (Sandbox Code Playgroud)

它可以正常工作--isolatedModules = false但无法编译--isolatedModules = true

编译过程中的错误信息:

All files must be modules when the '--isolatedModules' flag is provided.  TS1208
Run Code Online (Sandbox Code Playgroud)

generator typescript redux-saga

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

如何在 StopIteration 之前停止在生成器上调用 next()

我有一个调用 API 并生成数据的函数。后来我用来next()从生成器中检索数据,但是由于我不知道有多少数据要“提取”,我最终会执行next()直到它引发StopIteration异常。

def get_data():
    source = API_Instance()
    yield source.get_some_data()

def parse_data():
    data = get_data()
    while True:
        try:
            row_data = next(data)
            print(row_data)
        except StopIteration:
            break
Run Code Online (Sandbox Code Playgroud)

这似乎是一种糟糕的方法。有没有办法避免 Try/Except 块?像知道发电机已用尽的方法吗?(找不到更好的词来形容它

python generator python-3.x

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

为什么“in”生成器比python中的“in”列表快得多

例子:

from timeit import timeit

print(timeit("5 in [i for i in range(0, 100)]"))
print(timeit("5 in map(int, range(0, 100))"))
Run Code Online (Sandbox Code Playgroud)

这是结果:

3.771566713000084
0.9066896029999043
Run Code Online (Sandbox Code Playgroud)

python 3.8.5(我也认为这没有提到python版本^_^)

python list generator python-3.x

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