Python - 使用元组返回多个值(AWS lambda函数)

时间:2016-10-24 05:44:55

标签: python amazon-web-services lambda aws-lambda boto3

这是我当前的代码:

def handler():
    ec2 = boto3.resource("ec2", region_name="ap-southeast-2")
    instances = ec2.instances.filter(Filters=[{'Name':'iam-instance-profile.arn', 'Values': ['arn:aws:iam::123456789012:instance-profile/TestRole']}])
    for instance in instances:
        return (instance.private_ip_address)

我正在尝试返回所有private_ip_addresses。这段代码只返回1个ip地址,但我应该返回3个地址。如果我改为print,则会返回正确的3个值

我做了一些研究,发现使用元组是一个好方法,但到目前为止它还没有为我工作。这是一个我正在尝试使用元组的示例代码(如果它是正确的,应该使用我的代码)

myList=[1,2,3,4,5,6]

def handler():
   tup=()
   for element in myList:
       tup+= (element,)
   return tup

目前返回空值。但是,如果我执行 print tup ,则会返回(1, 2, 3, 4, 5, 6)

任何人都可以让我知道我在使用元组时出错了。或者,如果有更好的方法(与lambda函数的工作方式相对应)?

2 个答案:

答案 0 :(得分:2)

语句“return (instance.private_ip_address)”返回由单个值组成的元组。从循环中调用它的事实没有任何区别 - 只要在第一次迭代期间执行return语句,循环就会终止。

以下内容应该有效:

def handler():
    ec2 = boto3.resource("ec2", region_name="ap-southeast-2")
    instances = ec2.instances.filter(Filters=[{'Name':'iam-instance-profile.arn', 'Values': ['arn:aws:iam::123456789012:instance-profile/TestRole']}])
    return tuple([instance.private_ip_address for instance in instances])

答案 1 :(得分:0)

在您的处理程序代码中,当您使用Include "C:/xampp/apps/magento/conf/httpd-prefix.conf" 而不是print时,它可以正常工作,因为它不会破坏循环或函数。但是当Python遇到一个返回时,它会返回我们要求它返回的值,并得出函数end已经到达的结论。它不会继续循环并一次又一次地返回值。

为了纠正你的代码,使用python中的任何数据结构,它可以包含多个值,如元组或列表,并附加你需要返回到循环内的任何值,一旦循环完成,返回数据结构。