Python类型提示和`*参数`
假设我有这样一个函数:Python类型提示和`*参数`,python,python-3.x,types,pycharm,typehints,Python,Python 3.x,Types,Pycharm,Typehints,假设我有这样一个函数: def foo(*args): for x in args: print(x) 假设我想说,args的所有元素都是int;什么是正确的表达方式?我应该做类似的事情吗 from typing import Tuple def foo(*args: Tuple[int, ...]) -> None: for x in args: print(x) def foo(*args: int) -> None:
def foo(*args):
for x in args:
print(x)
假设我想说,args
的所有元素都是int
;什么是正确的表达方式?我应该做类似的事情吗
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)
或者类似的
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
您应该看看文档字符串。PyCharm允许您在docstring中定义参数,包括或不包括类型。如果定义类型,提示将考虑参数的类型
def foo(*args):
"""
General information about foo
:param [int] args: info about args
"""
for x in args:
print(x)
根据:
也可以对任意参数列表进行类型注释,以便定义:
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) -> None:
for x in args:
print(x)
在Python 2中:
def foo(*args):
# type: (*int) -> None
for x in args:
print(x)
很好,作为一个快速解决方案,它似乎有效。我仍然更喜欢基于类型提示和函数注释的解决方案,但如果没有结果,我会解决这个问题。您的第一种方法是正确的,请使用
Tuple[int,…]
,*args:int
总是错误的,因为Python将使用传递的多余位置值为*args
创建一个元组。@JimFasarakisHilliard根据现在接受的答案,*args
和**kwargs
似乎是特殊大小写的。