首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Optional[]类型

Optional[]类型
EN

Stack Overflow用户
提问于 2022-01-10 18:33:48
回答 1查看 2.6K关注 0票数 0

我有以下嵌套函数

代码语言:javascript
复制
from typing import Optional

def outer(
    outer_foo:int,
    outer_bar:Optional[int] = 5
):
    return inner(outer_foo, outer_bar)

def inner(
    inner_foo:int,
    inner_bar:int
):
    return inner_foo+inner_bar

print(outer((1)))

mypy抛出以下错误:

代码语言:javascript
复制
error: Argument 2 to "inner" has incompatible type "Optional[int]"; expected "int"

考虑到我给出了一个int作为outer_bar的默认值,我认为没有潜在的问题。但是,我能够解决将代码更改为以下内容的类型错误:

代码语言:javascript
复制
from typing import Optional

def outer(
    outer_foo:int,
    outer_bar:Optional[int] = None
):
    if outer_bar is None:
        outer_bar = 5
    return inner(outer_foo, outer_bar)

def inner(
    inner_foo:int,
    inner_bar:int
):
    return inner_foo+inner_bar

print(outer((1)))

这似乎破坏了声明中默认参数的有用性。这是最好的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-10 18:36:56

因为有默认值,所以outer_bar不是Optional,因为它不是None

代码语言:javascript
复制
def outer(outer_foo: int, outer_bar: int = 5):
    return inner(outer_foo, outer_bar)

注意,当默认值需要为空列表时,假设"Least Astonishment" and the Mutable Default Argument使用None作为默认值,则or []

代码语言:javascript
复制
def outer(outer_foo:int, outer_bar:Optional[list[int]] = None):
    return inner(outer_foo, outer_bar or [])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70657329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档