在 Python 中注释函数
我最近刚刚发布了一篇关于在 Typescript 中注释函数的博客。我刚刚完成了一些研究,并了解了更多关于如何在 Python 中注释函数的知识,本博客将主要介绍使用与 上一篇博客类似的示例来注释 Python 函数。
您可以通过将 python.analysis.typeCheckingMode 设置为 basic、standard、strict 之一来验证 Visual Studio Code 中的类型注释。 basic 和 standard 选项不一定能确保您注释函数和变量,但 strict 可以。
功能值
这可能会让您感到震惊,但您可以在 Python 中返回函数并将函数作为值传递。回调函数实际上是使用 Callable 类型进行注释的,其写法如下;
Callable[[argtype1, argtype2, argtype3], returnType]
例如,一个函数 length(text: str) -> int 将被注释为 Callable[[str], int]
例如;
JavaScript 中的此函数
function multiplier(factor){ return value => factor * value } const n = multiplier(6) n(8) // 48
在Python中可以这样写
def multiplier(factor): def inner(value): return value * factor return inner n = multiplier(6) n(8) #48
我们可以创建一个名为 number 的 TypeAlias,它是 int 和 float 的联合(字面意思),例如;
from typing import TypeAlias, Union number: TypeAlias = Union[int, float]
将参数视为JavaScript 数字.
因此,要注释这个函数,我们有;
def multiplier(factor: number) -> Callable[[number], number]: def inner(value: number) -> inner: return value * factor return inner a = multiplier(4.5) a(3) #13.5
通用函数
经典的泛型函数示例是
def pick(array, index): return array[index] pick([1,2,3], 2) #3
使用 TypeVar 我们现在可以创建通用详细信息(比 typescript 更详细)。
from typing import TypeVar T = TypeVar("T") # the argument and the name of the variable should be the same
这样我们就有
from typing import TypeVar, Sequence def pick(array: Sequence[T], index: int) -> T: return array[index] print(pick([1,2,3,4], 2))
那么自定义 myMap 函数怎么样,它的作用类似于 JavaScript 中的地图。这样我们就有了;
记住:Python中的map()返回的是Iterable类型而不是List类型
def myMap(array, fn): return map(fn, array) def twice(n): return n * 2 print(myMap([1,2,3], twice))
我们可以混合使用 Callable 和 TypeVar 类型来注释这个函数。 观察...
from typing import TypeVar, Iterable, Callable Input = TypeVar("Input") # Input and "Input" must be the same Output = TypeVar("Output") def myMap(array: Iterable[Input], fn: Callable[[Input], Output]) -> Iterable[Output]: return map(fn, array) def twice(n: int) -> int: return n * 2 print(myMap([1,2,3], twice))
或者我们可以别名 Callable 函数
from typing import TypeVar, Iterable, Callable Input = TypeVar("Input") Output = TypeVar("Output") MappableFunction = Callable[[Input], Output] def myMap(array: Iterable[Input], fn: MappableFunction[Input, Output]) -> Iterable[Output]: return map(fn, array)
观察 MappableFunction 接受这些泛型类型输入和输出并将它们应用到 Callable[[Input], Output] 的上下文中。
花点时间想想 myFilter 函数将如何注释?
好吧,如果你想到了这个
from typing import Iterable, TypeVar, Callable Input = TypeVar("Input") def myFilter(array: Iterable[Input], fn: Callable[[Input], bool]) -> Iterable[Input]: return filter(fn, array)
你说得对
通用类
我知道我不应该谈论类注释,但请给我一些时间来解释泛型类。
如果您来自Typescript诗句,这就是您定义它们的方式
class GenericStore<Type>{ stores: Array<Type> = [] constructor(){ this.stores = [] } add(item: Type){ this.stores.push(item) } } const g1 = new GenericStore<string>(); //g1.stores: Array<string> g1.add("Hello") //only string are allowed
但在 Python 中它们却相当不同且尴尬。
- 首先我们导入 Generic 类型,然后让它们成为 Generic 类的子类
因此要在 Python 中重新创建这个 GenericStore 类
Callable[[argtype1, argtype2, argtype3], returnType]
为什么我应该学习如何在 Python 中注释函数?
正如我在上一篇博客中所说,它有助于构建更智能的类型系统,从而减少出现错误的机会(特别是在使用 mypy 等静态文件检查器时)。此外,当使用强大的类型系统编写库(或 SDK)时,可以大幅提高使用该库的开发人员的工作效率(主要是因为编辑器的建议)
如果您有任何疑问或者本文中存在错误,请随时在下面的评论中分享⭐
以上是在 Python 中注释函数的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。
