我在理解这台发电机的工作原理时遇到了问题。它究竟是如何产生排列的?此外,在代码中,yield[items[i]] + cc
会产生什么以及在哪里?每次调用yield[]
时添加到列表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)
答案 0 :(得分:0)
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
语句返回一个又一个值,直到它用完为止,而不是只返回一个值。
这样:
def gen_blah(x):
yield x
yield x+1
yield x+2
yield x+3
for i in gen_blah(10):
print i
将打印10,然后打印11,12和13。
因此,置换函数一次产生一个值,然后使用生成器函数的for循环 。