Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归函数中Python奇怪的屈服行为_Python_Recursion_Yield - Fatal编程技术网

递归函数中Python奇怪的屈服行为

递归函数中Python奇怪的屈服行为,python,recursion,yield,Python,Recursion,Yield,这只是一个演示代码,用于理解递归函数中的屈服行为。我希望它返回一个iterable列表[5,4,3],但它在第一次迭代时停止,只返回[5] 有人能解释为什么会这样吗 def yield_test(input): if input > 3: yield_test(input-1) yield input print(list(yield_test(5))) 输出:[5] 预期产出: [5,4,3]您需要从yield_test()中屈服,并在函数中颠倒屈服

这只是一个演示代码,用于理解递归函数中的屈服行为。我希望它返回一个iterable列表[5,4,3],但它在第一次迭代时停止,只返回[5]

有人能解释为什么会这样吗

def yield_test(input):
    if input > 3:
        yield_test(input-1)

    yield input

print(list(yield_test(5)))
输出:[5] 预期产出:
[5,4,3]

您需要
从yield_test()中屈服
,并在函数中颠倒
屈服
的顺序:

def yield_test(input):
    yield input

    if input > 3:
        yield from yield_test(input-1)

您需要
yield from yield_test()
并在函数中反转
yield
s的顺序:

def yield_test(input):
    yield input

    if input > 3:
        yield from yield_test(input-1)

yield是一个与return类似的关键字,但函数将返回一个生成器。不是实际值。yield是一个与return类似的关键字,但函数将返回一个生成器。不是实际值。