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

【python3】函数注解

Python 函数注解 (Function Annotations)

  • Python 函数注解 (Function Annotations)
      • 函数注解的基本语法
        • 基本语法格式
        • 示例
      • 特殊类型注解
      • 注解信息的存储与访问
      • 函数注解的实际用途
      • 注意事项
      • 小结

函数注解是 Python 的一种特性,用于为函数的参数和返回值添加 元数据。注解通常和类型提示(type hinting)相关联,但它们本质上不会影响程序的实际执行,只是作为一种信息记录。

从Python 3.0开始,函数注解就成为了语言的一部分。在Python 3.5中,加入了类型提示(PEP 484),使得函数注解的使用变得更加规范化和流行。

函数注解的基本语法

函数注解的基本形式是使用冒号 : 来为函数的参数指定类型信息,使用 -> 来为函数的返回值指定类型信息。

基本语法格式
def function_name(param_name: annotation, ...) -> return_annotation:# 函数体pass
  • 参数注解:使用 param_name: annotation 的形式为参数进行注解。
  • 返回值注解:使用 -> return_annotation 的形式为返回值进行注解。
  • 注解通常在函数定义中作为可选的元数据存在,不会对实际的代码逻辑产生影响。
示例
def greet(name: str) -> str:return f"Hello, {name}"def add(x: int, y: int) -> int:return x + ydef process_data(data: list[int]) -> dict[str, int]:# 假设这个函数对输入的数据进行处理并返回一个字典result = {str(index): value for index, value in enumerate(data)}return result
  1. greet 函数

    • 参数 name 注解为 str,表示这个参数应该是一个字符串。
    • 返回值注解为 str,表示该函数返回一个字符串。
  2. add 函数

    • 参数 xy 注解为 int,表示它们应该是整数。
    • 返回值注解为 int,表示返回的结果是一个整数。
  3. process_data 函数

    • 参数 data 注解为 list[int],表示它是一个包含整数的列表。
    • 返回值注解为 dict[str, int],表示它返回一个键为字符串、值为整数的字典。

特殊类型注解

Python通过 typing 模块提供了一些用于类型注解的工具,以帮助描述更加复杂的数据结构。这些注解工具使得我们可以对更加复杂的类型关系进行描述,例如列表、字典、元组、联合类型等。

以下是一些常见的 typing 模块的类型:

  1. List:用来注解列表,例如 List[int] 表示一个包含整数的列表。
  2. Dict:用来注解字典,例如 Dict[str, int] 表示键是字符串、值是整数的字典。
  3. Tuple:用来注解元组,例如 Tuple[int, str] 表示包含一个整数和一个字符串的元组。
  4. Optional:用来注解可选值,即参数可能为指定类型或 None,例如 Optional[str]
  5. Union:用来注解参数可以是多种类型之一,例如 Union[int, str] 表示参数可以是整数或字符串。

例如:

from typing import List, Dict, Tuple, Optional, Uniondef get_user_data(user_id: int) -> Optional[Dict[str, Union[str, int]]]:if user_id == 1:return {"name": "Alice", "age": 30}else:return Nonedef get_coordinates() -> Tuple[float, float]:return (37.7749, -122.4194)
  • get_user_data 函数返回一个 Optional 的字典,这个字典的键是字符串,值是字符串或整数,或者它可能返回 None
  • get_coordinates 函数返回一个元组,包含两个浮点数。

注解信息的存储与访问

函数注解信息存储在函数对象的 __annotations__ 属性中。你可以通过访问这个属性来查看注解信息。

例如:

def multiply(a: int, b: int) -> int:return a * bprint(multiply.__annotations__)

输出:

{'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'int'>}

这里的输出表明 multiply 函数的参数 ab 以及返回值都有类型注解为 int

函数注解的实际用途

  1. 代码文档化
    注解可以使代码更加自文档化,程序员可以一目了然地了解函数期望的输入类型和输出类型,而不必阅读完整的函数实现。

  2. 静态类型检查
    使用工具如 mypy,可以通过静态类型检查来发现一些潜在的类型错误。例如,mypy 可以在开发阶段验证函数的使用是否遵循注解要求,有助于提高代码质量。

  3. IDE支持
    现代化的集成开发环境(如 PyCharm, VSCode)可以基于注解提供更好的自动补全、类型推断和错误提示,使得开发者在编写代码时更容易避免错误。

注意事项

  1. 类型注解并不是强制性的:Python 的注解只是对数据类型的提示,并不强制类型检查,因此即使参数类型与注解不符,Python 也不会报错。

  2. 避免复杂的注解:有时,过于复杂的类型注解会使得代码难以阅读。此时可以使用 Any 来简化类型注解。

  3. 结合类型检查工具:为了最大化函数注解的效用,可以结合工具如 mypy 进行静态检查。这些工具可以帮助你在代码运行前发现类型不匹配的错误。

小结

  • 函数注解 是一种为函数的参数和返回值提供元数据的机制。
  • 注解可以显著提升代码的可读性和可维护性。
  • 函数注解的语法使用冒号 : 和箭头 -> 来分别注解参数和返回值类型。
  • Python 内置的 typing 模块可以用来表示更复杂的数据结构。
  • 注解只提供信息,并不会改变Python的运行机制。

相关文章:

【python3】函数注解

Python 函数注解 (Function Annotations) Python 函数注解 (Function Annotations)函数注解的基本语法基本语法格式示例 特殊类型注解注解信息的存储与访问函数注解的实际用途注意事项小结 函数注解是 Python 的一种特性&#xff0c;用于为函数的参数和返回值添加 元数据。注解…...

leetcode hot100 之【LeetCode 42. 接雨水】 java实现

LeetCode 42. 接雨水 题目描述 给定一个非负整数数组 height 表示柱状图中每个柱子的高度&#xff0c;请你计算按此排列的柱状图能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面的柱状图可以…...

10月18日,每日信息差

第一、现代汽车集团在上海举办了中国前瞻技术研发中心的发布及启新庆典&#xff0c;宣布成立其全资法人公司 —— 现代前瞻汽车技术开发&#xff08;上海&#xff09;有限公司。该中心是集团在海外建立的首个前瞻技术研发中心&#xff0c;专注于自动驾驶、智能座舱、共享出行等…...

Axure科技感元件:打造可视化大屏设计的得力助手

Axure&#xff0c;作为一款专业的原型设计工具&#xff0c;凭借其强大的设计功能、丰富的组件库和灵活的交互能力&#xff0c;成为了许多设计师打造科技感设计的首选工具。其中&#xff0c;Axure科技感元件更是以其独特的魅力和实用性&#xff0c;在数据可视化大屏、登录界面、…...

【模板】最近公共祖先(LCA)倍增

P3379 P3379 【模板】最近公共祖先&#xff08;LCA&#xff09; # 【模板】最近公共祖先&#xff08;LCA&#xff09; ## 题目描述 如题&#xff0c;给定一棵有根多叉树&#xff0c;请求出指定两个点直接最近的公共祖先。 ## 输入格式 第一行包含三个正整数 $N,M,S$&#…...

我的JAVA项目构建

1.Maven maven就是pip 设置maven下载的的jar包位置 换源 下载插件maven-search 配置dependency 2.Tomcat 设置环境变量JAVA_HOME 设置编码方式 方框就是路径的前缀 3.Servlet 新建项目 写一个类继承HttpServlet&#xff0c;复写doGet(应对Get请求)&#xff0c;doPost(应对…...

应用层协议 序列化

自定义应用层协议 例子&#xff1a;网络版本计算器 序列化反序列化 序列化&#xff1a;将消息&#xff0c;昵称&#xff0c;日期整合成消息-昵称-日期 反序列化&#xff1a;消息-昵称-日期->消息&#xff0c;昵称&#xff0c;日期 在序列化中&#xff0c;定义一个结构体…...

【HAD】Half-Truth: A Partially Fake Audio Detection Dataset

文章目录 Half-Truth: A Partially Fake Audio Detection Dataset背景key points研究数据集设计评价指标实验基线:utterance-level分类(话语级)基线:segment-level分类(片段级)Half-Truth: A Partially Fake Audio Detection Dataset 会议/期刊:Interspeech 2021 CCF-C…...

OpenAI Prompt generation - 生成和优化Prompt的Prompt

OpenAI Prompt generation - 生成和优化Prompt的Prompt 从头开始创建 Prompt 可能很耗时&#xff0c;所以快速生成 Prompt 可以帮助我们提高效率。 下面是 OpenAI 提供的协助生成 Prompt 的 Prompt。 from openai import OpenAIclient OpenAI()META_PROMPT ""&qu…...

Android技术探索:深入解析Android组件

Android系统以其开放性和多样性&#xff0c;成为了众多开发者的首选平台。在Android应用的开发中&#xff0c;组件&#xff08;Components&#xff09;是构建应用的基础元素。深入了解Android组件&#xff0c;对于开发者来说至关重要。本文将详细探讨Android的四大核心组件&…...

使用R-GCN处理异质图ACM的demo

加载和处理数据集 import torch from torch_geometric.datasets import HGBDataset from torch_geometric.transforms import RandomLinkSplit# 加载ACM数据集&#xff0c;这是一个包含论文&#xff08;paper&#xff09;、主题&#xff08;subject&#xff09;以及它们之间关…...

征程 6E DISPLAY 功能介绍及上手实践

01 功能概述 本文将带大家一起实现单路、多路 MIPI CSI TX 输出、IDU 回写、IDU oneshot 模式、绑定输出 VPS 数据等功能&#xff0c;此处主要介绍各 sample 的实现与使用方法。 02 软件架构说明 本文中绑定 VPS 输出功能基于 libvio API 实现&#xff0c;调用 libvio 提供的…...

安卓窗口wms/input小知识NO_INPUT_CHANNEL剖析

背景&#xff1a; 经常在学员的vip技术群里经常有很多学员会提问一些不太常见的窗口和input的相关的问题&#xff0c;虽然不太常见&#xff0c;但确实是工作中会遇到的一些问题&#xff0c;所以马哥有必要进行一下记录这些窗口技术知识点。 具体分享技术点&#xff1a; input中…...

【2024最新版】Win10下 Java环境变量配置----适合入门小白

首先&#xff0c;你应该已经安装了 Java 的 JDK 了&#xff08;如果没有安装JDK&#xff0c;请跳转到此网址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html&#xff09; 笔者安装的是 jdk-8u91-windows-x64 接下来主要讲怎么配…...

Servlet 生命周期详解及案例演示(SpringMVC底层实现)

文章目录 什么是Servlet&#xff1f;Servlet生命周期简介1. 初始化阶段&#xff1a;init()方法示例代码&#xff1a; 2. 请求处理阶段&#xff1a;service() 和 doGet()、doPost()方法示例代码&#xff1a; 3. 销毁阶段&#xff1a;destroy()方法示例代码&#xff1a; Servlet生…...

2024 kali系统2024版本,可视化界面汉化教程(需要命令行更改),英文版切换为中文版,基于Debian创建的kali虚拟机

我的界面如下所示 1. 安装 locales sudo apt install locales 2. 生成中文语言环境 sudo locale-gen zh_CN.UTF-8 如果你希望安装繁体中文&#xff0c;可以加入&#xff1a; sudo locale-gen zh_TW.UTF-8 3. 修改 /etc/default/locale 文件 确保有以下内容 LANGzh_CN.UT…...

深入理解 CMake 中的 INCLUDE_DIRECTORIES 与 target_include_directories

在使用 CMake 构建系统时&#xff0c;指定头文件的包含路径是非常常见的一步。对于这个任务&#xff0c;CMake 提供了两种主要的命令&#xff1a;INCLUDE_DIRECTORIES 和 target_include_directories。虽然它们看似类似&#xff0c;但它们的作用范围、应用方式以及适用场景却有…...

【不知道原因的问题】java.lang.AbstractMethodError

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 遇到了一个问题&#xff1a; java.lang.AbstractMethodError 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 在Java开发中&#xff0c;java.lang.AbstractMethodError是一个常见…...

分布式篇(分布式事务)(持续更新迭代)

一、事务 1. 什么是事务 2. 事务目的 3. 事务的流程 4. 事务四大特性 原子性&#xff08;Atomicity&#xff09; 一致性&#xff08;Consistency&#xff09; 持久性&#xff08;Durability&#xff09; 隔离性&#xff08;Isolation&#xff09; 5. MySQL VS Oracle …...

[Linux] 逐层深入理解文件系统 (2)—— 文件重定向

标题&#xff1a;[Linux] 逐层深入理解文件系统 &#xff08;2&#xff09;—— 文件重定向 个人主页水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、文件的读取和写入 二、文件重定向的本质 1.手动模拟重定向的过程——把标准输出重定向到redir.txt 2.重定向…...

MiniCPM-o-4.5-nvidia-FlagOS开发入门:C语言基础与系统编程概念问答

MiniCPM-o-4.5-nvidia-FlagOS开发入门&#xff1a;C语言基础与系统编程概念问答 1. 引言&#xff1a;你的随身C语言导师 刚开始学C语言&#xff0c;是不是感觉有点懵&#xff1f;指针、内存、结构体这些概念&#xff0c;看书看半天&#xff0c;好像懂了&#xff0c;一写代码又…...

实时手机检测-通用GPU算力优化:TensorRT加速后吞吐量提升3.2倍

实时手机检测-通用GPU算力优化&#xff1a;TensorRT加速后吞吐量提升3.2倍 1. 引言&#xff1a;当手机检测遇上性能瓶颈 想象一下&#xff0c;在一个大型活动现场&#xff0c;安保系统需要实时分析数百路监控视频&#xff0c;精准识别出每一部正在使用的手机&#xff0c;以防…...

氧化镓高体积热容的特性,集成高介电常数界面的结侧冷却架构

速览&#xff1a;技术背景与挑战背景&#xff1a; 虽然宽禁带&#xff08;WBG&#xff09;半导体&#xff08;如SiC、GaN&#xff09;已取得进展&#xff0c;但超宽禁带&#xff08;UWBG&#xff09;材料如氧化镓&#xff08;Ga₂O₃&#xff09;具有更高的理论极限。痛点&…...

OpenClaw多通道管理:千问3.5-9B同时服务飞书与钉钉机器人

OpenClaw多通道管理&#xff1a;千问3.5-9B同时服务飞书与钉钉机器人 1. 为什么需要多通道管理&#xff1f; 去年我接手了一个跨部门协作项目&#xff0c;团队同时使用飞书和钉钉两种沟通工具。每次需要查询数据或生成报告时&#xff0c;成员们要么在飞书群里我&#xff0c;要…...

JBoltAI V4.2 使用体验 这些优化更贴合实际需求

从 JBoltAI 框架 4.1 版本用到 4.2 版本&#xff0c;能明显感受到这次升级都是围绕实际使用中的痛点做的优化&#xff0c;没有花哨的功能&#xff0c;全是提升操作便捷性、完善内容处理能力的实用更新&#xff0c;不管是日常简单使用还是处理各类工作内容&#xff0c;体验都顺畅…...

OpenClaw隐私计算:Qwen3.5-9B-AWQ-4bit本地处理加密图片

OpenClaw隐私计算&#xff1a;Qwen3.5-9B-AWQ-4bit本地处理加密图片 1. 为什么需要加密图片处理 去年我在帮一家小型金融机构做自动化流程优化时&#xff0c;遇到了一个棘手问题&#xff1a;他们需要AI自动分析客户上传的身份证和银行卡照片&#xff0c;但直接传输这些敏感图…...

Altium Designer原理图高效绘制:如何利用模板和快捷键提升3倍工作效率

Altium Designer原理图高效绘制&#xff1a;如何利用模板和快捷键提升3倍工作效率 在电子设计领域&#xff0c;效率往往决定着项目成败。当面对复杂电路设计时&#xff0c;熟练的设计师与新手之间的差距不仅体现在设计质量上&#xff0c;更体现在完成速度上。我曾参与过一个工业…...

快速了解智能体

1.了解智能体 这个时代&#xff0c;AI开始已经深入到我们生活中了&#xff0c;智能体的概念也慢慢出现在我们的视野中了。这两个概念并不完全一样。AI 是模拟人类智能的技术领域与能力集合&#xff0c;智能体是依托 AI 实现自主感知、决策、 行动的目标驱动实体&#xff0c;后者…...

智能匹配技术:重新定义Illustrator设计效率提升新范式

智能匹配技术&#xff1a;重新定义Illustrator设计效率提升新范式 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 一、行业困境分析&#xff1a;设计师如何摆脱机械劳动的桎梏&…...

Python图书借阅管理系统实战

# 题目描述# 设计一个简单的图书借阅管理系统。系统初始包含若干本图书&#xff0c;每本图书的信息包括&#xff1a;# 书号&#xff08;字符串&#xff09;# 书名&#xff08;字符串&#xff09;# 作者&#xff08;字符串&#xff09;# 库存数量&#xff08;整数&#xff09;# …...