【发布时间】:2022-01-17 02:48:53
【问题描述】:
假设我有一个具有类型注释的函数,然后是一个指向该函数的变量(指针):
def some_func(arg1: str, arg2: int = 0, arg3: str | None = None) -> List[Any]:
# do something and return
another_func = some_func
因为 py.typed 包应该有 all variables type-annotated 而不是 another_func 也应该有,否则如果从已安装的包中导入函数,Pylance 会报错并且不提供自动完成功能。
如何处理?有没有一种简单的方法来保留参数名称?还是我需要使用 Callable?在那种情况下,你如何处理默认参数?因为当我做这样的事情时:
another_func: Callable[[str, int, str | None], List[Any]] = some_func
another_func("Hello")
然后我得到更多关于缺少位置参数的 linting。如何处理关键字参数?或者将函数签名与参数名称一起复制为类型?
【问题讨论】:
-
Python 没有指针。那不是“函数指针”。那是一个函数。 Python 是一种纯粹的面向对象的语言。 Everything 是一个对象,整数、字符串、列表、元组、函数甚至类本身都只是对象(
type元类的实例) -
这应该被关闭可能是重复的:stackoverflow.com/questions/61569324/…
-
无论如何,答案是使用可调用协议,并在协议的
__call__方法中指定确切的签名 -
@juanpa.arrivillaga 我不是在谈论 C 语言意义上的指针。当然我知道 Python 没有这些。但是 Python 中的每个变量都是内存中对象的引用(指针)。当您定义第一个函数 (some_func) 时,注释在 func 定义中是内联的。但随后为已定义的同一函数创建一个新引用 (another_func)。我的问题是如何注释它。所以不,那不是函数。内存中的对象是一个函数。 some_func 和 another_func 是对该对象的引用(指针)。
标签: python python-3.x annotations python-typing