动态设置函数调用中包含的内容

时间:2018-03-15 18:55:05

标签: python amazon-web-services boto3

我正在为我当前的项目使用Boto3 for AWS。我需要为EC2提供一些不同的describe_images参数作为可选项,我不能使用通配符或空输入来绕过它们。我正在寻找一种方法来根据需要传递添加参数,而不是必须进行一些内容略有不同的<% if (errors.length > 0) { %> <ul> <% for (var i = 0; i < errors.length; i++) { %> <li><%= errors[i].msg %></li> <% } %> </ul> <% } %> 检查。

例如,请参阅下面的代码段。我希望动态添加ifOwners参数,如果它们是在上游提供的,但如果它们不是,则不包括它们。我还没有与谷歌运气好,所以我想要快速发帖。

ImageIds

由于

1 个答案:

答案 0 :(得分:1)

如果查看signature of describe_images,您会看到它以关键字args(通常称为kwargs)的形式接受参数。使用该签名和一点reading on expansion of iterables,您可以动态构建要传递给describe_images电话的关键字参数。

下面是一个具有相同签名的函数的简单示例,它只是回显它所获得的关键字args,让您深入了解函数调用实际接收的内容。

def foo(**kwargs):
     print(kwargs)

owners = None
image_ids = None
search_filters=['a', 'b']

describe_kwargs = {'ExecutableUsers':['all'], 'Filters':search_filters}
foo(**describe_kwargs)

# Now include image ids
describe_kwargs['ImageIds'] = ['ami-26ebbc5c']
foo(**describe_kwargs)

# Now include owners
describe_kwargs['Owners'] = ['309956199498']
foo(**describe_kwargs)

如果您运行此代码段,则会看到以下内容:

{'ExecutableUsers': ['all'], 'Filters': ['a', 'b']}
{'ExecutableUsers': ['all'], 'Filters': ['a', 'b'], 'ImageIds': ['ami-26ebbc5c']}
{'ExecutableUsers': ['all'], 'Filters': ['a', 'b'], 'ImageIds': ['ami-26ebbc5c'], 'Owners': ['309956199498']}

在您的情况下,听起来您希望根据&#34;是否有条件地使用每个describe_kwargsOwners键更新ImageIds dict。它们是在上游提供的。