这可能是一个愚蠢的问题,但是我还是会问。我有一个生成器对象:
>>> def gen():
... for i in range(10):
... yield i
...
>>> obj=gen()
我可以测量它的大小:
>>> obj.__sizeof__()
24
据说发电机会被消耗掉:
>>> for i in obj:
... print i
...
0
1
2
3
4
5
6
7
8
9
>>> obj.__sizeof__()
24
…但obj.__sizeof__()
保持不变。
使用字符串可以按我的预期工作:
>>> 'longstring'.__sizeof__()
34
>>> 'str'.__sizeof__()
27
如果有人能启发我,我将不胜感激。
__sizeof__()
不按照您的想法去做。该方法返回给定对象的内部大小(以字节为单位),而不是生成器将要返回的项目数。
Python无法事先知道生成器的大小。以下面的无限生成器为例(例如,有更好的方法来创建计数器):
def count():
count = 0
while True:
yield count
count += 1
那个发电机是无止境的。没有可分配的大小。但是生成器对象本身占用内存:
>>> count.__sizeof__()
88
通常,__sizeof__()
您通常不会调用该sys.getsizeof()
函数,而这会增加垃圾回收器的开销。
如果您 知道 生成器将是有限的,并且 必须 知道它会返回多少个项目,请使用:
sum(1 for item in generator)
但请注意,这会使发电机 耗尽 。
问题内容: 在下面的: 我知道any(…)内部是一个生成器对象。我不明白的是缺少括号-如果括号属于any()函数,在生成器表达式周围是否应该有另一组括号? 谢谢。 问题答案: 当仅在一个参数中使用函数调用时,可以省略括号,生成器表达式语法专门允许使用该括号。 仅带有一个参数的调用可以省略括号。有关详细信息,请参见“通话”部分。
我使用pyodbc和pandas-read_-sql从Oracle数据库中提取数据。 当我进入这一行时,我没有看到任何错误 但是当我试着看的时候 我得到这个错误 我对这一错误的含义或可能的原因进行了研究,但没有得出令人满意的答案。 使用chunksize的原因是我有一个包含6000万行的Oracle db表,并计划以位的形式下载,然后将它们放在一起,就像这里:如何从sql查询创建一个大数据帧而不耗
问题内容: 在python中,如何检查对象是否为生成器对象? 试试这个- 给出错误- (我知道我可以检查对象是否具有将其用作生成器的方法,但是我想以某种方式可以确定任何对象的类型,而不仅仅是生成器。) 问题答案: 您可以从以下类型使用GeneratorType:
前面章节中,已经详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它比较特殊。 以 list 容器为例,在使用该容器迭代一组数据时,必须事先将所有数据存储到容器中,才能开始迭代;而生成器却不同,它可以实现在迭代的同时生成元素。 也就是说,对于可以用某种算法推算得到的多个数据,生成器并不会一次性生成它们,而是什么时候需要,才什么时候生成。 不仅如此,生成器的创建方式也比迭代器简单很多,大体分为以下
我正在开发我的第一个FastAPI和Pydantic项目,在尝试从endpoint返回生成器时遇到了一个问题。问题在下面,任何投入都将不胜感激! 我有一个 API endpoint,我首先从数据库中获取数据记录,然后使用 map 函数格式化每条记录。但是,将映射结果返回到终结点时,键值映射出错。请注意,出于性能考虑(大数据量),我想将endpoint的返回类型保留为生成器。 我的伪代码: 这样,我
是否有方法重写build方法返回SampleClass以避免执行build.build?