python - 如果存在另一个参数则需要参数

标签 python python-3.x signature

以下是我想要做的示例。

def f(a, b, c):
    if a == 'method1':
        c = 0
    return b + c

在此函数中,如果满足条件a='method1',则不需要参数c。 不过,我可以使用 f(a='method1', b=1, c=2) 调用该函数,这与 f(a='method1', b=1,c=0)

解决此问题的方法是将参数c默认设置为0

def f(a, b, c=0):
    if a == 'method1':
        c = 0
    return b + c

现在我可以调用 f(a='method1',b=1),这正是我想要的。问题是,我仍然可以更改调用 f(a='method1',b=1,c=1) 中的参数 c,这是我不想要的用户能够。

我可以在函数签名中而不是在正文中强制执行此条件吗(即我不想在正文中使用 if )。或者如果还有其他更好的解决方案,请告知。

类似于

def f(a, b, c = 0 if a == 'method1', else c is required):
    return b + c

提前致谢。

最佳答案

abc 均在运行时动态分配。您无法通过签名来弥补这一点。它需要在运行时进行检测,您也可以像在其他地方一样在 if 中进行检测。不过,您可以专注于函数名称级别,Python 将负责检测参数的数量。

def f(b,c):
    return b + c

def f_method1(b):
    return f(b, 0)

def f_method2(half_a_c):
    return f(0, half_a_c*2)

关于python - 如果存在另一个参数则需要参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60510886/

相关文章:

python - 连接已分块的 3d numpy 数组

python - 每次在 psycopg2 中获取数据库游标时设置自定义运行时参数

java - 如何通过pdfbox和java向pdf添加多个电子签名

python - Docker:无法安装Tensorflow和numpy

python - 在 Python 中的列表中查找非零数的第一个实例

python - 在BeautifulSoup抓取之后,从Python列表中提取数据,并创建Pandas表

python-3.x - 如何在 Pandas 中选择只有正值或负值的行

python - python 在 float 前插入逗号

python - 如何检查是否使用检查设置了 python 函数参数的默认值?

android - 如何解决不同的签名错误