gpt4 book ai didi

python - 使用哨兵值作为默认值的类型提示参数

转载 作者:行者123 更新时间:2023-12-04 12:14:55 26 4
gpt4 key购买 nike

我目前使用 this strategy当我无法在函数签名和/或 None 中分配默认参数时已经有了意义。

from typing import Optional

DEFAULT = object()


# `None` already has meaning.
def spam(ham: Optional[list[str]] = DEFAULT):
if ham is DEFAULT:
ham = ['prosciutto', 'jamon']
if ham is None:
print('Eggs?')
else:
print(str(len(ham)) + ' ham(s).')
错误:
Failed (exit code: 1) (2607 ms)

main.py:7: error: Incompatible default for argument "ham" (default has type "object", argument has type "Optional[List[str]]")
Found 1 error in 1 file (checked 1 source file)
  • 如何输入提示 ham没有在 mypy 中出错?或
  • 我应该使用什么策略来代替 DEFAULT = object() ?
  • 最佳答案

    正如我所评论的,这是 Python 中一个活跃的开发领域。 PEP 661建议加一个sentinel创建哨兵对象的函数,但在该 PEP 获得批准之前,您只能靠自己。
    但是,您可以从 PEP 中的一些提议(或拒绝)选项中获得灵感。一种非常简单的方法可以很好地与类型提示配合使用,就是将标记值设为一个类:

    class DEFAULT: pass
    现在,您可以将您的函数类型提示为采用包含 type[DEFAULT] 的类型联合。 :
    def spam(ham: list[str]|None|type[DEFAULT] = DEFAULT):

    关于python - 使用哨兵值作为默认值的类型提示参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69239403/

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