gpt4 book ai didi

python - 生成器对象的断言

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:15 27 4
gpt4 key购买 nike

是否有内省(introspection)生成器对象的技术(例如单元测试中的断言)?

更具体地说,我有一个数据处理管道,由一系列小函数组成,这些函数通常应用于列表理解或生成器表达式中的值,如下所示:

生成一些随机数据:

>>> raw_data = ["${}".format(RND.randint(10, 100)) for c in range(10)]

>>> # a function that does some sort of of transform
>>> fnx = lambda q: float(q.replace('$', ''))

>>> d1 = [fnx(itm) for itm in raw_data]

在下一步中,将对 d1 的项目应用另一个转换函数,依此类推。

在上面的例子中,例如关于 prices_clean 的长度或其值的最小/最大值等的断言是我的单元测试套件的核心:

>>> assert len(d1) == 10

假设我只是要遍历这些中间结果,我实际上不需要列表,一个生成器对象就可以了,并且考虑到内存配置文件要低得多,这就是我使用的:

>>> d1 = (fnx(itm) for itm in raw_data)

当然,我在使用列表理解时所依赖的断言不适用于生成器对象:

>>> d1
<generator object <genexpr> at 0x106da9230>

>>> assert len(d1) == 10
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
assert len(d1) == 10
TypeError: object of type 'generator' has no len()

如果我必须在生成器对象上调用 list() 只是为了一个断言,那么我的测试套件运行得非常慢(不幸的实际结果是 debs 通常根本不运行它) .

我已经查看了生成器对象的属性以获得任何我可以有用地自省(introspection)的属性,但我没有看到如何以我在此处描述的方式经常使用它们。

最佳答案

Reference for Type checking of a Generator object

import types
self.assertIsInstance(_result_generator, types.GeneratorType)

关于python - 生成器对象的断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19196202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com