yieldli
else:
foriinrange(len(li)):
li[0],li[i]= li[i],li[0]
foritem inpermutations(li[1:]):
yield[li[0]]+ item
foritem inpermutations(range(3)):
printitem
代码的结果为:

的send()和close()方法
中还有两个很重要的方法:send()和close()。
send(value):
从前面了解到,next()方法可以恢复状态并继续执行,其实send()是除next()外另一个恢复的方法。
Python 2.5中,yield语句变成了yield表达式,也就是说yield可以有一个值,而这个值就是send()方法的参数,所以send(None)和next()是等效的。同样,next()和send()的返回值都是yield语句处的参数(yielded value)
关于send()方法需要注意的是:调用send传入非None值前,必须处于挂起状态,否则将抛出异常。也就是说,第一次调用时,要使用next()语句或send(None),因为没有yield语句来接收这个值。
close():
这个方法用于关闭,对关闭的后再次调用next或send将抛出StopIteration异常。
下面看看这两个方法的使用:

总结
本文介绍了Python迭代器和的相关内容。
通过实现迭代器协议对应的__iter__()和next()方法,可以自定义迭代器类型。对于可迭代对象,for语句可以通过iter()方法获取迭代器,并且通过next()方法获得容器的下一个元素。
像列表这种序列类型的对象,可迭代对象和迭代器对象是相互独立存在的,在迭代的过程中各个迭代器相互独立;但是,有的可迭代对象本身又是迭代器对象,那么迭代器就没法独立使用。
itertools模块提供了一系列迭代器,能够帮助用户轻松地使用排列、组合、笛卡尔积或其他组合结构。
是一种特殊的迭代器,内部支持了协议,不需要明确定义__iter__()和next()方法。
通过函数产生,函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果。
来自:田小计划
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-59867-3.html
自己一不留神成为首富就不知道话怎么讲了
见者有份吗