[英]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.