【问题标题】:Python, calling a function with default value for argumentsPython,调用具有参数默认值的函数
【发布时间】:2019-02-20 23:47:04
【问题描述】:

在 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(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)

否则,我需要执行以下操作:

定义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… 

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

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

谢谢!

【问题讨论】:

  • A 的参数的默认值(defValA1defValA2defValA3)不足以用作默认值,当您到达您计算用于从A 中调用B 的参数。真正的默认值在任何意义上都是默认值。正如@MatiasCicero 所建议的,您不妨使用一些其他值(例如None)作为默认值,代替defValA1defValA2defValA3

标签: python function parameters arguments


【解决方案1】:

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

【讨论】:

  • 感谢 Matias 的评论。事实上,“无”将是一个适当的默认值,但我认为我的问题没有被理解。
  • 在您展示的示例中,如果值 argA1 为 None,我希望 argB1val 采用 defValB1...
  • argB1val= (K * argA1) if argA1 is not None else defValB1
  • 但是我不知道 defValB1 的值以这种方式实现它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 2013-08-11
  • 2013-06-28
  • 1970-01-01
  • 2011-05-06
  • 2014-02-27
  • 1970-01-01
相关资源
最近更新 更多