gpt4 book ai didi

Python-在函数 def 中为所需参数使用默认值是否错误?

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:53 30 4
gpt4 key购买 nike

我有一个看起来像这样的函数:

def somefunc(param1, param2, param3=None, param4=None, param5=None):
if not all([param3, param4, param5]):
raise ValueError("Invalid Parameters")

#continue with rest of the logic if no "ValueError"

param3, param4, param5 都是函数所需要的。根据 func 的调用方式,我限制了最多 3 个位置。我可以将它们收集为单独的关键字参数,默认值为 None ,就像我在上面显示的那样,或者作为可以接受参数字典的 **kwargs

因为我正在检查是否每个参数都分配了一些值或者引发了 ValueError,所以在 func def 期间对所需参数使用这样的默认值是否错误。我理解这里解释的可变默认值的问题 Default Parameter Values in Python .但是,对必需的函数参数使用哨兵对象或类似 None 的东西仍然是一种不好的做法吗?

此外,如果这不是一个好的做法,那么正确的做法是什么?谢谢。

最佳答案

在 Python 3 中,您可以拥有必须通过关键字传递的必需变量:

def somefunc(pos1, pos2, *, kwonly3, kwonly4): # kwonly3 and kwonly4 are still required!
pass

但我不确定您是否一定需要它。如果您的函数对所有位置参数都有意义,您仍然可以通过按关键字传递它们的 API 调用它:

def somefunc2(pos1, pos2, pos3, pos4): # all parameters are required
pass

# you can call the function with keyword arguments, or even with **kwargs
somefunc2("foo", "bar", pos3="baz", **{"pos4": "quux"}) # this will work

关于Python-在函数 def 中为所需参数使用默认值是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22316781/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com