yield有许多用法,原理真的搞不清,个人用了代码比较的方法,总算大致理解它作为函数返回时所起的作用:
在下面例子中,用yield生成器来提高速度(只要函数内有yield,就是生成器了,或者叫迭代器,这个就不纠结了,他只是定义了我要用这个逻辑去找想要的结果,实际定义生成器时,代码并没有执行,执行是取回的时候发生,并且不是一次全部取回,或许是取回其中一个结果,一看已经对了,后面的执行就没有必要了,python也不会去执行了)
题目:
假设题目要求得到每个排列的结果:
考虑组合(非排列),为了避免重复,就如题中举例,划分数有大到小排列,比如6=5+1,这样1+5就不行 递归:从6里取2作为第一个的话,剩余4再划分时,不能超过2,这样就不会出现3,2,1,然后2,3,1再来一遍的情况:
用了yield作为return使用的程序:
不用yield,手动拼接列表,然后返回的程序(为了对比,保持了原来yield,只是注释掉)
两个程序结果一样:
领取专属 10元无门槛券
私享最新 技术干货