当我在代码中引入 yield 它在 python 中不起作用

问题描述

在下面的代码中,在置换函数的 if 部分。如果我尝试使用 yield 它不起作用,但如果我使用 print 它起作用吗?可以有人代码有什么问题吗? 提前致谢!

def permute(li,l,r):
    if l==r:
        ele = ''.join(li)
        print(ele)
        yield ele
    else:
        for i in range(l,r+1):
            #print(i)
            li[i],li[l]=li[l],li[i]
            permute(li,l+1,r)
            li[i],li[i]

class Solution:
    def find_permutation(self,S):
        # Code here
        s = list(S)
        f = []
        for i in permute(s,len(s)-1):
            print(i)
            f.append(i)
        return f



if __name__ == '__main__':
    t=int(input())
    for i in range(t):
        S=input()
        ob = Solution()
        ans = ob.find_permutation(S)
        for i in ans:
            print(i,end=" ")
        print()

解决方法

当对产生结果的函数执行递归调用时,您需要在递归调用之前使用 yield from。否则,您的递归调用产生的数据将被忽略:

def permute(li,l,r):
    if l==r:
        ele = ''.join(li)
        yield ele
    else:
        for i in range(l,r+1):
            li[i],li[l]=li[l],li[i]
            yield from permute(li,l+1,r)  #  change here
            li[i],li[i]