2016-10-24 45 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遇到返回時,它會返回我們要求它返回的值,並得出函數結束已達到的結論。它不會繼續循環並且一次又一次地返回一個值。

爲了更正你的代碼,可以使用任何可以容納多個值的數據結構,如一個元組或列表,並追加任何你需要返回的值到循環中,一旦循環完成,返回數據結構。