python 中的函数注释
function annotations in python
我刚刚发现了 python 3 (https://www.python.org/dev/peps/pep-3107/) 的函数注释,这似乎非常适合记录参数或 return 类型。它还可以在我的 pycharm IDE.
中提供更好的智能感知
我对输入类型模糊的参数有疑问。例如,它可以是列表或 numpy 数组或一些 "array-like" 数量。将此类输入参数注释到函数的最佳方法是什么?示例:
import numpy as np
def fun(data: np.ndarray) # can also be a list
pass
我还有另一种情况,输入可以是这两种类型中的任何一种。示例:
def fun(header: Nifti1Header) # can also be Nifti2Header
pass
记录这些类型的参数输入的最佳方式是什么?
您必须计算出您的功能共享的 属性 合法输入有哪些共同点。对于第一个,它看起来应该是可迭代的:
>>> from collections import Iterable
>>> def fun(data: Iterable):
... pass
...
>>> isinstance(np.ndarray(0), Iterable)
True
>>> isinstance([], Iterable)
True
>>> isinstance(23, Iterable)
False
对于你的 headers,它闻起来像 Nifti1Header
和 Nifti2Header
应该继承自一个共同的基础 class。如果该函数适用于任何派生 class,为什么不使用基数 class 对其进行注释?
如果你使用python3.5,最好的方法是使用typing.Union
>>> from typing import Union
>>> import numpy as np
>>> def fun(data: Union[np.ndarray, list]):
pass
如果您一直使用 Union[t1, t2, ...],您也可以使用 typing.TypeVar。 (此外,与代码中的许多联合相比,您可以更轻松地从 TypeVar 添加和删除类型)
>>> from typing import TypeVar
>>> import numpy as np
>>> import array
>>> Ar = TypeVar('Ar', np.ndarray, list, array.array)
此代码会将 Ar 与列表、array.arrays 和 numpy 数组相关联。
我刚刚发现了 python 3 (https://www.python.org/dev/peps/pep-3107/) 的函数注释,这似乎非常适合记录参数或 return 类型。它还可以在我的 pycharm IDE.
中提供更好的智能感知我对输入类型模糊的参数有疑问。例如,它可以是列表或 numpy 数组或一些 "array-like" 数量。将此类输入参数注释到函数的最佳方法是什么?示例:
import numpy as np
def fun(data: np.ndarray) # can also be a list
pass
我还有另一种情况,输入可以是这两种类型中的任何一种。示例:
def fun(header: Nifti1Header) # can also be Nifti2Header
pass
记录这些类型的参数输入的最佳方式是什么?
您必须计算出您的功能共享的 属性 合法输入有哪些共同点。对于第一个,它看起来应该是可迭代的:
>>> from collections import Iterable
>>> def fun(data: Iterable):
... pass
...
>>> isinstance(np.ndarray(0), Iterable)
True
>>> isinstance([], Iterable)
True
>>> isinstance(23, Iterable)
False
对于你的 headers,它闻起来像 Nifti1Header
和 Nifti2Header
应该继承自一个共同的基础 class。如果该函数适用于任何派生 class,为什么不使用基数 class 对其进行注释?
如果你使用python3.5,最好的方法是使用typing.Union
>>> from typing import Union
>>> import numpy as np
>>> def fun(data: Union[np.ndarray, list]):
pass
如果您一直使用 Union[t1, t2, ...],您也可以使用 typing.TypeVar。 (此外,与代码中的许多联合相比,您可以更轻松地从 TypeVar 添加和删除类型)
>>> from typing import TypeVar
>>> import numpy as np
>>> import array
>>> Ar = TypeVar('Ar', np.ndarray, list, array.array)
此代码会将 Ar 与列表、array.arrays 和 numpy 数组相关联。