Python中是否有一个标准函数接受一个参数,忽略它,并总是返回None?

s71maibg  于 2023-10-21  发布在  Python
关注(0)|答案(1)|浏览(82)

我需要给一个库函数提供一个返回None的可调用函数:

def some_third_party_function(callback: Callable[[], None]) -> None:
    ...

但是我想使用一个不返回None的函数,并丢弃它的参数。

def func_to_use_as_callback() -> bool:
    ...

下面的尝试失败了类型检查,因为lambda没有返回None:

some_third_party_function(lambda: func_to_use_as_callback())

我现在所拥有的是:

def _discard_arg(arg) -> None:
    pass

some_third_party_function(_discard_arg(lambda: func_to_use_as_callback()))

Python 3.10标准库是否包含与_discard_arg等效的函数?还是有其他同样简洁的方法来实现所需的行为?

hfyxw5xn

hfyxw5xn1#

我不相信它,但这是很容易实现自己。
首先,你所拥有的是错误的。你把lambda放错地方了:

some_third_party_function(lambda: _discard_arg(func_to_use_as_callback()))

这是一个很好的解决方案,但是在调试时很难跟踪匿名函数,所以您可能更愿意编写一个 Package 器,接受函数并使其返回none。

def _discard_result(func: Callable[[], Any]) -> Callable[[], None]:
    def inner() -> None:
        func()
    return inner

some_third_party_function(_discard_result(func_to_use_as_callback))

相关问题