Python生成器
我在理解这台发电机的工作原理时遇到问题。它究竟是如何产生排列的?此外,在代码中,Python生成器,python,generator,permutation,Python,Generator,Permutation,我在理解这台发电机的工作原理时遇到问题。它究竟是如何产生排列的?此外,在代码中,产生[items[i]]+cc的是什么?产生到哪里?每次调用yield[items[i]]+cc时,列表中添加了什么内容?(有什么补充吗?)对不起,我真的很困惑:( 很抱歉问了这么一个新手问题,我希望有人能帮助我更好地理解这个问题!谢谢 def permutations(items): n = len if n == 0: yield[] else: for
产生[items[i]]+cc的是什么?产生到哪里?每次调用yield[items[i]]+cc
时,列表中添加了什么内容?(有什么补充吗?)对不起,我真的很困惑:(
很抱歉问了这么一个新手问题,我希望有人能帮助我更好地理解这个问题!谢谢
def permutations(items):
n = len
if n == 0:
yield[]
else:
for i in range(len(items)):
for cc in permutations(items[:i] + items[i+1:]:
yield[items[i]] + cc
for p in permutations(['r','e','d']):
print ''.join(p)
yield
是一种语句,如print
或return
假设您有一个函数:
def blah(x):
return x
return x + 1
return x + 2
return x + 3
然后你称之为:
print blah(10)
当函数完成时,它将只返回10,并且永远不会到达11、12或13
当您使用yield时,您实际上是在说,“假设这个函数是一个列表…”,然后从函数中使用yield
语句来返回一个又一个值,直到它用完为止,而不是只返回一个值
因此:
将打印10,然后打印11、12和13
因此置换函数一次生成一个值,然后生成器函数外部的for循环使用该值。在我第一次开始学习时对我很有用。此代码段中有一些错误。n
应该是len(项)
循环的第二个中缺少一个右括号,也解释了许多关于生成器的内容;-)您的函数是递归幂集算法。有一个很好的描述。
def gen_blah(x):
yield x
yield x+1
yield x+2
yield x+3
for i in gen_blah(10):
print i