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