Python,调用参数具有默认值的函数

Python,调用参数具有默认值的函数,python,function,parameters,arguments,Python,Function,Parameters,Arguments,在python中,如何使用参数的默认值调用函数?我知道在调用函数时不传递参数是可以做到的,但是我更愿意通过函数传递变量。 具有以下两个功能: def A(argA1=defValA1, argA2=defValA2, argA3=defValA3): argB1val=K*argA1 argB2val=K*argA2 argB3val=K*argA3 B(argB1=argB1val, argB2=argB2val,argB3=argB3val) def

在python中,如何使用参数的默认值调用函数?我知道在调用函数时不传递参数是可以做到的,但是我更愿意通过函数传递变量。 具有以下两个功能:

def A(argA1=defValA1, argA2=defValA2, argA3=defValA3):    
    argB1val=K*argA1
    argB2val=K*argA2
    argB3val=K*argA3
    B(argB1=argB1val, argB2=argB2val,argB3=argB3val)

def B(argB1=defValB1, argB2=defValB2, argB3=defValB3):
    print("First argument: "+argB1)
    print("Second argument: "+argB2)
    print("Third argument: "+argB3)
如果我使用所有参数调用()则没有问题:

主要内容:

但是如果我调用一个()时缺少一些参数会怎么样

主要内容:

A(argA1val) 
在本例中,在A()函数中

将调用B(),取最后两个的默认值:

B(argB1= K*argA1, argB2= K* defValA2, argB3= K* defValA3)
但是,我想使用最后两个参数的默认值调用B(),例如:

B(argB1= K*argA1, argB2=defValB2, argB3=defValB3)
因此,我希望A()类似于:

def A(argA1=defValA1,argA2=defValA2,argA3=defValA3):

否则,我需要做如下操作:

def A(argA1=defValA1,argA2=defValA2,argA3=defValA3):

如果我们有更多的参数,就有更多的组合

有人知道是否有办法获得要在函数中传递的参数的默认值吗


谢谢

让它们成为
None
,并在执行时设置它们

def A(argA1=None,argA2=None,argA3=None):
argB1val=(K*argA1)如果argA1不是None-else-defValA1
argB2val=(K*argA2)如果argA2不是None-else defValA2
argB3val=(K*argA3)如果argA3不是None-else defValA3
B(argB1=argB1val,argB2=argB2val,argB3=argB3val)
def B(argB1=defValB1,argB2=defValB2,argB3=defValB3):
打印(“第一个参数:+argB1)
打印(“第二个参数:+argB2)
打印(“第三个参数:”+argB3)

让它们成为
None
,并在执行时设置它们

def A(argA1=None,argA2=None,argA3=None):
argB1val=(K*argA1)如果argA1不是None-else-defValA1
argB2val=(K*argA2)如果argA2不是None-else defValA2
argB3val=(K*argA3)如果argA3不是None-else defValA3
B(argB1=argB1val,argB2=argB2val,argB3=argB3val)
def B(argB1=defValB1,argB2=defValB2,argB3=defValB3):
打印(“第一个参数:+argB1)
打印(“第二个参数:+argB2)
打印(“第三个参数:”+argB3)

当您从
A
中计算用于调用
B
的参数的参数的默认值(
defValA1
defValA2
defValA3
)时,您的默认值不足以用作默认值。真正的违约在任何意义上都是违约。正如@Matiascero所建议的,您也可以使用一些其他值(例如
None
)作为默认值,代替
defValA1
defValA2
、和
defValA3
A
的参数的默认值(
defValA1
defValA2
),当您从
A
中计算用于调用
B
的参数时,这些参数不足以用作默认值。真正的违约在任何意义上都是违约。正如@Matiascero所建议的,您还可以使用一些其他值(例如
None
)作为默认值,以代替
defValA1
defValA2
defValA3
。感谢Matias的评论。事实上,“None”将是一个合适的默认值,但我认为我的问题没有被理解。在您展示的示例中,如果值argA1为None,我希望argB1val采用deffalb1…argB1val=(K*argA1)如果argA1不是None,则采用deffalb1,但我不知道deffalb1的值以这种方式实现它。谢谢Matias的评论。事实上,“None”将是一个合适的默认值,但我认为我的问题还没有被理解。在您展示的示例中,如果argA1的值为None,我希望argB1val接受deffalb1……如果argA1不是None,则argB1val=(K*argA1)deffalb1,但我不知道deffalb1的值如何以这种方式实现它
B(argB1= K*argA1, argB2=defValB2, argB3=defValB3)
if (argA1==defValA1):
    argB1val=B.getDefaultValue("argB1")
else:
    argB1val=K*argA1

if (argA2==defValA2):
    argB2val=B.getDefaultValue("argB2")
else:
    argB2val=K*argA2

if (argA3==defValA3):
    argB3val=B.getDefaultValue("argB3")
else:
    argB3val=K*argA3

B(argB1=argB1val,argB2=argB2val,argB3=argB3val)
if (argA1==defValA1 && argA2!=defValA2 && argA3!=defValA3):

    argB2val=K*argA2
    argB3val=K*argA3
    B(argB1= defValB1, argB2=argB2val,argB3=argB3val)

if (argA1!=defValA1 && argA2==defValA2 && argA3!=defValA3):

    argB1val=K*argA1
    argB3val=K*argA3
    B(argB1=argB1val, argB2= defValB2,argB3=argB3val)

if (argA1!=defValA1 && argA2!=defValA2 && argA3==defValA3):

    argB1val=K*argA1
    argB2val=K*argA2
    B(argB1= argB1val, argB2=argB2val,argB3= defValB1)

if (argA1==defValA1 && argA2==defValA2 && argA3!=defValA3):

    argB3val=K*argA3
    B(argB1= defValA1, argB2= defValA2,argB3=argB3val)

    ….
    ….
    ….

    Etc…