仅通过函数参数(如果存在)

时间:2019-08-02 15:05:59

标签: python function

我有如下定义的python3类函数:

class class1:
    def funcOne(self, reqvar1, reqVar2, optVar1=default1, optVar2=default2, optVar3="server.domain", optVar4="defaultUser", optVar5="<default_Flags>"):

它在主程序中被调用(我想这样称呼它):

argsIn=argparser.parse_args()

classInst=class1()
classInst.funcOne(5, 12, argsIn.inVal1, argsIn.inVal2, argsIn.inVal3, argsIn.inVal4, argsIn.inVal5)
运行时,在命令行上

args.inVal [1-5]是可选的。如果没有提供它们,我希望class函数使用默认值,如果提供了它们,则将使用提供的值。

当前,如果未在命令行上提供它们,则inVal [1-5]作为“ None”传递,它将覆盖实际的默认值。

class函数是单独维护的,它们管理默认值。将它们放入我的脚本中(例如在argparser选项中)是不合适的。

有没有一种方法可以轻松地解决这种情况,而无需采取以下措施:

if args.inVal1 and not args.inVal2...
if not args.inVal1 and args.inVal2 and not args.inVal3...

随着组合数量的增加。

似乎应该很简单,但是我在这里没有连接任何东西。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果创建包含可选变量名称的字典,则可以将该字典传递给函数调用。我只注释了用于测试的argparser。

class class1:
    def funcOne(self, reqvar1, reqVar2, optVar1='default1', optVar2='default2', optVar3="server.domain", optVar4="defaultUser", optVar5="<default_Flags>"):
        print(optVar1)
        print(optVar2)
        print(optVar3)
        print(optVar4)
        print(optVar5)

#argsIn=argparser.parse_args()

optionalArgs = {'optVar1': 'TestingVar1',   #args.inVal1,
                'optVar2': None,            #args.inVal2,
                'optVar3': 'TestingVar3',   #args.inVal3,
                'optVar4': None,            #args.inVal4,
                'optVar5': None}            #args.inVal5}
optionalArgsClean = {k:v for k, v in optionalArgs.items() if v is not None}

classInst=class1()
classInst.funcOne(5, 12, **optionalArgsClean)

运行上面的代码会产生:

TestingVar1
default2
TestingVar3
defaultUser
<default_Flags>
相关问题