2016-10-24 103 views
-2

这是当前的代码,我有:的Python - 返回使用元组(AWS lambda函数)多个值

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函数的工作方式相对应)?

+1

修改'tuple','list'和'set'是一个不好的习惯! – wolframalpha

回答

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]) 
+0

谢谢@Leon :) –

+1

不,'(instance.private_ip_address)'不是元组。 '(instance.private_ip_address,)'或'instance.private_ip_address,'会。 –

0

在你的处理程序代码,当您使用的print而不是return,因为它不破环或功能正常工作。但是,当Python遇到返回时,它会返回我们要求它返回的值,并得出函数结束已达到的结论。它不会继续循环并且一次又一次地返回一个值。

为了更正你的代码,可以使用任何可以容纳多个值的数据结构,如一个元组或列表,并追加任何你需要返回的值到循环中,一旦循环完成,返回数据结构。