Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 实现同一功能的不同版本的最佳方法是什么?_Python_Function - Fatal编程技术网

Python 实现同一功能的不同版本的最佳方法是什么?

Python 实现同一功能的不同版本的最佳方法是什么?,python,function,Python,Function,假设我有以下函数- def add(a, b): if isinstance(a, (float,int)) and isinstance(b, (float,int)): return (a+b) else: raise TypeError("Invalid Parameters") 现在,该功能用于两种情况- i) 当用户调用它并可能提供除float或real以外的输入时 ii)当函数在内部使用时(多次),我完全确定输入参数将仅为int或fl

假设我有以下函数-

def add(a, b):
    if isinstance(a, (float,int)) and isinstance(b, (float,int)):
        return (a+b)
    else:
        raise TypeError("Invalid Parameters")
现在,该功能用于两种情况-

i) 当用户调用它并可能提供除float或real以外的输入时

ii)当函数在内部使用时(多次),我完全确定输入参数将仅为int或float

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

或者, 将上面的函数和下面的函数作为一个函数,最好的编写方法是什么

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

上述函数很简单,但可能存在检查次数较多且函数相当大的情况。在这种情况下,我如何避免两次编写同一个函数?

一种方法可能是根据用例使用不同的函数,以防由于其他原因无法依赖try/catch模式(但如果可以,我建议):

如果您只需要一个函数,您必须以某种方式告诉它何时进行检查,何时不进行检查,可能需要一个附加参数:

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)

保持函数不变,在不需要或不希望进行类型检查时,只需使用
+

i) 当用户调用它并可能提供除float或real以外的输入时

使用
c=添加(a,b)

ii)当函数在内部使用时(多次),我完全确定输入参数将仅为int或float

使用
c=a+b


您只需要编写一个函数,并且不会产生超出严格必要的开销。

类型检查有什么问题吗?在复杂的情况下,当存在许多不需要的检查时,它们会导致不必要的开销,但我确信输入是有效的。我想您可以添加第三个可选参数。如果您不想进行错误检查,请使用True调用它,但默认值为False?@YashuSeth在第一种情况下,如果输入不是int或float,您希望函数做什么?@YashuSeth不进行检查,让
+
自行引发错误有什么不对?这就是关键所在。我怎样才能避免两次编写同一个函数?@YashuSeth如果你只想要一个函数,你就必须告诉它是否应该以某种方式进行额外的检查。我已经用这样的例子更新了答案。我明白了,现在我认为这是唯一更好的方法。在三参数版本中,您总是需要传递一个额外的参数并检查其值。这也会带来一些开销,我不确定它是否比你以前的好。反正我没有计时。你能用一个例子详细说明一下吗?add函数只是一个例子。如果函数很复杂,需要进行大量类型检查,那么问题就太广泛了。答案取决于功能和使用模式。
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)