根据条件将不同的参数名称传递给函数

时间:2019-03-14 05:34:26

标签: python function variables lambda

我的代码需要一种方法来确定应将其传递给API函数的两个参数名称(不是值)中的哪一个。有两个可能的变量名,并且在调用中将只使用其中一个。像这样的元代码:

user_input = 'tgw-xxxx'

if user_input == 'tgw-xxxx':
    <gateway = (TransitGateway=user_input)>
else:
    <gateway = (VpnGateway=user_input)>

some_api_call(
   CustomerGatewayId='blah',
   BgpAsn=65000,
   <gateway>      # pass either `TransitGateway` argument
                  # or `VpnGateway` argument
  )

因此,换句话说,API将仅在这里 接受TransitGateway或VpnGateway变量,但不能同时接受这两个变量。

您知道解决此问题的最佳方法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

查看keyword arguments功能的Python文档。基本上,您将要创建一个字典来保存您的值:

user_input = 'tgw-xxxx'

args = {}
if user_input == 'tgw-xxxx':
    args['TransitGateway'] = user_input
else:
    args['VpnGateway'] = user_input

然后,您可以将该字典“解包”为函数的参数:

some_api_call(
    CustomerGatewayId='blah',
    BgpAsn=65000,
    **args
)

这将根据some_api_call(..., TransitGateway='something')中的值调用some_api_call(..., VpnGateway='other')args

答案 1 :(得分:-1)

您无需在两个条件分支中设置变量,而只需在每个分支中使用不同的参数调用API:

if user_input == 'tgw-xxxx':
    some_api_call(
       CustomerGatewayId='blah',
       BgpAsn=65000,
       TransitGateway=user_input
    )
else:
    some_api_call(
       CustomerGatewayId='blah',
       BgpAsn=65000,
       VpnGateway=user_input,
    )

如果您仅需进行一次调用,请将所有关键字参数放入字典中,并在条件中设置其他网关:

params = {
   CustomerGatewayId='blah',
   BgpAsn=65000,
}

if user_input == 'tgw-xxxx':
    params['TransitGateway'] = user_input
else:
    params['VpnGateway'] = user_input

然后您可以使用“ double splat”命令传递所有参数:

some_api_call(**params)