gpt4 book ai didi

python - collections.abc.Callable 在 Python 3.9.1 中是否被窃听?

转载 作者:行者123 更新时间:2023-12-04 13:10:35 28 4
gpt4 key购买 nike

Python 3.9包括 PEP 585并弃用了 typing 中的许多类型模块支持 collections.abc 中的模块, 现在他们支持 __class_getitem__ .例如 Callable 就是这种情况。 .在我看来,typing.Callablecollections.abc.Callable应该总是表现相似,但他们没有。
这个简单的例子会导致一个错误:

>>> from typing import Optional
>>> from collections.abc import Callable
>>> def foo(arg: Optional[Callable[[int], int]]) -> None:
... pass
...
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/local/lib/python3.9/typing.py", line 262, in inner
return func(*args, **kwds)
File "/usr/local/lib/python3.9/typing.py", line 339, in __getitem__
return self._getitem(self, parameters)
File "/usr/local/lib/python3.9/typing.py", line 463, in Optional
return Union[arg, type(None)]
File "/usr/local/lib/python3.9/typing.py", line 262, in inner
return func(*args, **kwds)
File "/usr/local/lib/python3.9/typing.py", line 339, in __getitem__
return self._getitem(self, parameters)
File "/usr/local/lib/python3.9/typing.py", line 451, in Union
parameters = _remove_dups_flatten(parameters)
File "/usr/local/lib/python3.9/typing.py", line 231, in _remove_dups_flatten
return tuple(_deduplicate(params))
File "/usr/local/lib/python3.9/typing.py", line 205, in _deduplicate
all_params = set(params)
TypeError: unhashable type: 'list'
typing.Callable 不会发生同样的错误:
>>> from typing import Callable
>>> def foo(arg: Optional[Callable[[int], int]]) -> None:
... pass
...
>>> # no error
如果签名稍微简化一点,也不会发生错误:
>>> from collections.abc import Callable
>>> def foo(arg: Optional[Callable[..., int]]) -> None:
... pass
...
>>> # no error
>>> def foo(arg: Callable[[int], int]) -> None:
... pass
...
>>> # no error
这是 Python 3.9 和 3.9.1 中的错误吗?

最佳答案

是的,collections.abc.Callable不适用于 3.9.0 和 3.9.1 中的打字目的。被举报here并固定在 3.9.2和 3.10。在此期间您可以继续使用 typing.Callable .

关于python - collections.abc.Callable 在 Python 3.9.1 中是否被窃听?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65858528/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com