函数的Python最佳实践,可以通过两种不同的方式调用

时间:2016-03-27 17:33:09

标签: python function arguments

Python的最佳实践是什么,可以使用两种“种类”的参数调用函数?

作为一个例子,我有一个函数run_fit可以采用radius参数并适合半径中的所有点,或者可以采用region参数并适合所有点自定义region

radiusregion应该是关键字参数吗?即使总是需要一个?

提出问题的另一种方式是:有没有办法可以捕捉这样一个事实:既不需要论证,但至少必须提供一个论证?

2 个答案:

答案 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这样的通用名称。