如果语句后如何将命名参数传递给函数?

时间:2015-02-25 11:10:29

标签: python

我有一个类似于此示例代码的库:

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",)

抱歉我的英文

2 个答案:

答案 0 :(得分:2)

之后我会将参数收集到dictunpack中:

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",
  )
)