使用和不使用全局变量的Python递归

使用和不使用全局变量的Python递归,python,recursion,global-variables,Python,Recursion,Global Variables,到目前为止,我的代码是: import statistics def nested_median(nest, templist=[]): if not nest: pass elif isinstance (nest[0], list): nested_median(nest[0]), nested_median(nest[1:]) elif isinstance (nest[0], int): te

到目前为止,我的代码是:

import statistics

def nested_median(nest, templist=[]):
    
    if not nest:
        pass
    
    elif isinstance (nest[0], list):
        nested_median(nest[0]), nested_median(nest[1:])

    elif isinstance (nest[0], int):
        templist.append(nest[0])
        nested_median(nest[1:])
        return statistics.median(templist)

    else:
        nested_median(nest[1:])
我正在尝试编写一个程序,该程序将任意嵌套的列表作为输入,并返回列表和/或子列表中所有整数的中值,同时忽略所有其他元素。例如:

nested_median([3,2,"Hello",[1,5],("Hello", "world"),5,9.3]) == 3
我在上面提出了一个使用全局变量的解决方案,但这只适用于一个函数调用,因为templist没有被清除。我有两个问题:

  • 如何在函数调用之间清除全局变量

  • 我如何在不使用全局变量的情况下实现它


  • 您描述为“变量未清除”的问题是“可变默认参数”问题。许多博客和教程都是关于它的。请看这里:


    下面是一个递归生成器,用于展平任意嵌套列表,稍微修改后只返回整数

    def ifl(x):
        if isinstance(x, list):  # to flatten tuples as well: isinstance(x, (list, tuple))
            for item in x:
                yield from ifl(item)
        elif isinstance(x, int):
            yield x
        # else: ignore x
    
    test = [3,2,"Hello",[1,5],("Hello", "world"),5,9.3]
    ints = list(ifl(test))  # [3, 2, 1, 5, 5]
    # ... compute median
    

    您描述为“变量未清除”的问题是“可变默认参数”问题。许多博客和教程都是关于它的。请看这里:


    下面是一个递归生成器,用于展平任意嵌套列表,稍微修改后只返回整数

    def ifl(x):
        if isinstance(x, list):  # to flatten tuples as well: isinstance(x, (list, tuple))
            for item in x:
                yield from ifl(item)
        elif isinstance(x, int):
            yield x
        # else: ignore x
    
    test = [3,2,"Hello",[1,5],("Hello", "world"),5,9.3]
    ints = list(ifl(test))  # [3, 2, 1, 5, 5]
    # ... compute median
    

    您没有使用全局变量。提示:有两个任务要完成,请将它们分开:1)从嵌套列表中读取感兴趣的整数,2)计算干净列表的中值。您没有使用全局变量。提示:有两个任务要完成,请将它们分开:1)从嵌套列表中读取感兴趣的整数,2)计算清洁列表的中位数。