输入未使用的参数

Typing unused arguments

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

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

我想输入我的函数,unused_arg 的类型应该是什么?从 我猜 None 可以使用。

对于上下文,我使用的是 jax 中的 lax.scan,它需要一个带有两个参数的函数,即使第二个参数未被使用。

您可以使用 Any?

from typing import Any

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

文档 (https://jax.readthedocs.io/en/latest/_autosummary/jax.lax.scan.html) 给出 f 的类型为:

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

所以如果我没有更具体的类型,我可能会用一个名为 XTypeVar 来做:

from typing import TypeVar

X = TypeVar("X")

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

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

请注意,根据文档,您的 f 似乎是 return 两个项目的元组;我不确定这对您的用例是否重要。

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