Python - AI 助手

Python functools singledispatch() 函数



Python 的 `singledispatch()` 函数可以根据参数的数据类型执行不同的操作。如果希望一个函数根据参数类型表现出不同的行为,这个装饰器允许我们编写根据参数类型分派操作的函数。

如果实现用类型表示,则装饰器会自动确定参数类型。否则,类型本身将作为参数传递给装饰器。

语法

以下是 `singledispatch()` 函数的语法。

@singledispatch

参数

该 `singledispatch()` 装饰器用于处理默认情况。

返回值

此装饰器返回特定类型的函数以处理默认情况。

示例 1

此代码使用 `singledispatch()` 函数来确定不同的数据类型。此函数对整数、字符串和其他类型进行唯一处理。

from functools import singledispatch
@singledispatch
def process_data(data):
    return f"processing for {data}"

@process_data.register(int)
def _(data):
    return f"integer: {data}"

@process_data.register(str)
def _(data):
    return f"string: {data}"
print(process_data(25))  
print(process_data("Welcome to Tutorialspoint"))   
print(process_data([4, 3, 6]))

输出

结果如下所示:

integer: 25
string: Welcome to Tutorialspoint
processing for [4, 3, 6]

示例 2

在下面的示例中,我们使用 `singledispatch()` 函数管理不同的数据类型。此函数对列表和字典有特定的实现。

from functools import singledispatch

@singledispatch
def process_data(data): return f"processing for {data}"

@process_data.register(int)
def _(data): return f"integer: {data}"
@process_data.register(float)
def _(data): return f"float: {data}"

print(process_data(10)) 
print(process_data(10.5)) 
print(process_data(1.22))

输出

代码如下所示:

integer: 10
float: 10.5
float: 1.22

示例 3

在这里,我们在 `singledispatch()` 函数中指定不同的集合类型。`process_data` 函数使用此函数来确定数据类型。

from functools import singledispatch

@singledispatch
def process_data(data): return f"processing for {data}"
@process_data.register(list)
def _(data): return f"list: {data}"
@process_data.register(dict)
def _(data): return f"dict: {data}"

print(process_data([4, 7, 9, 3]))  
print(process_data({"key": "value"})) 
print(process_data(64))

输出

输出如下所示:

list: [4, 7, 9, 3]
dict: {'key': 'value'}
processing for 64
python_modules.htm
广告