假设我有这样的功能:
def foo(*args):
for x in args:
print(x)
让我们说我想说args
的所有元素都是int
;从PEP 0484开始表达它的正确方法是什么?我应该做点什么吗
from typing import Tuple
def foo(*args: Tuple[int, ...]) -> None:
for x in args:
print(x)
或类似
def foo(*args: int) -> None:
for x in args:
print(x)
或其他完全不同的东西?
特别是,我试图在PyCharm中有效地使用类型提示,并且我所想到的解决方案似乎都没有帮助PyCharm理解x
应该是int
}。
答案 0 :(得分:3)
根据PEP-484:
任意参数列表也可以是类型注释,因此定义:
def foo(*args: str, **kwds: int): ...
是可以接受的,这意味着,例如,以下所有代表使用有效类型的参数的函数调用:
foo('a', 'b', 'c') foo(x=1, y=2) foo('', z=0)
在函数
foo
的正文中,变量args
的类型推导为Tuple[str, ...]
,变量kwds
的类型为Dict[str, int]
。
从示例中注释foo
函数的正确方法是:
def foo(*args: int):
for x in args:
print(x)
在Python 2中:
def foo(*args):
# type: (*int) -> NoReturn
for x in args:
print(x)
答案 1 :(得分:0)
你应该看一下docstrings。 PyCharm允许您在文档字符串中定义您的参数,包括或不包含类型。如果定义类型,则提示将考虑参数的类型。
def foo(*args):
"""
General information about foo
:param [int] args: info about args
"""
for x in args:
print(x)