【Python生成器和迭代器】教程文章相关的互联网学习教程文章

python – 从单循环创建多个生成器【代码】

所以,请考虑以下事项:iterable1 = (foo.value for foo in foos) iterable2 = (bar.value(foo) for foo in foos)因为两个迭代都是从同一个列表创建的..我想知道我是否可以一起生成它们. 喜欢compounded_iter = ( (foo.value,bar.value(foo)) for foo in foos)以上作品.. 但有可能得到这样的东西:iter1, iter2 = (......) but in one shot?我无法弄清楚..解决方法: compounded_iter = ( (foo.value,bar.value(foo)) for foo in fo...

python – 如何实现装饰生成器【代码】

我有一些发电机:def my_gen():while True:#some codeyield data_chunk我有一些功能,用数据格式进行一些操作def my_formatting_func(data_chunk):#some codereturn formated_data_chunk创建生成器的最短方法是什么生成由my_formatting_func格式化的data_chunks而不修改my_gen?解决方法:假设Python 3.x并且生成器不接受任何参数(后者添加起来很简单):def wrapper(generator):def _generator():return map(my_formatting_func, gen...

Python --生成器、生成器表达式与相关数据类型推导式【代码】

主要内容: 1、生成器和生成器表达式 2、列表推导式 一、生成器生成器实质就是迭代器,在python中有三种方式来获取生成器通过生成器函数 通过各种推导式来实现生成器 通过数据转换也可以获取生成器首先我们看下一个简单的函数: def func():print(1)return 2ret = func() print(ret) 结果: 1 2然后将return 替换成yield,yield就是生成器 def func():print(1)yield 2ret = func() print(ret) 结果: <generator object func at 0x...

python – 生成器而不是列表理解?我还能在哪里提高课程水平?【代码】

我对Python很陌生.最近我在研究python的类概念.好吧,对于我编写的几个脚本,我认为定义一个将SQL语句放在一起的类(在ArcGis方言中)会很方便.没什么好看的.这就是我想出的.我问两件事:第一,一般缺陷?建议改进?其次,我有点卡在最后一个函数def构造函数的代码中.实际上我想从字典中返回元组而不是列表.但列表理解很好.那么发电机怎么样?我无法确切地知道如何做到这一点……class ArcSql:type_book = {'str':("'","'"), 'int':("", ...

在Python中设置无限生成器的限制【代码】

我正在尝试使下面的生成器能够设置返回数字的上限. 调用列表(it.takewhile(lambda x:x< 100,get_primes()))按预期返回100以下所有素数的列表但是list(get_primes(100))(应该以相同的方式返回相同的列表)只返回一个空列表.显然,我可以在for循环中包含一个if n和候选> = n:break但我最感兴趣的是为什么if n:return构造不能像我期望的那样工作.它不应该只返回相同的takewhile迭代器吗?我在这里俯瞰什么?import itertools as itde...

Python生成器与列表理解冲突【代码】

我一直在使用生成器函数搞乱Python.我想编写一个函数,它接受一个值为元组的生成器,并返回一个生成器列表,其中每个生成器的值对应于原始元组中的一个索引. 目前,我有一个函数可以实现元组中硬编码元素的数量.这是我的代码:import itertoolsdef tee_pieces(generator):copies = itertools.tee(generator)dropped_copies = [(x[0] for x in copies[0]), (x[1] for x in copies[1])]# dropped_copies = [(x[i] for x in copies[i]) fo...

生成器表达式中的多个产量?Python【代码】

我一直在尝试将这个生成器函数转换为生成器表达式,但没有成功.是否可以使用生成器表达式获得相同的输出?def gen5(num):for i in range(num): yield i *2yield i *10yield i *ig = gen5(4) list(g)[0, 0, 0, 2, 10, 1, 4, 20, 4, 6, 30, 9]我尝试了以下内容,但得到了这个(无,无,无)输出.gen_exp2 = (((yield u*2), (yield u*10) ,(yield u*u)) for u in range(4))list(gen_exp2)[0,0,0,(None, None, None),2,10,1,(No...

python – 使用生成器按许多属性对对象列表进行排序【代码】

我有一个对象列表,其数量介于数千和数千之间.成千上万.这些对象可以被认为是我想要根据他们的分数排名的人. 首先,他们按年龄,性别等分成小组.在每个点,提供与该年龄/性别类别相对应的排名.对象上的字段是age_group和gender.因此,您首先会收集所有拥有30-39岁年龄组的人,然后收集所有年龄组的男性(M)和所有女性(W). 在每个点上创建一个新列表是非常耗费内存的,所以我试图使用一个发生器和放大器. itertools使用原始列表进行分组.所以...

python tips:生成器的小问题

在Python中,生成器和函数很像,都是在运行的过程中才会去确定各种变量的值,所以在很多情况下,会导致各种各样的问题。def generator_test1():# 0...9 generatorx = (i for i in range(10))# 5..9 generatorx_filter = filter(lambda y: y >= 5, x)# first use the xL = list(x)print("L, x", L)# then use x_filterl = list(x_filter)print("l, x_filter", l)if __name__ == "__main__":generator_test1()输出结果为:L, x [0, 1...

33、python基础学习-生成器&列表生成器&迭代器

#!/usr/bin/env python #__author: hlc #date: 2019/6/7# 列表生成式 # def f(n): # return n**3 # a = [f(x) for x in range(10)] #前面的参数必须和后面一样 # print(a) # [0, 1, 8, 27, 64, 125, 216, 343, 512, 729]# 生成器# a = (x for x in range(10)) # print(a)# for i in a : # 等于print(next(a))的遍历 # print(i)""" 生成器函数和普通的函数有一点不一样,就是把return换成yeild,其中yeild是一个语法糖,...

Python列表生成器【图】

前言 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅访问前面几个元素,那后面绝大多数占用的空间都白白浪费了。 python生成器是用来代替"不一定能够使用全部元素的数组",等到使用某一元素时,才生成该元素,用来节省空间. 生成器创建方式 第一种: 在前面我们介绍python列表生成式,这里我们只需要把列表生成式的...

Python生成器/生成器函数/推导式/推导式函数【代码】

1. 生成器   生成器的本质就是迭代器  在python中有三种?方式来获取?生成器:    1. 通过生成器函数2. 通过各种推导式来实现?成器3. 通过数据的转换也可以获取生成器   生成器的特点和迭代器一样.取值方式和迭代器一样(__next__(), send(): 给上一个yield传值).   生成器一般由生成器函数或者生成器表达式来创建   其实就是手写的迭代器 2. 生成器函数   和普通函数没有区别. 里...

python yield生成器变量范围【代码】

我使用yield来创建一个生成器,该生成器返回使用正则表达式和re.sub()提取的字符串块.虽然我发现了一种有效的方法,但我对它为什么单向工作而不是另一种工作有点困惑,如下所示: 这不起作用(processchunk()没有分配给splitmsg中声明的块):def splitmsg(msg):chunk = Nonedef processchunk(match):chunk = match.group(1)return ""while True:chunk = Nonemsg = re.sub(reCHUNK,processchunk,msg,1)if chunk:yield chunkelse:break ...

python – 类似于append行为的生成器表达式【代码】

这更像是一个编程练习而不是现实世界的问题:我正在寻找一个类似于追加行为的生成器表达式. 考虑:def combine(sequence, obj):for item in sequence:yield itemyield objs = ''.join(combine(sequence, obj))这个发生器基本上类似于追加.在我的程序的工作流程中,上面的速度一样快sequence.append(obj) s = ''.join(sequence)我现在想知道是否有一个整洁的生成器表达式genexprs = ''.join(genexpr)这与上面的追加行为类似,没有性能...

为什么Python生成器在exec’d脚本中将其范围与全局混淆?【代码】

好的,所以我在一个工具的配置脚本是exec’d python脚本的环境中工作. exec调用是这样的: outer.py:exec(open("inner.py").read(), globals(), {})现在,我想在exec’d脚本中进行一些相对基本的迭代.在这种情况下,当某些值不在白名单中时执行工作: inner.py:items = ('foo/bar','foo/baz','foof','barf/fizz', )whitelist = ('foo/', )for key in items:try:# Not terribly efficient, but who cares; computers are fast.next(T...