概念
- 它允许您为一个函数提供多个实现,这些实现基于参数的类型。
实现
下面是一个使用functools.singledispatch的例子
from functools import singledispatch@singledispatch
def add(x, y):print("Default implementation for integers")return x + y@add.register(int)
def _(x, y):print("Implementation for integers")return x + y@add.register(str)
def _(x, y):print("Implementation for strings")return x + yprint(add(1, 2)) # Output: Default implementation for integers -> 3print(add("hello", "world")) # Output: Implementation for strings -> helloworldprint(add(1.5, 2.5)) # Output: Default implementation for integers -> 4print(add("foo", "bar")) # Output: Default implementation for integers -> foobar
在这个例子中,我们定义了一个名为add的函数,并使用@singledispatch装饰器将其转换为单分派泛型函数。
我们为该函数提供了两个实现:一个默认实现和两个特定于整数和字符串类型的实现。当我们调用add函数时,它将根据参数的类型选择适当的实现。如果参数是整数或浮点数,则将调用默认实现;如果参数是字符串,则将调用特定于字符串类型的实现。