使用Python实现泛型函数可以通过使用类型提示(Type Hinting)来实现,并且Python 3.5之后的版本官方支持了泛型类型提示。以下是操作步骤:
1. 引入类型提示
在函数定义的时候,可以使用类型提示来指明函数的参数类型和返回值类型。例如:
def greet(name: str) -> str:
return 'Hello, ' + name
上面的代码中,我们使用str
来指明greet函数的参数类型和返回值类型。但是在实现泛型函数的时候,我们需要更加通用化的类型提示。
2. 使用泛型类型提示
在Python 3.5之后的版本,官方支持了泛型类型提示。我们可以使用typing
模块来引入泛型类型提示。例如:
from typing import TypeVar
T = TypeVar('T')
def first(l: List[T]) -> Optional[T]:
if l:
return l[0]
else:
return None
上面的代码中,List[T]
表示一个由任意类型T
的元素组成的列表,Optional[T]
表示一个可能为空的T
类型的变量。
3. 使用泛型函数
使用泛型函数可以提高函数的通用性。例如:
def repeat(elem: T, n: int) -> List[T]:
return [elem]*n
上面的代码中,T
表示任意类型。repeat
函数可以重复一个任意类型的元素,并返回一个含有n个该元素的列表。
示例1
from typing import List, Tuple
def safe_head(l: List[T]) -> Tuple[T, List[T]]:
if l:
return l[0], l[1:]
else:
return None, l
# 测试
print(safe_head([1, 2, 3])) # (1, [2, 3])
print(safe_head([])) # (None, [])
上面的例子中,我们定义了一个名为safe_head的函数,他接收一个列表,并返回这个列表的首个元素和去除首个元素的列表。
示例2
from typing import Union
def sum_two(x: Union[str, int], y: Union[str, int]) -> Union[str, int]:
return x + y
# 测试
print(sum_two(1, 2)) # 3
print(sum_two('1', '2')) # '12'
上面的函数中,我们定义了一个名为sum_two的函数,他接收两个参数,根据参数的类型分配返回值类型。所以当x和y都是int型时,函数返回的是int型;当x和y都是str型时,函数返回的是str型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用python如何实现泛型函数 - Python技术站