python的默认参数值中的None和boolean(True,False)有什么区别?

eug*_*gen 1 python

在函数定义中,可以将布尔默认参数的值定义为argument=Noneargument=False

来自pandas concat的示例:

def concat(
    objs,
    axis=0,
    join="outer",
    join_axes=None,
    ignore_index=False,
    keys=None,
    levels=None,
    names=None,
    verify_integrity=False,
    sort=None,
    copy=True,
):

Run Code Online (Sandbox Code Playgroud)

虽然可以找到两种用法,但为什么一个要比另一个使用呢?

这有PEP吗?

ask*_*oni 8

TrueFalse特定bool值。False当您有一个bool字段并且希望默认值为“ False.不要False用作非bool字段的值” 时,请使用默认值。

None稍后将设置值时,用作通用占位符。可以键入as Optional[T],等效于Union[T, None]

你可能会思考NoneFalse相似,因为他们都是“falsy”(bool(x)收益False),但相同的是其他几个值的真,[] () {} 0 0.0等我们不喜欢使用它们None要么。

在您的示例中,True/ False用于字段为布尔值的地方。None用于字段需要的地方Optional[List]。(例外是sort: Optional[bool],它暂时用作不赞成使用的行为的临时兼容性工具。)