在Python中,我们应该在参数列表中设置Optional[str] = None吗?

x0fgdtte  于 2023-01-22  发布在  Python
关注(0)|答案(2)|浏览(565)

我的同事说我最近写的代码崩溃了,那是因为在函数的参数列表中我没有指定Optional[str] = None,我只有Optional[str]
基本上我的函数是这样的:

def a(b: Optional[str]):
    if b is None:
        <do something>
    else:
        <do something>

我一直认为可选参数的默认值是None,所以我没有指定默认值。它对我来说没有崩溃,但对我的同事来说却崩溃了,所以我有点困惑。
我的python版本是〉=3。

j91ykkif

j91ykkif1#

正如上面的注解中提到的,Optional[str]是IDE和其他静态分析工具使用的类型提示,而不是默认参数。如果您希望创建一个默认参数,以便可以使用a()调用函数,那么您确实需要按照您的建议添加= None。如果您希望使用省略的参数调用此函数,这可能是一个合理的方法。但这取决于您的设计和体系结构。

5vf7fwbs

5vf7fwbs2#

给出更多的更新响应。
来自我的文档:

PEP 604 introduced an alternative way for spelling union types. In Python 3.10 and later, you can write Union[int, str] as int | str.

Python文档)也指出新语法是一种将字段设置为可选的方法。

str | None == typing.Optional[str]

在撰写本文also advocates for it时,FastAPI的创建者Tiangolo似乎是一位备受尊敬的python开发人员。
你认为这是事实吗?我认为这仍然是一个意见问题,因为两者都得到了支持。mypy最近唯一最大的变化是,如果它没有标记为Optional或Union[ Any],它不允许将None指定为默认值|无]。

相关问题