我什么时候应该使用varargs来设计Python API?

cdl*_*ary 6 python api variadic-functions

是否有一个很好的经验法则,你应该在你的API中更喜欢varargs函数签名而不是将迭代函数传递给函数?("varargs"是"可变参数"或"可变数量参数"的缩写;即*args)

例如,os.path.join有一个vararg签名:

os.path.join(first_component, *rest) -> str
Run Code Online (Sandbox Code Playgroud)

min允许:

min(iterable[, key=func]) -> val
min(a, b, c, ...[, key=func]) -> val
Run Code Online (Sandbox Code Playgroud)

any/ all只允许迭代:

any(iterable) -> bool
Run Code Online (Sandbox Code Playgroud)

Ant*_*sma 8

当您希望用户将参数列表指定为调用点上的代码或具有单个值是常见情况时,请考虑使用varargs.当您希望用户从其他地方获取参数时,请不要使用varargs.如有疑问,请不要使用varargs.

使用您的示例,os.path.join最常见的用例是使用路径前缀并在其上附加文件名/相对路径,因此调用通常看起来像os.path.join(prefix,some_file).另一方面,any()通常用于处理数据列表,当你知道所有不使用的元素([a,b,c])时,你使用a或b或c.