网易首页 > 网易号 > 正文 申请入驻

Python:函数注解

0
分享至

函数注解(Function Annotations)是 Python 3 引入的一项语法特性。它允许在函数的参数和返回值中添加类型提示或说明信息,以增强代码的可读性、可维护性和开发效率。

Python 是动态类型语言,函数注解不会改变运行时行为,仅提供元信息,供 IDE、静态检查器、文档工具或运行时反射使用。

一、基本语法

函数参数与返回值的注解语法:

def 函数名(参数名: 注解) -> 返回值注解:
    函数体

示例:

def greet(name: str, age: int = 18) -> str:
    return f"{name} is {age} years old."

name: str 表示参数 name 应该是字符串。

age: int = 18 表示参数 age 应该是整数,默认值为 18。

-> str 表示函数的返回值应该是字符串。

注解不局限于类型,还可以是任意表达式或对象:

def add(a: '数字类型', b: int = 0) -> '返回整数':
    return a + b

提示:

注解中的字符串、对象仅作为元信息标签,本身不会被解释器执行类型检查。

注解信息会存储在函数的 __annotations__ 属性中:

print(greet.__annotations__)
# {'name': 

 , 'return': 

 } 


二、常见类型提示(typing 模块)

为了更精确地提示复杂类型,推荐使用 模块。

1、基本类型

用于标注参数或返回值为常见的内置数据类型。比如,str表示字符串,int表示整数。

def repeat(s: str, times: int = 2) -> str:
    return s * times


2、容器类型

用于标注容器及其内部元素的类型:

from typing import List, Dict, Tuple, Set

def total(scores: List[int]) -> int:     # 列表,元素是 int
    return sum(scores)

def phone_book() -> Dict[str, str]:      # 字典,键和值均是 str
    return {"Alice": "1234", "Bob": "5678"}

def split_pair() -> Tuple[int, int]:     # 固定长度的元组
    return (1, 2)

提示:

Python 3.9+ 支持原生类型提示(无需从 typing 导入):

def func(data: list[int]) -> dict[str, int]:
    return {str(i): i for i in data}

3、Optional(可选类型)

用于表示一个值可能为某类型,也可能是 None。

from typing import Optional

def find(key: str) -> Optional[int]:
    return None

Python 3.10 可用 | 表示二选一。

def find(key: str) -> int | None:
    return None

4、Union(联合类型)

用于表示值可能属于多种类型之一。

from typing import Union

def stringify(data: Union[str, int, float]) -> str:
    return str(data)

Python 3.10 可用 | 表示多选一:

def stringify(data: str | int | float) -> str:
    return str(data)

提示:

Optional[T] 是 Union[T, None] 的简写。

5、Any(任意类型)

表示可以是任意类型,适合需要最大灵活性的场景。

from typing import Any

def log_all(*args: Any, **kwargs: Any) -> None:
    print(args, kwargs)

6、Callable(可调用对象)

用于表示参数或返回值是函数、方法、lambda 等可调用对象。

from typing import Callable

def apply(f: Callable[[int, int], int], x: int, y: int) -> int:
    return f(x, y)

print(apply(lambda a, b: a + b, 3, 4))

Callable 的格式为:Callable[[参数类型...], 返回类型]

7、Literal(字面量类型)

用于限制值必须是固定的字面量之一,常用于配置值、枚举场景。

from typing import Literal

def get_status(code: int) -> Literal["ok", "error"]:
    return "ok" if code == 0 else "error"

8、TypeVar(泛型类型)

用于编写泛型函数或类,保持参数和返回值类型一致。

from typing import TypeVar

T = TypeVar("T")

def identity(x: T) -> T:
    return x

泛型使函数/类更通用,适用于多种类型。

9、其他常用提示

Self

(Python 3.11+)用于类方法,表示返回当前类实例,更直观:

from typing import Self

class Person:
    def set_name(self, name: str) -> Self:
        self.name = name
        return self

Annotated

(Python 3.9+)在类型提示中附加额外元信息(例如校验规则、文档说明):

from typing import Annotated

def scale(x: Annotated[float, "must be positive"]) -> float:
    return x * 2

Self 让类方法返回值更清晰,Annotated 让类型提示更有语义性。

三、应用场景

1、静态类型检查

使用工具如 进行代码静态分析,提前发现类型错误。

安装与使用:

pip install mypy
mypy your_script.py

示例:

def add(a: int, b: int) -> int:
    return a + b

add("1", "2")  # ⚠ mypy 报错,但 Python 仍能运行

2、IDE 自动补全与提示

PyCharm、VSCode 等编辑器会根据注解提供智能提示。

3、代码文档生成

如 、 会利用注解生成更清晰的 API 文档。

4、运行时验证(配合第三方库)

如 、 实现运行时类型检查。

from pydantic import BaseModel

class User(BaseModel):
    name: str
    age: int

u = User(name="Alice", age="18")  # 自动转为 int
print(u)

小结

函数注解在 Python 中并不是“强制类型”的工具,而是一种增强代码语义的说明机制。在大型项目中,合理地使用函数注解配合工具链,可以有效提高代码质量、可读性和开发效率。

点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
期末考试分数不公布:错的不是政策,是认知的偏差丨中听

期末考试分数不公布:错的不是政策,是认知的偏差丨中听

大象新闻
2026-02-04 18:09:27
名记:弗拉格未来可能比东契奇更出色,清掉浓眉围绕他建队是正确举措

名记:弗拉格未来可能比东契奇更出色,清掉浓眉围绕他建队是正确举措

懂球帝
2026-02-05 23:57:09
休媒炮轰火箭比赛令人作呕:毫无战意该感到羞愧!KD吐槽申京防守

休媒炮轰火箭比赛令人作呕:毫无战意该感到羞愧!KD吐槽申京防守

颜小白的篮球梦
2026-02-06 11:41:02
散户们把白银玩成了“万人坑”

散户们把白银玩成了“万人坑”

华尔街见闻官方
2026-02-05 15:24:14
快船消息:2换5交易达成,加兰首秀时刻曝光,战国王出场更新

快船消息:2换5交易达成,加兰首秀时刻曝光,战国王出场更新

冷月小风风
2026-02-06 12:29:31
沙特给C罗开的价码,一句话:离谱到让普通人怀疑人生。

沙特给C罗开的价码,一句话:离谱到让普通人怀疑人生。

南权先生
2025-12-31 15:59:56
一颗螺丝钉都不留给巴拿马,港澳办警告是给其最后的改错机会

一颗螺丝钉都不留给巴拿马,港澳办警告是给其最后的改错机会

哄动一时啊
2026-02-05 09:27:59
巴拿马运河突然“断电”:18亿美元投入,三天后码头灯都被人掐了

巴拿马运河突然“断电”:18亿美元投入,三天后码头灯都被人掐了

小李子体育
2026-02-05 10:41:47
任浩脸气青了!陈熠惨败桥本太沮丧 韩莹丈夫:差了孙颖莎一档

任浩脸气青了!陈熠惨败桥本太沮丧 韩莹丈夫:差了孙颖莎一档

颜小白的篮球梦
2026-02-06 09:37:44
微博之夜:杨幂领奖,粉丝集体喊“退票”!被指撕肖战名牌抢C位

微博之夜:杨幂领奖,粉丝集体喊“退票”!被指撕肖战名牌抢C位

麦芽是个小趴菜
2026-02-06 10:00:17
震惊!西方精英的“秘密食材”竟是娃娃菜!

震惊!西方精英的“秘密食材”竟是娃娃菜!

特约前排观众
2026-02-06 00:20:03
追觅CEO俞浩又火上热搜,称三年后团队20万人,实现1万亿小目标

追觅CEO俞浩又火上热搜,称三年后团队20万人,实现1万亿小目标

红星新闻
2026-02-05 18:37:26
不走了,詹姆斯!骑士,再见!

不走了,詹姆斯!骑士,再见!

体育新角度
2026-02-05 22:27:23
比电诈园区还狠,湖北多家精神病院关正常人套医保,形成产业链

比电诈园区还狠,湖北多家精神病院关正常人套医保,形成产业链

历史总在押韵
2026-02-03 23:59:33
贵州成黔矿产有限公司副总经理林娟接受审查调查

贵州成黔矿产有限公司副总经理林娟接受审查调查

界面新闻
2026-02-06 11:44:18
泰军:查封柬埔寨边境园区发现大量诈骗证据包括山寨上海公安局

泰军:查封柬埔寨边境园区发现大量诈骗证据包括山寨上海公安局

环球趣闻分享
2026-02-04 16:41:58
不能更完美了,本泽马在利雅得新月生涯首秀上演帽子戏法

不能更完美了,本泽马在利雅得新月生涯首秀上演帽子戏法

懂球帝
2026-02-06 03:07:12
恭喜广东,易建联终于回归了,重返球场,新岗位曝光,朱芳雨期待

恭喜广东,易建联终于回归了,重返球场,新岗位曝光,朱芳雨期待

萌兰聊个球
2026-02-06 09:47:30
1500万!这可能是中国互联网最贵的一次Ctrl+C和Ctrl+V

1500万!这可能是中国互联网最贵的一次Ctrl+C和Ctrl+V

卢松松
2026-02-04 16:01:39
牢A的镰刀有点狠啊

牢A的镰刀有点狠啊

历史总在押韵
2026-02-04 23:26:34
2026-02-06 12:47:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1738文章数 72关注度
往期回顾 全部

科技要闻

微信封禁元宝红包后,又把阿里千问封了

头条要闻

媒体:损失惨重 在台湾问题上碰瓷的立陶宛"知道错了"

头条要闻

媒体:损失惨重 在台湾问题上碰瓷的立陶宛"知道错了"

体育要闻

西甲射手榜第2,身价不到姆巴佩1/40

娱乐要闻

微博之夜红毯好精彩,堪比婚礼现场

财经要闻

很意外,美债危机要化解了

汽车要闻

标配华为乾崑解决方案 华境S完成六座满载冬测

态度原创

时尚
本地
游戏
数码
军事航空

今年春天一定要拥有的4件衣服,复古又时髦!

本地新闻

围观了北京第一届黑色羽绒服大赛,我笑疯了

快上车!腾讯新作《粒粒的小人国》首测即将开启,手慢无!

数码要闻

英伟达DLSS 4.5六倍多帧生成与动态多帧生成特性将于4月上线

军事要闻

不惧以军拦截 “全球坚韧船队”将再赴加沙

无障碍浏览 进入关怀版