当前位置: 首页 > 知识库问答 >
问题:

python中的函数注释

萧晓博
2023-03-14

我刚刚发现了Python3的函数注释(https://www.python.org/dev/peps/pep-3107/)这对于记录参数或返回类型似乎很有用。它还可以在我的pycharm IDE中提供更好的intellisense。

我有一个关于输入类型模糊的参数的问题。例如,它可以是一个列表或numpy数组或一些“类似数组”的数量。为函数注释此类输入参数的最佳方法是什么?例子:

import numpy as np

def fun(data: np.ndarray) # can also be a list
    pass

我还有一个例子,输入可以是这两种类型中的任何一种。例子:

def fun(header: Nifti1Header) # can also be Nifti2Header
    pass

记录此类参数输入的最佳方式是什么?

共有2个答案

龙星辰
2023-03-14

您必须计算出函数的合法输入共享哪些公共属性。对于第一个,它看起来应该是可移植的:

>>> from collections import Iterable
>>> def fun(data: Iterable):
...     pass
... 
>>> isinstance(np.ndarray(0), Iterable)
True
>>> isinstance([], Iterable)
True
>>> isinstance(23, Iterable)
False

对于您的头,它闻起来像Nifti1HeaderNifti2Header应该继承自一个公共基类。如果该函数适用于任何派生类,为什么不使用基类对其进行注释呢?

卫君博
2023-03-14

如果您使用的是python3。最好的方法是打字。协会

>>> from typing import Union
>>> import numpy as np
>>> def fun(data: Union[np.ndarray, list]):
        pass

你也可以使用打字。TypeVar如果您始终使用Union[t1, t2,...]。(另外,您可以比代码中的许多Unions更容易地从TypeVar中添加和删除类型)

>>> from typing import TypeVar
>>> import numpy as np
>>> import array
>>> Ar = TypeVar('Ar', np.ndarray, list, array.array)

然后,该代码将Ar与列表、数组相关联。数组和numpy数组。

 类似资料:
  • 问题内容: 功能是什么?是用户界面吗?我们什么时候使用它? 问题答案: 它提出了一个提示给用户(可选的),从用户获得输入,并通过在一个字符串的用户返回数据的输入。请参阅有关的文档。 例: 这与 后者的不同之处在于后者试图解释用户给出的输入。通常最好避免并坚持使用自定义的解析/转换代码。 注意:这适用于Python 2.x

  • 函数是具有某种特定功能的代码块,可以重复使用。在前面的学习中你已经认识到了很多 Python 的内置函数。这节课我们就来创建我们自己的函数: 1. 重复性的代码 1.1 什么是重复性的代码 在处理功能相似的逻辑时,会出现结构雷同的代码,例如:有两个列表,编写程序分别打印这两个列表,代码如下: 案例演示 预览 复制 复制成功! a = [1, 2, 3] b = [10, 20, 30] # 打印

  • 有没有可能创建一个函数,它将lambda函数作为参数(每个lambda函数使用参数),然后返回一个具有单个参数的新函数,并返回所有lambda函数的乘积? 以下是我的非工作示例: 所以本质上,你有一个函数,它需要4个lambda函数,每个函数使用参数。例如,的参数可以类似于。 然后返回一个名为的新函数,该函数的输出是所有lambda函数的乘积,并且有一个参数,该参数传递到的每个lambda函数的参

  • 函数注释似乎重复了Python中已经发现的行为。不仅如此,它们的含义没有以任何方式强制执行,因此它们可以用于PEP 3107中记录的以下任何一项: 提供打字信息 类型检查 让IDE显示函数期望和返回的类型 函数重载/泛型函数 外语桥梁 改编 谓词逻辑函数 数据库查询映射 RPC参数封送 其他信息 参数和返回值的文档 甚至是完全不同的东西。 在某种程度上,函数注释让我想起Python幽默系列中的一个

  • 给定一个字符串,返回子字符串长度2在该字符串中出现的次数计数,并作为该字符串的最后2个字符,因此“hixxxhi”产生1(我们不计算结束子字符串)。 我在其中一个网站上发现了这个问题(https://codingbat.com/prob/p145834). 网站上对上述问题的回答如下: 我对下面提到的代码行有疑问 现在,我知道这段代码正在提取字符串“str”的最后两个字母。我感到困惑的是变量名。正

  • 本文向大家介绍javascript中的replace函数(带注释demo),包括了javascript中的replace函数(带注释demo)的使用技巧和注意事项,需要的朋友参考一下 javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用。最近和前端走的比较近,借此机会,好好巩固一