簡體   English   中英

可選 [] 類型在 mypy

[英]Optional[] type in mypy

我有以下嵌套函數

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拋出以下錯誤:

error: Argument 2 to "inner" has incompatible type "Optional[int]"; expected "int"

鑒於我將int作為默認值outer_bar ,我看不到潛在的問題。 但是,我能夠解決 mypy 錯誤,將代碼更改為:

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)))

這似乎破壞了聲明中默認 arguments 的用處。 這是最好的/pythonic方式嗎?

由於存在默認值,因此outer_bar不是Optional因為它不會是None

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

注意,當默認值需要為空列表時,關於“Least Astonishment”和 Mutable Default Argument使用None作為默認值,然后or []

def outer(outer_foo:int, outer_bar:Optional[list[int]] = None):
    return inner(outer_foo, outer_bar or [])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM