键入未使用的参数

问题描述 投票:0回答:3

我有一个函数has接受两个参数,例如:

def f(first_arg: int, unused_arg) -> int:
    first_arg += 1
    return first_arg

我想输入我的函数,unused_arg 的类型应该是什么?从这个问题我猜可以使用

None

对于上下文,我使用

lax.scan
中的
jax
,它需要一个带有两个参数的函数,即使第二个参数未使用也是如此。

python python-3.x annotations type-hinting
3个回答
2
投票

可以使用

Any
吗?

from typing import Any

def f(first_arg: int, unused_arg: Any) -> int:
    ...

1
投票

文档 (https://jax.readthedocs.io/en/latest/_autosummary/jax.lax.scan.html) 给出

f
的类型为:

Callable[[~Carry, ~X], Tuple[~Carry, ~Y]]

所以如果我没有更具体的类型,我可能会用名为

TypeVar
X
来做:

from typing import TypeVar

X = TypeVar("X")

def f(first_arg: int, _second_arg: X) -> int:
    ...

使用

Any
可能会出现问题,因为它掩盖了类型检查——对于您从未使用过的变量来说并不重要,但是如果您的函数实现发生了变化,您可能不会意识到以前未使用的 arg 没有被使用类型检查,而如果您使用
TypeVar
,则如果对该变量做出任何未得到
bound
支持的假设,则会出现错误。我什至尝试避免导入
Any
,只是为了确保它不会在我不注意的情况下爬到任何地方。

请注意,根据文档,您的

f
似乎预计会返回两个项目的元组;我不确定这对您的用例是否重要。

指示未使用参数的标准方法(至少由我使用的 linter 强制执行)是在其前面添加下划线,所以我会这样做,而不是命名它

unused_arg
)。


0
投票

你应该使用 Never,来自文档“这可以用来定义一个永远不应该被调用的函数,或者一个永远不会返回的函数:”。

https://docs.python.org/3/library/typing.html#typing.Never

from typing import Never

def never_call_me(arg: Never) -> None:
    pass
© www.soinside.com 2019 - 2024. All rights reserved.