我有一个类似于此示例代码的库:
class PlayBook(object):
def __init__(self, playbook= None, host_list= None, module_path= None,):
print "playbook %s host_list %s module_path %s" % (playbook,host_list,module_path)
我需要选择命名参数,我将传递给函数: 如果我尝试这样做:
a=1
b=2
c=3
PlayBook(
if a>1:
module_path=a,
playbook=b,
elif b<1:
playbook=b,
else:
host_list=c,
playbook="playbook",
)
我得到了:
if a>1:
^
SyntaxError: invalid syntax
问题:如何选择命名参数并将其传递给函数?
PS: 我知道我可以这样做:
if a>1:
PlayBook(module_path=a,
playbook=b,)
elif b<1:
PlayBook( playbook=b,)
else:
PlayBook( host_list=c,
playbook="playbook",)
抱歉我的英文
答案 0 :(得分:2)
之后我会将参数收集到dict
和unpack中:
if a > 1:
params = dict(module_path=a, playbook=b)
elif b < 1:
params = dict(playbook=b)
else:
params = dict(host_list=c, playbook="playbook")
PlayBook(**params) # ** for keyword arguments
答案 1 :(得分:1)
不,你不能这样做。将实例化移动到每个子句中。
if a>1:
PlayBook(
module_path=a,
playbook=b,
)
elif b<1:
PlayBook(
playbook=b,
)
else:
PlayBook(
host_list=c,
playbook="playbook",
)
)