Python中断言输入为隐藏内置类实例的最佳实现方式
Python中校验生成器/生成器函数的标准方案
无需自定义哑生成器来获取类型,Python标准库已经提供了公开的专用工具,是更符合Python风格的实现:
方案1:校验生成器实例
如果你的逻辑需要先调用函数、再校验返回的是生成器实例,可以使用types模块暴露的GeneratorType:
import types def myFunct(gen): g = gen() assert isinstance(g, types.GeneratorType) # 后续业务代码
types.GeneratorType和你通过临时生成器获取的类型完全等价,同时isinstance的校验方式比直接比对type更鲁棒,能兼容生成器的子类实现。
方案2:提前校验生成器函数
如果想要在调用参数前就完成校验,避免调用非生成器函数产生不必要的副作用,可以使用inspect模块的isgeneratorfunction接口:
import inspect def myFunct(gen): # 无需执行函数即可完成参数合法性校验 assert inspect.isgeneratorfunction(gen) g = gen() # 后续业务代码
如果需要处理异步生成器场景,可以对应使用types.AsyncGeneratorType和inspect.isasyncgenfunction完成校验。
内容的提问来源于stack exchange,提问作者tox123
相关产品推荐
相关产品推荐

