仅当函数参数存在时传递

2024-06-25 22:53:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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)

你知道吗无效参数[1-5]在运行时在命令行上是可选的。如果它们没有被提供,我希望类函数使用默认值,如果它们被提供,那么它们将使用提供的值。你知道吗

当前,如果命令行上没有提供这些值,则inVal[1-5]将作为“None”传递,这将覆盖实际的默认值。你知道吗

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

有没有一种方法可以轻松地处理这种情况,而不是求助于:

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

随着组合的数量越来越大。你知道吗

看起来应该很简单,但我这里没有什么联系。你知道吗

谢谢你的帮助。你知道吗


Tags: and函数命令行ifnotargspython3class1
1条回答
网友
1楼 · 发布于 2024-06-25 22:53:56

如果创建了包含可选变量名的字典,则可以将该字典传递给函数调用。我只是注释掉了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>

相关问题 更多 >