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)