Python的最佳实践是什么,可以使用两种“种类”的参数调用函数?
作为一个例子,我有一个函数run_fit
可以采用radius
参数并适合半径中的所有点,或者可以采用region
参数并适合所有点自定义region
。
radius
和region
应该是关键字参数吗?即使总是需要一个?
提出问题的另一种方式是:有没有办法可以捕捉这样一个事实:既不需要论证,但至少必须提供一个论证?
答案 0 :(得分:1)
是的,使用关键字args,然后使用断言来确保传递正确的参数组合。
def run_fit(radius=None, region=None):
if not radius and not region:
raise AssertionError("Supply either radius or region")
if radius and region:
raise AssertionError("Only supply one of radius and region")
您也可以直接编写断言:
assert radius or region, "Supply either radius or region"
assert not (radius and region), "Only supply one of radius or region"
但我个人认为第一个版本更具可读性。
答案 1 :(得分:0)
这个问题不仅适用于python编程,还可以应用于任何编程。如果函数执行两个不同的操作,例如拟合半径和拟合区域,最好将函数拆分为两个不同的函数,并为每个函数提供更有意义的名称,如fit_raidus和fit_region,而不是像run_fit这样的通用名称。