在C ++中,只要签名不同,就可以创建两个具有相同名称的函数。
例如,var match = _.findWhere(response.hotelList.hotel, { code: code })
match.availablePackageList.package = data.hotel.availablePackageList.package;
与myfunc(int x)
不同。
在python中你不能这样做,所以,你需要定义具有不同名称的函数,还是有更好的方法来处理这种情况?
答案 0 :(得分:3)
在Python3.4 +中,您可以使用 <step id="compositeJdbcReaderStep2">
<tasklet>
<chunk reader="compositeItemReader2" writer="itemWriter2" commit-interval="5" />
</tasklet>
</step>
</job>
装饰器,它允许您定义泛型函数,然后针对它注册类型化实现。
来自docs
通用功能:
functools.singledispatch
键入的函数:
>>> from functools import singledispatch
>>> @singledispatch
... def fun(arg, verbose=False):
... if verbose:
... print("Let me just say,", end=" ")
... print(arg)
早期版本的Python没有内置解决方案,但Guido van Rossum blogged关于使用装饰器的python2解决方案。 (编辑:pypi上还有pythons 2.6 - 3.3的3.4功能的后端)
编辑: 当然,使用Python的一个优点是,相同的代码通常可以处理整数和浮点数,而无需在类型上进行显式调度,这也是最近才添加该功能的原因之一。
答案 1 :(得分:2)
Python并不关心参数是整数还是浮点数。它是动态输入的。例如,您可以这样做:
def SquareMe(num):
return num**2
您可以使用任意数字调用此函数。
也可以这样做:
def MultMe(data):
return data*2
这将适用于数字,字符串(!),数组(!!)以及任何可以乘以数字的东西(如果某个类为此提供了方法)。
答案 2 :(得分:1)
在python中,你必须只创建一个方法,但你可以检查哪些参数可以传递,如果它们是不同的参数(即:一个是浮点数,另一个是一个int),那么你可以区分两个函数。在代码中,这看起来像:
def myfunc(*args):
# do something
# when you call the method
myfunc(a1, a2, k1=a3, k2=a4)
# you get:
args = (a1, a2)
kwds = {'k1':a3, 'k2':a4}
#So now lets recreate myfunc to check arguments
def myfunc(*args):
if isinstance(args[0], str): #This is where you determine argument type
# do what you want to do if argument is string
elif isinstance(args[1], int):
# do what you want to do if argument is an int
答案 3 :(得分:1)
正如ForceBru所说Python本身并不关心参数类型,所以如果你这样做,你可以自己处理它:
def myfunc(x):
if(isinstance(x,int)):
print (x, 'int') # as myfunc(int x)
if(isinstance(x,float)):
print (x, 'float') # as myfunc(float x)
myfunc(10) # 10 int
myfunc(10.2) # 10.2 float
myfunc ("A") #
答案 4 :(得分:0)
你可以让函数本身根据参数的类型和数量做不同的事情。
def f (a):
if type (a) == 'float' or type (a) == 'int':
...
if type (a) == 'list':
...
if type (a) == 'dict':
...