今天在调试一个python应用的时候发现了一个问题,先看代码如下:
segments,_ = model.transcribe(audio_file_name, beam_size=args.beam_size)
if('txt' in args.output_type):
outputtxt(args.output_path,bf,segments)
if('srt' in args.output_type):
outputsrt(args.output_path,bf,segments)
segments变量依次为outputtxt,outputsrt两个函数引用,不管是先执行哪个函数,总之后执行的那个函数再使用segments的时候,segments的值被改变了,后来又试了一下
array = copy.deepcopy(array)
仍然没有作用,然后print(f”segments: {segments}”),看到输出如下信息:
segments: <generator object WhisperModel.generate_segments at 0x000001F2F518A3B0>
原来segments是一个生成器,生成器只能被迭代一次,如果在之前的函数中已经迭代过这个生成器,那么后面那个函数再尝试迭代时,它就为空了。所以第二个函数永远无法再引用segments,
解决方法:将segments生成器转换为一个列表,这样就可以多次迭代了,只需要再segments下面添加一行代码即可:
segments = list(segments)
这样下面的多个函数再调用segments的时候,值都是一样的,