Python 仅传递函数参数(如果存在)
我将python3类函数定义如下:Python 仅传递函数参数(如果存在),python,function,Python,Function,我将python3类函数定义如下: class class1: def funcOne(self, reqvar1, reqVar2, optVar1=default1, optVar2=default2, optVar3="server.domain", optVar4="defaultUser", optVar5="<default_Flags>"): args.inVal[1-5]在运行时在命令行上是可选的。如果它们没有被提供,我希望类函数使用默认值,如果它们被提供
class class1:
def funcOne(self, reqvar1, reqVar2, optVar1=default1, optVar2=default2, optVar3="server.domain", optVar4="defaultUser", optVar5="<default_Flags>"):
args.inVal[1-5]在运行时在命令行上是可选的。如果它们没有被提供,我希望类函数使用默认值,如果它们被提供,那么它们将使用提供的值
当前,如果命令行上未提供这些值,则inVal[1-5]将作为“无”传递,这将覆盖实际的默认值
类函数是单独维护的,它们管理默认值。将它们放入我的脚本(例如在argparser选项中)是不合适的
有没有一种方法可以轻松应对这种情况,而不是求助于:
if args.inVal1 and not args.inVal2...
if not args.inVal1 and args.inVal2 and not args.inVal3...
随着组合的数量越来越大
看起来应该很简单,但我这里没有连接任何东西
谢谢您的帮助。如果您创建了一个包含可选变量名的字典,您可以将该字典传递给函数调用。我只是注释掉了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)
class1类:
def funcOne(self、reqvar1、reqVar2、optVar1='default1',optVar2='default2',optVar3=“server.domain”,optVar4=“defaultUser”,optVar5=”):
打印(optVar1)
打印(optVar2)
打印(optVar3)
打印(optVar4)
打印(optVar5)
#argsIn=argparser.parse_args()
optionalArgs={'optVar1':'TestingVar1',#args.inVal1,
“optVar2”:无,#args.2,
“optVar3”:“TestingVar3”,args.inVal3,
“optVar4”:无,#args.4,
“optVar5”:无}#args.inVal5}
optionalArgsClean={k:v代表k,如果v不是None,则在optionalArgs.items()中为v}
classInst=class1()
classInst.funcOne(5,12,**可选参数清理)
运行上述代码会产生:
TestingVar1
default2
TestingVar3
defaultUser
<default_Flags>
TestingVar1
默认值2
测试变量3
默认用户
看看**kwargs
它应该可以帮助您轻松地解决问题。您的函数定义看起来像def funcOne(self、reqvar1、reqvar2、**kwargs)
其中**kwargs
可以用作dict
并包含数量可变的命名参数。。。然后您将执行例如kwargs.get('optVar1',None)
。如果optVar1
不存在,它将返回None
。我知道这一点,但不幸的是,我无法控制类/函数,也无法进行更改(我可以建议,但它去了哪里,我不知道)。我是否可以简单地使用**kwargs这样的函数,并使其与原始定义保持一致?如果您使用**kwargs
定义自己的函数,但仍然使用精确的funcOne
函数,这将导致相同的比较问题:/I由于当前的函数定义,恐怕没有比使用if
语句更好的方法。至少如果没有optVar1
param,您知道您不能有任何其他参数。。(或者使用默认值没有意义)。同样,如果你有optVar1
但没有optVar2
你知道optVar[2-5]
不可能存在…@Flo我很害怕。我可能会先看看是否可以更改函数。你关于optVars的陈述不一定是真的。这个function调用是有效的:funcOne(reqVar1=5,reqVar2=12,optVar4=“roUser”),所以我必须假设任何optVar都可以独立存在或以任何组合存在。从逻辑上讲,出于实际目的,一些可选值必须成对定义(例如用户和密码),但仍然有很多组合。
TestingVar1
default2
TestingVar3
defaultUser
<default_Flags>