Python,调用一个带参数默认值的函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python,调用一个带参数默认值的函数相关的知识,希望对你有一定的参考价值。

在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()类似于:

来宾A(Arga 1 = Defvala 1,Defer = Deffal,Refer = Deffal):

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)

否则,我需要做类似的事情:

来宾A(Arga 1 = Defvala 1,Defer = Deffal,Refer = Deffal):

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… 

如果我们有更多的参数,甚至有更多的组合。

任何人都知道是否有办法获得在函数中传递的参数的默认值?

谢谢!

答案

让他们成为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)

以上是关于Python,调用一个带参数默认值的函数的主要内容,如果未能解决你的问题,请参考以下文章

Python函数-3

自学入门不在困难,初学者挑战学习Python编程30天

Python 默认参数混淆

如何在不传入值的情况下调用带参数的函数? [迅捷游乐场]

如何在Python中定义静态变量

Python函数