如何创建具有变量 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
我正在 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