在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(),就没有问题:
主要:
A(argA1val, argA2val, argA3val)
但是如果我用一些缺少的参数调用A()怎么办?:
主要:
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):
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)
否则,我需要做类似的事情:
def A(argA1 = defValA1,argA2 = defValA2,argA3 = defValA3):
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…
如果我们有更多的参数,组合甚至更多。
任何人都知道是否有办法获取要在函数中传递的参数的默认值吗?
谢谢!
答案 0 :(得分:0)
只需将它们设为None
并在执行时设置它们即可。
def A(argA1=None, argA2=None, argA3=None):
argB1val= (K * argA1) if argA1 is not None else defValA1
argB2val= (K * argA2) if argA2 is not None else defValA2
argB3val= (K * argA3) if argA3 is not None else defValA3
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)