Questions tagged «generator»

生成器是子例程的泛化,主要用于简化迭代器的编写。生成器中的yield语句未指定要跳转到的协程,而是将值传递回父例程。


10
有什么工具可以从XML实例文档生成XSD模式?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 改善这个问题 我正在寻找一种工具,该工具将使用XML实例文档并输出相应的XSD架构。 我当然认识到,与手动创建模式相比,生成的XSD模式将受到限制(它可能无法处理可选或重复的元素或数据约束),但至少可以作为一个快速的起点。
146 xml  xsd  schema  generator 



7
无限生成器有表达式吗?
是否有一个可以生成无限元素的简单生成器表达式? 这是一个纯粹的理论问题。此处无需“实用”答案:) 例如,很容易制作一个有限生成器: my_gen = (0 for i in xrange(42)) 但是,要制作一个无限个,我需要用虚假函数“污染”我的名称空间: def _my_gen(): while True: yield 0 my_gen = _my_gen() 在单独的文件中处理,import以后-ing不计算在内。 我也知道这itertools.repeat完全可以做到。我很好奇是否有没有这种情况的一线解决方案。

12
与Python生成器模式等效的C ++
我有一些需要在C ++中模仿的示例Python代码。我不需要任何特定的解决方案(例如基于协同例程的收益解决方案,尽管它们也是可接受的答案),我只需要以某种方式重现语义。 蟒蛇 这是一个基本的序列生成器,显然太大了,无法存储实例化版本。 def pair_sequence(): for i in range(2**32): for j in range(2**32): yield (i, j) 目标是维护上述序列的两个实例,并以半锁步的方式在块上进行迭代。在下面的示例中,first_pass使用对的序列来初始化缓冲区,然后second_pass重新生成相同的精确序列并再次处理缓冲区。 def run(): seq1 = pair_sequence() seq2 = pair_sequence() buffer = [0] * 1000 first_pass(seq1, buffer) second_pass(seq2, buffer) ... repeat ... C ++ 对于C ++解决方案,我唯一能找到的就是模仿yieldC ++协程,但是我还没有找到有关如何执行此操作的良好参考。我也对解决此问题的替代(非常规)解决方案感兴趣。我没有足够的内存预算来保留两次通过之间的序列副本。



3
Python:使用递归算法作为生成器
最近,我编写了一个函数来生成具有非平凡约束的某些序列。问题来自自然的递归解决方案。现在碰巧,即使对于相对较小的输入,序列也要成千上万,因此我宁愿使用我的算法作为生成器,而不是使用它来填充所有序列的列表。 这是一个例子。假设我们要使用递归函数计算字符串的所有排列。以下朴素算法采用一个额外的参数“存储”,并在找到一个参数时附加一个置换: def getPermutations(string, storage, prefix=""): if len(string) == 1: storage.append(prefix + string) # <----- else: for i in range(len(string)): getPermutations(string[:i]+string[i+1:], storage, prefix+string[i]) storage = [] getPermutations("abcd", storage) for permutation in storage: print permutation (请不要在意效率低下,这只是一个例子。) 现在,我想将函数转换为生成器,即产生置换而不是将其追加到存储列表中: def getPermutations(string, prefix=""): if len(string) == 1: yield prefix + string # <----- else: …

8
Python空生成器函数
在python中,可以通过将yield关键字放在函数主体中来轻松定义迭代器函数,例如: def gen(): for i in range(100): yield i 我如何定义不产生任何值的生成器函数(生成0个值),以下代码不起作用,因为python无法知道它应该是生成器而不是普通函数: def empty(): pass 我可以做类似的事情 def empty(): if False: yield None 但这将是非常丑陋的。有什么好的方法可以实现空的迭代器功能?
97 python  generator 

8
Python:生成器表达式与产量
在Python中,通过生成器表达式创建生成器对象与使用yield语句之间有什么区别吗? 使用yield: def Generator(x, y): for i in xrange(x): for j in xrange(y): yield(i, j) 使用生成器表达式: def Generator(x, y): return ((i, j) for i in xrange(x) for j in xrange(y)) 这两个函数都返回生成器对象,这些对象生成元组,例如(0,0),(0,1)等。 一个或另一个有什么优势吗?有什么想法吗? 谢谢大家!这些答案中有很多不错的信息和进一步的参考!

4
enumerate()-在Python中生成一个生成器
我想知道将生成器函数的结果传递给python的enumerate()时会发生什么。例: def veryBigHello(): i = 0 while i < 10000000: i += 1 yield "hello" numbered = enumerate(veryBigHello()) for i, word in numbered: print i, word 枚举是延迟进行的迭代,还是将所有内容都拖入了第一个?我99.999%的人肯定它是惰性的,所以我可以将它与生成器函数完全一样对待,还是需要注意任何事情?

15
如何在恒定大小的块中拆分可迭代
可能重复: 如何在Python中将列表分成大小均匀的块? 令我惊讶的是,我找不到“批处理”函数,该函数会将可迭代对象作为输入并返回可迭代对象的可迭代对象。 例如: for i in batch(range(0,10), 1): print i [0] [1] ... [9] 要么: for i in batch(range(0,10), 3): print i [0,1,2] [3,4,5] [6,7,8] [9] 现在,我写了我认为很简单的生成器: def batch(iterable, n = 1): current_batch = [] for item in iterable: current_batch.append(item) if len(current_batch) == n: yield current_batch current_batch = [] …

6
跳过“ rails generate controller”的测试,资产和助手的语法吗?
我阅读了帮助并尝试了以下命令以跳过测试,资产和帮助文件的生成 $ 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&views生成。但是最后两行很有趣: error false [not found] error false [not found] 显然,rails似乎不喜欢--option-name false语法。所以这个错误是因为我使用了错误的语法?如果是,那正确的方法是什么?谢谢

1
如果range()是Python 3.3中的生成器,为什么不能在范围上调用next()?
也许我已经成为网络错误信息的受害者,但我认为更可能是我误解了一些信息。根据到目前为止的知识,range()是一个生成器,并且生成器可以用作迭代器。但是,此代码: myrange = range(10) print(next(myrange)) 给我这个错误: TypeError: 'range' object is not an iterator 我在这里想念什么?我期望它打印0,并前进到中的下一个值myrange。我是Python的新手,所以请接受我对这个基本问题的歉意,但在其他任何地方都找不到很好的解释。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.