python中的函数签名

时间:2016-04-02 15:50:10

标签: python c++

在C ++中,只要签名不同,就可以创建两个具有相同名称的函数。 例如,var match = _.findWhere(response.hotelList.hotel, { code: code }) match.availablePackageList.package = data.hotel.availablePackageList.package; myfunc(int x)不同。 在python中你不能这样做,所以,你需要定义具有不同名称的函数,还是有更好的方法来处理这种情况?

5 个答案:

答案 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':
             ...