PEP 8 – Python 代码风格指南中文版(九)

编程建议(4)

函数注解

解释:“函数注解”是一种为函数参数和返回值提供额外信息的语法。这些注解本身对函数的行为没有任何直接影响,但它们可以被用于类型提示(自从PEP 484被接受后变得更加普遍)、文档生成、或其他由第三方库和工具提供的静态分析或运行时检查。

函数注解的基本语法是:在参数名或->之后(用于表示返回值类型)添加冒号和注解表达式。

# 函数注解示例:
def greet(name: str) -> str:
    return 'Hello, ' + name

name: str是一个参数注解,它表明name参数应该是一个字符串。

-> str是一个返回类型注解,它表明该函数返回一个字符串。

然而,请注意,这些注解不会强制执行类型检查;它们只是作为元信息存在,可以被解释器或第三方工具用来进行类型检查、文档生成等。

随着PEP 484的接受,函数注解的风格规则已经发生了变化。

解释:

PEP 484是Python的一个增强提案(Python Enhancement Proposal),它引入了类型注解的语法,允许开发者为函数参数和返回值指定类型信息。这种类型注解不仅有助于开发者自己理解代码,还可以被一些工具(如类型检查器、IDE等)用来提供额外的功能,如自动补全、类型检查等。

在PEP 484被接受之前,Python社区对于函数注解的风格可能并没有一个统一的规范,因为那时的注解主要是用来存放任意元数据的,而不仅仅是类型信息。但是,随着PEP 484的引入,函数注解的主要用途变为了提供类型信息,因此关于函数注解的风格规则也随之发生了变化。

  • 为函数添加注解时,你应该使用PEP 484中定义的语法(关于注解的格式,你可以参考前面章节中的一些建议)。
  • 本PEP之前推荐的注解样式实验现在不再鼓励。
  • 在Python的标准库(stdlib)之外,我们现在鼓励大家按照PEP 484的规则进行一些尝试和实验。比如,你可以尝试用PEP 484的风格为一些大型的第三方库或应用程序添加类型注解(type annotations),然后回顾一下添加这些注解的难易程度,并观察这些注解是否提高了代码的可读性。
  • Python标准库在采用这种类型注解时应保持谨慎,但对于新代码或大型重构,允许使用这些注解
  • 对于那些希望以不同方式使用函数注解的代码,建议在文件顶部附近添加如下形式的注释
# type: ignore

这个注释会告诉类型检查器忽略文件中的所有注解。当然,PEP 484中也提供了更精细的方式来禁用类型检查器的某些警告。

解释:

Python标准库在引入类型注解时要小心,因为标准库需要保持高度的兼容性和稳定性。但对于新的代码项目或正在进行大型重构的项目,使用类型注解来提高代码质量和可维护性是被允许的。如果某个文件或代码块因为特殊原因不希望被类型检查器检查注解,可以在文件顶部添加# type: ignore注释来告诉类型检查器忽略这些注解。此外,PEP 484还提供了更详细的指导,以便开发者根据需要更精确地控制类型检查器的行为。

  • 就像代码检查器(linters)一样,类型检查器也是可选的、独立的工具。Python解释器默认不应该因为类型检查而发出任何消息,也不应该基于注解来改变其行为。

 解释:

简单来说,类型检查器并不是Python解释器的一部分,它们是在Python代码之外运行的独立工具。这意味着,即使你的代码中包含了类型注解,Python解释器在运行代码时也不会因为这些注解而发出任何警告或错误消息,也不会因为注解而改变代码的执行方式。类型检查器的作用是在代码运行之前对代码进行静态分析,检查类型注解是否正确,从而帮助开发者提前发现潜在的错误。但是,这并不会影响Python解释器对代码的实际执行。

  • 不想使用类型检查器的用户可以选择忽略它们。但是,预计第三方库包的用户可能会想要在这些包上运行类型检查器。为此,PEP 484推荐使用存根文件(stub files):即.pyi文件,这些文件会被类型检查器优先于相应的.py文件进行读取。存根文件可以与库一起分发,或者在征得库作者许可的情况下,通过typeshed仓库[5]单独分发。

 解释:

Python社区尊重每个开发者的选择,如果你不喜欢使用类型检查器,那么你可以完全忽略它们。但是,对于那些想要确保他们使用的第三方库符合类型注解规范的开发者来说,他们可能会想要在这些库上运行类型检查器。为了支持这种需求,PEP 484提出了存根文件的概念。存根文件是专门为类型检查器准备的,它们包含了与原始Python文件(.py文件)相对应的类型信息,但是不会包含实际的代码实现。这样,类型检查器就可以在不执行实际代码的情况下,对类型信息进行检查。存根文件可以与库一起分发,以便库的使用者能够轻松地运行类型检查器。另外,如果库作者同意的话,存根文件也可以单独通过typeshed仓库进行分发,这样更多的开发者就可以共享和使用这些存根文件了。

变量注解

PEP 526引入了变量注解。关于它们的风格建议与上述函数注解的风格建议类似:

  • 模块级变量、类变量、实例变量以及局部变量的注解应该在冒号后有一个空格。
  • 冒号前不应该有空格。
  • 如果赋值语句有右侧表达式,那么等号两边应该恰好各有一个空格:
# 正确的:
code: int  # 在冒号后有一个空格

class Point:
    coords: Tuple[int, int]  # 在类型注解中,冒号后有一个空格
    label: str = '<unknown>'  # 默认值等号两侧有空格



# 错误的:
code:int  # 冒号后没有空格
code : int  # 冒号前有空格

class Test:
    result: int=0  # 等号两侧没有空格
  • 尽管PEP 526(即变量注解的语法)在Python 3.6中已被接受,但在所有版本的Python中,对于存根文件(stub files),变量注解语法仍然是首选的语法(有关详细信息,请参阅PEP 484)

解释:

虽然变量注解的语法(由PEP 526提出)在Python 3.6及以后的版本中得到了官方的支持,但是不论你使用的是哪个版本的Python,当你编写存根文件时,都应该优先使用这种变量注解的语法。存根文件是专门为类型检查器准备的,它们包含了与原始Python文件相对应的类型信息,但是不会包含实际的代码实现。通过使用变量注解语法,你可以在这些存根文件中清晰地标注出每个变量、函数参数、返回值等的类型信息,从而帮助类型检查器更好地理解和检查你的代码。而PEP 484则提供了更多关于类型注解和存根文件的详细信息和指导。

    相关文章:

PEP 8 – Python 代码风格指南中文版(一)

PEP 8 – Python 代码风格指南中文版(二)

PEP 8 – Python 代码风格指南中文版(三)

PEP 8 – Python 代码风格指南中文版(四)

PEP 8 – Python 代码风格指南中文版(五)

PEP 8 – Python 代码风格指南中文版(六)

PEP 8 – Python 代码风格指南中文版(七)

PEP 8 – Python 代码风格指南中文版(八)

PEP 8 – Python 代码风格指南中文版(九)

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值