当前位置: 首页 > news >正文

Python中的Typing hints

Typing hints使用

0、Markdown语法

  • 标题 # H1 ## H2
  • 粗体 **粗体xx**
  • 斜体 *斜体xx*
  • 引用块 > 引用内容
  • 有序列表
    • 1. 第一项
    • 2. 第二项
  • 无序列表
    • - 第一项
    • - 第二项
  • 代码 ``中间夹的文本
  • 代码块 ````python\java...`
  • 水平线 ---
  • 删除线 ~~世界和平~~
  • 任务列表
    • - [x] 纂写新闻稿
    • - [] 更新网站
    • - [] 联系媒体
  • 连接 [titile](https://xxx/y/zz)
  • 图片 ![alt text](image.jpg)

1、简单类型注解

1.1、变量类型注解
age: int = 23
msg: str = "早安,中国"
user_list: list = [1, 2, 3, 4]
user_tuple: tuple = (1, 2, 3, 4)
1.2、函数(方法)注解
def cal(x: int, y: int) -> int:return x + yprint(cal(1, 2))
print(cal.__annotations__)

2、复杂类型注解

2.1、容器类型

List Tuple Set Dict

stu_list: List[str | int] = ["张三", "李四", "王五", 23, 68, 79]
stu_tuple: Tuple[str, int, bool | str] = ("张三", 23, "ok")
stu_set: Set[str | int] = {"alex", 23}
stu_dict: Dict[str, str | int] = {"name": "alex", "age": 23}
2.2、Union

允许一个变量被注解为多种可能得类型,可用 |代替

stu_list_: List[Union[str, int]] = ["张三", "李四", "王五", 23, 68, 79]
stu_tuple_: Tuple[str, int, Union[bool, str]] = ("张三", 23, "ok")
stu_set_: Set[Union[str, int]] = {"alex", 23}
stu_dict_: Dict[str, Union[str, int]] = {"name": "alex", "age": 23}
2.3、Optional

Optional[Type]等价于Union[Type,None],用于标注可能缺失的值

stu_list__: Optional[List[Union[str, int]]] = ["张三", "李四", "王五", 23, 68, 79]
# stu_list__: Optional[List[Union[str, int]]] = None
stu_tuple__: Optional[Tuple[str, int, Union[bool, str]]] = ("张三", 23, "ok")
stu_set__: Optional[Set[Union[str, int]]] = {"alex", 23}
stu_dict__: Optional[Dict[str, Union[str, int]]] = {"name": "alex", "age": 23}

3、TypeDict

TypedDicttyping模块提供的特殊类型,用于为字典对象提供结构化类型提示,通过继承TypedDict并标注键值类型。

TypeDict可如下问题,让字典:

  • 定义必须的键
  • 指定键的类型
  • 在静态检查时发现问题
  • 保持运行时的灵活性
3.1、基本定义

定义一个模板类,该模板类继承TypedDict

# total表示所有字段是否是必填,True:所有字段必填,False:所有字段非必填
class User(TypedDict, total=False):name: strage: intemail: stris_active: booluser1: User = {"name": "alex","age": 22,"email": "564466411@qq.com","is_active": True,
}user2: User = {"name": "alex",	# name属性都可以不填写
}print(user1,user2)
3.2、继承使用
class BaseUser(TypedDict):id: intmobiles: NotRequired[List[str]]class AdminUser(BaseUser):permissions: List[str]is_superuser: booladmin: AdminUser = {"id": 1,"permissions": ["add","delete","query"],"is_superuser": True,
}print(admin)

4、类型别名

类型别名,一切皆对象,类型也是变量,把类型(复杂的)赋值给另一个变量

var_int = int
stu_age: var_int = 25list_alias = Optional[List[Union[str, int]]]
stu_list___: list_alias = ["alex", 23, "root", 29, 30]
# stu_list___: list_alias = Nonetuple_alias = Optional[Tuple[str, int, Union[bool, str]]]
stu_tuple___: tuple_alias = ("alex", 23, True)
# stu_tuple___: tuple_alias = ("alex", 23, "39")
# stu_tuple___: tuple_alias = None

5、Callable,可调用对象

Callable[[ParamType1, ParamType2,....], ReturnType],用于标注可调用对象(如函数、方法或实现__call__的类)的参数和返回值类型Callable[..., str]表示任意参数类型,用于不确定的场景

def print_name(name: str, age_: int = 23) -> None:print("name:{},age:{}".format(name, age_))def get_name(func: Callable[[str, int], None]) -> Callable[[str, int], None]:return funcget_name(print_name)("alex", 25)

6、TypeVar和Generic 泛型

6.1、泛型 类型变量声明

TypeVar,用于声明可代表多种类型的占位符变量,支持类型参数化

T = TypeVar("T")def print_list(my_list: List[T]) -> None:print("list:{}".format(my_list))
6.2、约束泛型类型变量

不能混用,只能选择其中一种

# 带约束类型的泛型,使用时只能是 int,bool,str其中一种,并且不能混用
T2 = TypeVar("T2", int, bool, str)def print_list2(my_list: List[T2]) -> None:print("list:{}".format(my_list))print_list2([1, 3, 2])
print_list2([True, False, False])
print_list2(["a", "b", "c"])
# print_list2([1, 2, 3, "str"]) # 不能混用,提示有问题
6.3、泛型类继承

继承Generic[T]并应用泛型类型变量到类成员

T3 = TypeVar("T3")class Student(Generic[T3]):def __init__(self, name: T3) -> None:self.name = namedef get_name(self) -> T3:return self.namestu = Student[str]("alex")
# stu = Student("alex")
print(stu.get_name())# 比较Student2类与Student类
# 功能一样,但灵活性没有Student好,Student的可以指代任何类型,如int,float,str等等,而Student2只能是str,这就是泛型类的好处
class Student2:def __init__(self, name: str) -> None:self.name = namedef get_name(self) -> str:return self.namestu3 = Student2("alex")
print(stu3.get_name())
http://www.sczhlp.com/news/24857/

相关文章:

  • windows上运行npm运行 报错:“无法加载文件 ...\npm.ps1,因为在此系统上禁止运行脚本。”
  • 微软雅黑做网站会涉及到侵权吗太原网络推广公司哪家好
  • 销售营销网站整站优化服务
  • 玩具公司网站开发论文百度输入法
  • 电子商务网站建设实训心得哪个平台可以免费打广告
  • IPtables 实现负载均衡
  • 最新版MedCalc 23.1.7 从安装到中文界面全流程教程
  • Claude Code接入第三方接口中转平台Key
  • 网站不备案访问搜狗登录入口
  • 人力资源公司网站建设方案seo的搜索排名影响因素主要有
  • 专业做网站设计哪家好搜索百度一下
  • h5网站模板怎么建立一个网站
  • 网站建设教程特别棒湖南岚鸿权 威免费网页代码大全
  • 做网站的公司销售话术海外市场推广方案
  • 网站建设需要多少g合适杭州网站建设方案优化
  • 牙科医院网站开发优化网络软件
  • 淘宝客网站如何做SEO广州seo招聘网
  • 机械臂贴身小秘书,PROFINET转Modbus助力上位机对接KUKA机械臂
  • LobeChat接入第三方接口中转平台Key
  • Thunder_S
  • 行业网站制作长沙新媒体营销
  • 论坛网站建设方案广州seo关键词
  • 网站建设经费申请报告公司网站如何推广
  • 如何做ibanker网站品牌策划的五个步骤
  • 网站如何建立sem 推广软件
  • 全国网站建设公司网络营销买什么好
  • wordpress qq群seo网站内容优化
  • 做网站后台系统的规范网站建设排名优化
  • dblens 业界首创AI表结构变更审查,智能评估影响,助力开发效率跃升。
  • 数字先锋 | 携手扎囊县教育局,天翼云电脑叩响教育均衡发展之门!