如何创建具有变量 return 值 Python 的函数?

How can you create a function with variable return values Python?

我正在 Python 中编写一个函数,但无法找出实现允许用户选择是否计算额外数据位的参数的最佳方法。大致长这样

def function(initial_sol, tolerance, compute_extra_data = False) :
 
        solution = initial_sol
        difference = 1
        extra_data = []

        while difference > tolerance :

                newsolution = step_func(solution)
                difference = diff_func(newsolution, solution)

                if compute_extra_data :
                        extra_data.append(extra_function(newsolution))

                solution = newsolution

        return solution, extra_data

由于 extra_function 在我的实际代码中是一个更昂贵的操作,并且提供了用户可能不一定想要的额外信息,所以我希望它是可选的。但是,我不确定这是否是实现它的好方法。我也很想这样做,如果 compute_extra_data = False,return 值将只是 solution 对象,而不是包含两个项目的元组。

非常感谢 suggestions/ideas,谢谢!

我会让你的函数通用。不是采用布尔参数来决定是否附加到列表,而是采用任意函数来调用每个解决方案。

def function(initial_sol, tolerance, f=None):
    solution = initial_sol
    difference = 1
    while difference > tolerance
        newsolution = step_func(solution)
        difference = diff_func(newsolution, solution)
        if f is not None:
            f(newsolution)

        solution = newsolution

    return solution

那你可以打电话

s = function(x, t)

extra_data = []
s = function(x, lambda x: extra_data.append(extrafunction(x)))

虽然反复检查 f is not None 是否比无条件调用一个普通函数更便宜,但您也可以编写

def function(initial_sol, tolerance, f=lambda x: x):
    solution = initial_sol
    difference = 1
    while difference > tolerance
        newsolution = step_func(solution)
        difference = diff_func(newsolution, solution)
        f(newsolution)

        solution = newsolution

    return solution

因为在 newsolution 上调用身份函数只是一个相对昂贵的 no-op。

如何将输出包装在字典中?

... 
    out ={'solution': solution }
    if compute_extra_data:
        out['extra_data']: extra_data
    return out