标签: generator

如何在MySQL中创建行生成器?

有没有办法生成可以在JOIN中使用的任意数量的行,类似于Oracle语法:

SELECT LEVEL FROM DUAL CONNECT BY LEVEL<=10
Run Code Online (Sandbox Code Playgroud)

mysql sql generator

21
推荐指数
4
解决办法
2万
查看次数

使用具有词典理解的收益率

作为一个人为的例子:

myset = set(['a', 'b', 'c', 'd'])
mydict = {item: (yield ''.join([item, 's'])) for item in myset}
Run Code Online (Sandbox Code Playgroud)

list(mydict)给出:

['as', 'cs', 'bs', 'ds', {'a': None, 'b': None, 'c': None, 'd': None}]
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?怎么yield办?无论表达式yield如何,这种行为是否一致?

注意:我知道做的mydict = {item: ''.join([item, 's']) for item in myset}会给字典{'a': 'as', 'b': 'bs', 'c': 'cs', 'd': 'ds'},这似乎是我想在这里做的.

python yield generator

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

R中的发电机功能

R中是否有一个包或语言结构可以促进或提供" 类似Python的生成器 "的实现?

通过"类似Python的生成器",我指的是在调用之间保持状态的函数,在R语法中,从Python 借用关键字yield将类似于:

iterable.fun <- function(){
  yield list('a','b','c')
}
Run Code Online (Sandbox Code Playgroud)

使用yield而不是return,然后连续三次调用函数将给出:

> iterable.fun()
  'a'
> iterable.fun()
  'b'
> iterable.fun()
  'c'
Run Code Online (Sandbox Code Playgroud)

编辑:我遗漏了Python生成器的一个方面,使它们与迭代器不同.迭代的整个对象列表不是在第一次调用时构建的,然后是迭代的,但是每个函数调用都会创建一个将为该调用返回的元素.

python r generator python-3.x

21
推荐指数
2
解决办法
4037
查看次数

为什么范围对象"不是迭代器"?

我写了这个并且期望0:

>>> x = range(20)
>>> next(x)
Run Code Online (Sandbox Code Playgroud)

相反,我得到了:

TypeError:'range'对象不是迭代器

但我以为这是一个发电机?

最初的答案产生了我最初对自己说的同样的事情:它是一个可迭代的,而不是一个交互者.但是,如果两者都是简单的生成器,那么这就无法解释为什么会这样做:

>>> x = (i for i in range(30))
>>> next(x)
0
Run Code Online (Sandbox Code Playgroud)

python generator python-3.x

21
推荐指数
3
解决办法
9098
查看次数

什么是CMake发生器?

我看了文档.

它说:

A CMake Generator is responsible for writing the input files for a native build system. 
Run Code Online (Sandbox Code Playgroud)

这到底是什么意思呢?

如果我的项目中有一组C++文件,这些是输入文件吗?

如果我使用Linux,默认情况下我的本机构建系统是什么?Make

为什么输入文件必须written由生成器存在?

generator cmake

21
推荐指数
3
解决办法
2万
查看次数

如何处理耗尽的迭代器?

在搜索Python文档时,我发现了Pythons内置函数等效python实现.zip()

相反,一个醒目的StopIteration例外,这标志着存在由迭代器不产生其他项目的作者(S)使用的if语句来检查,如果返回的默认值形式next()等于object()(" sentinel")和停止发电机:

def zip(*iterables):
    # zip('ABCD', 'xy') --> Ax By
    sentinel = object()
    iterators = [iter(it) for it in iterables]
    while iterators:
        result = []
        for it in iterators:
            elem = next(it, sentinel)

            if elem is sentinel:
                return

            result.append(elem)
        yield tuple(result)
Run Code Online (Sandbox Code Playgroud)

我现在想知道异常捕获或if Python Docs使用语句之间是否有任何区别

或者更好,正如@hiro主角指出的那样:在Python中
使用try …

python exception-handling generator python-3.x

21
推荐指数
2
解决办法
1840
查看次数

ReferenceError:未定义regeneratorRuntime(但在作用域内工作)

我遇到过这种奇怪的事情:

ReferenceError: regeneratorRuntime is not defined

...我设法在一个非常小的环境中重现(与同一问题上类似的SO问题相比),并且还注意到一些奇怪的行为取决于是否使用了范围.

以下代码有效:

'use strict';

require('babel-polyfill');

{  // scope A (if you remove it you observe different behavior when .babelrc is present)

    function *simplestIterator() {
        yield 42;
    }

    for (let v of simplestIterator()) {
        console.log(v);
    }

}
Run Code Online (Sandbox Code Playgroud)

包裹是:

$ npm ls --depth 0
simple-babel-serverside-node-only-archetype@1.0.0 /home/mperdikeas/regeneratorRuntimeNotDefined
??? babel-cli@6.7.5
??? babel-core@6.7.6
??? babel-polyfill@6.7.4
??? babel-preset-es2016@6.0.11
??? babel-runtime@6.6.1
Run Code Online (Sandbox Code Playgroud)

内容.babelrc是:

$ cat .babelrc 
{
    "presets": ["es2016"]
}
Run Code Online (Sandbox Code Playgroud)

但是,当移除范围并将其simplestIterator置于全局范围时,它将失败并显示:

ReferenceError: regeneratorRuntime is not defined
Run Code Online (Sandbox Code Playgroud)

更奇怪的是,如果.babelrc …

javascript generator babeljs

21
推荐指数
2
解决办法
3万
查看次数

具有yield的Python函数的正确类型注释

在阅读了Eli Bendersky 关于通过Python协同程序实现状态机的文章后,我想......

  • 看他在Python3下运行的例子
  • 并为生成器添加适当的类型注释

我成功完成了第一部分(但是没有使用async defs或yield froms,我基本上只是移植了代码 - 所以任何改进都是最受欢迎的).

但是我需要一些关于协同程序类型注释的帮助:

#!/usr/bin/env python3

from typing import Callable, Generator

def unwrap_protocol(header: int=0x61,
                    footer: int=0x62,
                    dle: int=0xAB,
                    after_dle_func: Callable[[int], int]=lambda x: x,
                    target: Generator=None) -> Generator:
    """ Simplified protocol unwrapping co-routine."""
    #
    # Outer loop looking for a frame header
    #
    while True:
        byte = (yield)
        frame = []  # type: List[int]

        if byte == header:
            #
            # Capture the full frame
            # …
Run Code Online (Sandbox Code Playgroud)

python static-typing generator coroutine mypy

21
推荐指数
3
解决办法
4491
查看次数

python:lambda,yield-statement/expression和loops(Clarify)

TLDR: 我们可以yield在一个lambda?中实现或生成语句(带循环)?

我的问题是澄清:

是否可以使用yield实现以下简单循环函数

def loopyield():
   for x in range(0,15):
      yield x
print(*loopyield())
Run Code Online (Sandbox Code Playgroud)

结果有误:

lamyield=lambda x: yield x for x in range(0,15)
                       ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

看起来像是,它期待一些东西作为不成文的返回语句的正确操作数,但发现yeild并且变得困惑.

是否有合适的合法方式在循环中实现这一目标?

旁注:yield可以是语句/表达式取决于你问的对象:yield - statement还是expression?

最终答案: yield可以与lambda一起使用,但限制(单行)使它无用. for/while在lambda中不可能,因为它们不是表达式. -user2357112隐式for循环可以使用列表推导,并且yield在列表推导中有效.- wim

判决 -显式循环不可能,因为python中的lambdas只能包含表达式,并且要编写显式循环,您需要使用语句.-wim

python lambda loops generator python-3.x

21
推荐指数
3
解决办法
1万
查看次数

Python从或从中返回生成器?

我写了这段简单的代码:

def mymap(func, *seq):
  return (func(*args) for args in zip(*seq))
Run Code Online (Sandbox Code Playgroud)

现在我有一个疑问,最好使用上面的'return'语句返回一个生成器或使用'yield from'指令,如下所示:

def mymap(func, *seq):
  yield from (func(*args) for args in zip(*seq))
Run Code Online (Sandbox Code Playgroud)

超出"回报"和"收益率"之间的技术差异,这是一般情况下更好的方法吗?

python return function generator

21
推荐指数
2
解决办法
4229
查看次数