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

问题描述:

对于可以用两种“种类”参数调用的函数,Python中的最佳实践是什么?可以用两种不同方式调用函数的Python最佳实践

举个例子,我有一个功能run_fit,可以采取一个radius参数,适合在半径所有点或可以采取region参数,适合在所有点自定义region

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

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

+0

也许你可以带两个参数,一个是你传入的参数,另一个是你传入的参数的布尔代表? – Natecat

是的,使用关键字参数,然后使用断言来确保传递正确的参数组合。

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" 

但我个人认为第一个版本是更具可读性。

这个问题不仅仅适用于python编程,它可以应用于任何编程。如果一个函数做了两个不同的事情,比如拟合一个半径和拟合一个区域,最好将函数分成两个不同的函数,并给每个类似fit_raidus和fit_region的名称赋予更有意义的名称,而不是像run_fit这样的通用名称。