2016-02-24 48 views
-2

假设我有以下功能 -实现同一功能的不同版本的最佳方式是什么?

def add(a, b): 
    if isinstance(a, (float,int)) and isinstance(b, (float,int)): 
     return (a+b) 
    else: 
     raise TypeError("Invalid Parameters") 

现在,这个功能是在两种情况下使用 -

我)当用户呼叫,并可能给比float或real其他输入。 ii)当内部使用函数(很多次)时,我完全确定输入参数只能是int或float。

如何在内部使用函数时避免无用的类型检查?

或者, 什么是写作的最佳方式,上述功能和以下功能作为单一功能?

def add(a, b): 
    return (a+b) 

上述功能很简单,但可能会出现检查次数和功能相当大的情况。在这种情况下,我怎样避免两次写同一个函数?

+1

类型检查有什么问题? – Alex

+0

当有许多不需要的检查时,它们会在复杂情况下导致不必要的开销,但我确信输入有效。 –

+1

我想你*可以*添加第三个可选参数。如果您不想进行错误检查,请使用True调用它,但默认值为False? – zondo

回答

3

一种方法可能是必须根据用例使用函数,以防由于其他原因而无法依赖try/catch模式(但如果可以,我会提示它):

def add_check(a, b): 
    if isinstance(a, (float, int)) and isinstance(b, (float, int)): 
     return add(a, b) 

def add(a, b): 
    return (a+b) 

如果你只是想要一个功能,您就必须以某种方式告诉它何时做检查,何时不,也许是一个额外的参数:

def add(a, b, type_check=False): 
    if type_check: 
     if not isinstance(a, (float, int)) or not isinstance(b, (float, int)): 
      raise TypeError("Invalid Parameters") 
    return add(a, b) 
+0

这是整个问题。我怎样才能避免两次写同一个函数? –

+0

@YashuSeth如果你只想要一个函数,你必须告诉它它是否应该执行额外的检查或不以某种方式。我用这样的例子更新了答案。 – olofom

+0

@oloform我明白了,现在我认为这是做到这一点的唯一更好的方法。 –

1

保留功能,则使用只需+当你不需要或想要类型检查。

i)当用户调用它并可能给出的输入不是浮点数或实数。

使用c = add(a, b)

II)在函数内部(多次使用),我完全确定的输入参数就只能是整数或浮点数。

使用c = a + b

你只需要编写一个功能和更多的开销不超过incurre绝对必要的。

+0

您可以请一个例子来阐述一下吗? –

+0

add函数只是一个例子。如果该功能与多种类型检查相比很复杂呢? –

+1

然后问题太广泛了。答案取决于功能和使用模式。 – Goyo

相关问题