最新动态
Python学习之-typing详解
2024-11-26 04:05  浏览:89

Python的typing模块自Python 3.5开始引入,提供了类型系统的扩展,能够帮助程序员定义变量、函数的参数和返回值类型等。这使得代码更易于理解和检查,也方便了IDE和一些工具进行类型检查,提升了代码的质量。

Python学习之-typing详解

typing 模块是 Python 标准库中用于支持类型提示的模块。它提供了一系列的类型和类型相关的工具,帮助开发者在代码中添加类型提示,以提高代码的可读性和可靠性。

1.1 变量类型注解

 

1.2函数参数和返回值类型注解

 

1.3列表、字典等复杂类型注解

 

List[T],Set[T],Dict[K, V]等:用于注解容器类型,T、K、V分别代表容器内元素类型,字典的键和值类型。

2.1 Tuple[T, …]:用于定长元组。

 

2.2 Optional[T]:用于表示某个类型或None。

 

2.3 Union[T, U, …]:当一个参数可能是多种类型之一时使用。

 

2.4 Callable[[Arg1Type, Arg2Type], ReturnType]:用于表示可调用对象(如函数)的类型签名。

 

3.1 泛型:在定义类或函数时,允许使用类型参数。

 

上述代码的解析:首先从typing模块导入TypeVar、Generic和List。这些是实现自定义泛型类型的核心组件。 T = TypeVar(‘T’):使用TypeVar创建一个类型变量T。这个变量将用于表示Stack类可以接受的元素的类型。TypeVar是定义泛型类和函数时的占位符,表示可以是任意类型。 class Stack(Generic[T]):定义了一个名为Stack的类,这个类是泛型的,可以存储类型为T的元素。这里的T是在之前用TypeVar定义的类型变量。Generic[T]表示Stack是一个泛型类,它的行为可以基于不同的类型T进行参数化。 在__init__方法中,初始化了一个名为_container的列表,这个列表是用于存储栈中元素的容器。List[T]表示_container是一个列表,其中可以存储任意类型为T的元素。 stack = Stackint创建了一个Stack的实例stack,指定T为int类型。这意味着这个stack实例是一个整型的栈,只能存储整数。 通过push方法向栈中压入一个整数1。 通过pop方法从栈中弹出最后一个元素,也就是之前压入的整数1。 这段代码展示了如何使用Python的typing模块创建泛型数据结构,使得这个数据结构变得更加通用和灵活。它可以在保持类型安全的同时,被用于存储任何指定类型的数据。

3.2 NewType

用于定义新类型,以帮助区分具有相同基础类型但应用场景不同的场合。

 

user_id = UserId(524313):使用UserId类型创建一个新的用户ID实例。注意,尽管UserId是基于int的一个新类型,但是这一步看起来和直接对整数进行类型转换(如int(x))相似。然而,UserId(524313)在类型检查时被视为一个与int不同的独立类型。 print(get_user_name(user_id))调用get_user_name函数,并传入之前创建的user_id。然后打印函数的返回值,预期输出为"User#524313"。

typing 模块还提供了一些用于类型检查的工具,如 isinstance()、issubclass() 等。

 

Python 的 typing 模块还支持结构化类型和协议,用于表示对象的形状或接口。可以使用 Protocol 类来定义一个协议,并在参数类型注解中使用。 举个例子,如果我们想定义一个Writable的协议,所有满足这个协议的对象都应该有一个write方法。这里是如何使用Protocol来做这件事的

    以上就是本篇文章【Python学习之-typing详解】的全部内容了,欢迎阅览 ! 文章地址:http://lanlanwork.gawce.com/quote/9016.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 阁恬下移动站 http://lanlanwork.gawce.com/mobile/ , 查看更多