我的代码需要一种方法来确定应将其传递给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变量,但不能同时接受这两个变量。
您知道解决此问题的最佳方法吗?谢谢!
答案 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)