注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus
Python标准库系列将分享90个日常常用的内置模块,从介绍、特性和作用、使用方法以及应用场景来介绍标准库的使用,代码示例在最新的Python3.11版本上运行,其他低版本Python可能存在差异。
标准库-内置库(Standard Library):内置库是指Python自带的标准库,包含了大量常用的模块和函数,例如`os`、`sys`、`re`、`math`、`random`等。这些模块和函数可以直接import进来使用,无需下载或安装。
第三方库(Third-party Library):第三方库是指由第三方开发者编写的Python库。这些库可以通过pip或conda等包管理工具进行下载和安装,例如`numpy`、`pandas`、`matplotlib`、`django`等。即需要pip install安装后才能使用的都是第三方库。
在前面的文章《Python基础之开发必备-标准库(内置模块)汇总详细介绍》中介绍过Python有上百个标准库(内置模块),本篇的typing即是常用的模块之一。其他更多的Python3标准库实践资料请关注公众号:CTO Plus查看。
查看标准库清单:https://mp.weixin.qq.com/s/E4HD4_aPWx0Ok3s-Uf28NQ
Python3 标准库 `typing` 是用来标注静态类型注解的模块。在 Python 3.5 版本后,加入了 `typing` 模块,它提供了类型注解和检查,能够在编码时检测变量类型的错误,并提供丰富的类型提示信息。
`typing` 模块中包含了许多类型,如常见的 `List`、`Tuple`、`Dict`、`Set` 等类型,也包含了一些特别的类型,如 `Union`、`Optional`、`Any` 等类型。此外,`typing` 模块还提供了许多类型操作符,如 `Callable`、`TypeVar`、`Generic` 等类型操作符,可以满足复杂类型的需求。
使用类型注解可以帮助开发者更好地理解代码,更快速地发现代码问题,可以提高代码的可读性和可维护性。`typing` 模块为 Python 代码添加了类型注解,提供了丰富的类型提示信息,可以使代码更容易维护和调试。
在 Python 编程中,`typing` 模块主要有以下特点:
(1) 使用常见类型及其别名
from inner_module_def_datastruct import WEIXIN_URL, AUTHOR , AGE
from typing import List, Tuple, Dict, Set
# 可以使用typing中的基本类型来声明变量的类型,如int,float,bool,str等
name: str = AUTHOR
age: int = 25
height: float = 1.75
active: bool = True
blog: str = WEIXIN_URL
numbers_list: List[int] = [1, 2, 3, 4, 5]
numbers_tuple: Tuple[int, float, str] = (1, 1.0, "1")
numbers_dict: Dict[str, int] = {"one": 1, "two": 2, "three": 3}
numbers_set: Set[str] = {"one", "two", "three"}
def add_numbers(numbers: List[int]) -> int:
return sum(numbers)
print(add_numbers(numbers_list))
(2) 使用特定类型
from typing import Union, Optional, Any
# Union 表示联合类型,可以用来表示多种不同类型的变量(定义一个变量可以是多个类型中的任何一个);而 Any 则表示任意类型,可以用来表示一个变量可以是任何类型。
result: Union[str, int, float] = 1
value: Optional[int] = None
anything: Any = 42
if result == 1:
# result is now a string, not an int.
result = "One"
(3) 使用类型运算符
from typing import TypeVar, Generic
T = TypeVar('T')
class Singleton(Generic[T]):
_instance: T = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls, *args, **kwargs)
return cls._instance
class Foo(Singleton):
pass
class Bar(Singleton):
pass
foo1 = Foo()
foo2 = Foo()
bar = Bar()
print(foo1 is foo2) # True
print(foo1 is bar) # False
(4) 函数参数类型声明
你可以在函数定义中使用typing来声明函数参数的类型:
def my_func(num: int, my_str: str) -> bool:
if num > 10 and my_str == WEIXIN_URL:
return True
else:
return False
print(my_func(AGE, WEIXIN_URL)) # True
print(my_func(1.2, False)) # False
在这个例子中,`num`和`my_str`的类型被指定为`int`和`str`,函数的返回类型被指定为`bool`。在实际传参时,虽然也可以传递与参数类型声明不一致的参数,但不推荐这么做,同时编译器也聪明的给出了不一样的提示,如下:
(5) 可选参数类型声明
有时候,你可能想定义一个可以为None的可选参数。你可以使用Optional类型实现这个功能:
from typing import Optional
def my_optional_func(num: Optional[int]) -> bool:
if num is not None and num > 10:
return True
else:
return False
# my_optional_func() # 虽然参数可以为None,但依然需要传递None,否则报错:TypeError: my_optional_func() missing 1 required positional argument: 'num'
my_optional_func(None)
在这个例子中,`num`被定义为可选的`int`类型,因此它可以为None或整数。
(6) 生成器类型声明
你可以使用typing中的`Generator`类型来声明一个生成器:
from typing import Generator
def my_generator()->Generator[int, None, None]:
yield 1
yield
yield False
yield lambda a,b:a>b
g = my_generator()
# 使用__next__方法获取生成器的元素
print(g.__next__()) # 1
print(g.__next__()) # None
print(g.__next__()) # False
f = g.__next__()
print(f) # . at 0x00000278608D93A0>
print(f(22,11)) # 调用函数,输出: True
# print(g.__next__()) # 如果生成器为空,再取则抛StopIteration异常
在这个例子中,my_generator函数返回一个生成器对象,它将生成int类型的值。
(7) 类型别名
你可以使用typing中的`TypeAlias`来定义一个类型别名:
from typing import TypeAlias
# Python3.10 版中的新函数
# MyInt = TypeAlias(int, "MyInt") # 错误用法 TypeError: Cannot instantiate typing.TypeAlias
MyInt: TypeAlias = list[int]
MyInt2: TypeAlias = int
print(type(MyInt), type(MyInt2)) #
num: MyInt2 = 1234
print(type(num), num) # 1234
MyType = int
num2: MyType = 12312
print(type(MyType), type(num2), num2) # 12312
在这个例子中,`MyInt`是一个别名,与`int`类型完全相同。
这些只是Python中typing模块提供的一小部分功能,如果您想更深入地学习,请查看Python官方文档或其他深入学习资源。
`typing` 模块适用于许多场景,包括:
总之,Python3 标准库 `typing` 模块提供了一种方法来声明变量、参数和函数的类型可以帮助开发者更好地理解代码,并提供丰富的类型提示信息。它可以作为一种类型注解的实现方式,提高代码的可读性和可维护性,并通过强类型检查,防止类型错误。此外,`typing` 模块还支持复杂类型的实现,可以通过类型参数和类型操作符来支持泛型编程。
完整的Python3.11标准库代码示例,请在公众号CTO Plus后台回复:py标准库
Python专栏
https://blog.csdn.net/zhouruifu2015/category_5742543
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接
更多精彩,关注我公号,一起学习、成长
关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s?__biz=MzIyMzQ5MTY4OQ==&mid=2247484278&idx=1&sn=2b774f789b4c7a2ccf10e465a1b9def6&chksm=e81c2070df6ba966026fd7851efa824b5e2704e3fd34e76228ca4ce64d93f7964cd4abe60f2b#rd
标准库系列-推荐阅读:
Python基础之开发必备-标准库(内置模块)汇总详细介绍(持续更新……)
Python标准库45. math模块实践
Python标准库87. typing模块实践
Python标准库88. 数据库 (sqlite3) 实践
Python标准库89. signal模块实践以及与Linux的信号
看这一篇就够了Python的35个关键字的含义、作用、特性以及使用方式详解
推荐阅读:
Python基础之最新的73个内置函数(1)
Python基础之最新的73个内置函数(2)
Python基础之最新的73个内置函数(3)
Python基础之最新的73个内置函数(4)
Python基础之最新的73个内置函数(5)
Python基础之最新的73个内置函数(6)
Python基础之最新的73个内置函数(7)