不一样的函数返回值~yield关键字*核心讲解(内含debug的git图展示)

Felicite ·
更新时间:2024-11-14
· 653 次阅读

文章目录函数返回值涉及的关键字return关键字yield关键字yield的实现展示(代码+gif)代码实例Debug效果yield返回的数据类型——数据知多少? QQ:3020889729 小蔡 函数返回值涉及的关键字 return关键字

含义/用法:返回或中断

用途 含义
返回单个数据 直接返回该数据类型的对象(比如reutrn 0 # 意味着返回整型对象(也可以返回list等数据))
返回多个数据 直接返回包含所有数据的元组(比如reutrn 0, 1 # 意味着返回二元元组对象)
用于中断程序 直接返回None——形式:return None 或者 return
yield关键字

含义/用法:yield返回的是一个生成器对象——然后通过__next__方法获取一个数据,再次调用__next__获取下一个数据——返回的对象是可迭代的,迭代通过__next__实现

用途 含义
返回数据 直接返回该数据的一个生成器对象
补充说明 可以使用生成器对象下的__next__()方法读取生成器下当前的返回值

具体实现下,yield的运行本质是首先开始返回一个生成器对象,然后暂停关于yeild部分的函数内容,直到使用了__next__方法后,才会继续yield部分函数的运行,然后得到一个数据并返回,接着又暂停,进而反复运行,直到yield的部分彻底运行结束(也就是不再返回任何值)。如果已经没有需要返回的数据了,再使用__next__会发出错误。

yield的实现展示(代码+gif) 代码实例 '''为了理解yield实际的工作路径,采用调试的方法来看一下 其次,我们是用一个for循环来比较它与return的区别之处 ''' def text_func_return(in_num): '''采用for循环得到一个阶乘的每一项的列表——return ''' results = [] # 列表输出多个数据,如果是采用return x1, x2, x3返回的数据会打包成元组 for i in range(1, in_num+1): results.append((i*1)) return results def text_func_yield(in_num): '''采用for循环输出一个阶乘的每一项——yield ''' for i in range(1, in_num+1): yield i if __name__ == "__main__": input_data = int(input('请输入一个阶乘最高项: ')) print(text_func_return(input_data)) iters_elem = text_func_yield(input_data) print(iters_elem.__next__()) # 打印第一次yield返回的数据 print(iters_elem.__next__()) # 打印第二次yield返回的数据

输出结果:
请输入一个阶乘最高项: 5
[1, 2, 3, 4, 5]
1
2

Debug效果

首先在打印yield返回的生成器的值的每一个print处打上断点,然后进入debug模式,进行调试。
然后输入阶乘项,进入调试窗口部分,默认运行到断电处停下载——当点击下一步——才可以看到程序一步步的向下运行,直到结束。
(下面就是debug生成器的效果:每调用一次__next__,yield方才返回一个实际的数据(一开始只是返回了一个生成器对象,只有对生成器对象使用__next__方法才会开始返回具体的数据))
在这里插入图片描述

yield返回的数据类型——数据知多少?

这里作为对yield返回数据的复习——首先返回的是一个生成器对象,然后每一次使用方法返回的是原数据。
就用上边的代码——实现数据类型的判断。

'''为了理解yield实际的工作路径,我们采用调试的方法来看一下 其次,我们用一个for循环,看看它与return的区别之处 ''' def text_func_return(in_num): '''采用for循环得到一个阶乘的每一项的列表——return ''' results = [] for i in range(1, in_num+1): results.append((i*1)) return results def text_func_yield(in_num): '''采用for循环输出一个阶乘的每一项——yield ''' for i in range(1, in_num+1): yield i if __name__ == "__main__": input_data = int(input('请输入一个阶乘最高项: ')) print(text_func_return(input_data)) iters_elem = text_func_yield(input_data) # print(iters_elem.__next__()) # 打印第一次yield返回的数据 # print(iters_elem.__next__()) # 打印第二次yield返回的数据 print(type(iters_elem)) # yield一开始返回的iters_elem的数据类型 print(type(iters_elem.__next__())) # yield返回的数据的类型 print(type(iters_elem.__next__()))

结果:说明输出的数据本身类型没有发生变化——也就是yield返回的数据是单个原始数据
请输入一个阶乘最高项: 5
[1, 2, 3, 4, 5]



作者:笔岸柳影



debug 展示 函数 返回值 yield Git

需要 登录 后方可回复, 如果你还没有账号请 注册新账号