指示参数应该是可变引用

Sam*_*ett 5 python type-hinting python-3.x

使用 PEP 484 和 585 中指定的类型提示语法,有什么方法可以表明函数的参数应该是由函数修改的可变引用?

例如,C# 有ref参数,那么在 Python 中,是否有任何等价物?例如

>>> def foo(spam: "Mutable[List[int]]"):
...     spam.append(sum(spam))
...
>>> a = [1, 2, 3]
>>> foo(a)
>>> a
[1, 2, 3, 6]
Run Code Online (Sandbox Code Playgroud)

或者如果不是,我怎么能定义这样的类型而不导致检查逻辑认为它是一个特殊的Mutable类而不是一个List[int]?显然,这将用作开发人员更容易理解方法的工具,而不是用于从根本上更改程序的方法。

为了清楚起见,我知道,根据定义列表是可变的,但我不知道是否有一种方法来定义时,它会突变,例如

>>> def bar(sandwich: Mutable[List[str]], fridge: List[str]):
...     sandwich.extend(random.sample(fridge, k=3))
Run Code Online (Sandbox Code Playgroud)

ama*_*anb 3

列表在 Python 中是可变的,因此Mutable不需要显式的类引用:

In [3]: from typing import List

In [7]: def foo(spam:List[int]):
   ...:     spam.append(sum(spam))
   ...:     return spam  

In [8]: a = [1,2,3]   

In [9]: foo(a)

Out[9]: [1, 2, 3, 6]
Run Code Online (Sandbox Code Playgroud)