Python - return 使用元组的多个值(AWS lambda 函数)

Python - return multiple values using tuple (AWS lambda function)

这是我当前的代码:

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)

我正在尝试 return 所有 private_ip_addresses。此代码仅 return 给我 1 个 IP 地址,但我应该取回 3 个地址。如果我改为 print,它 return 是正确的 3 个值

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

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

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

这目前 return 是一个空值。但是,如果我 print tup ,它 return 就是 (1, 2, 3, 4, 5, 6)

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

语句“return (instance.private_ip_address)” returns 一个由单个值组成的元组。事实上,它是从循环中调用的,这没有任何区别 - 只要 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])

在您的处理程序代码中,当您使用 print 而不是 return 时,它工作正常,因为它不会中断循环或函数。但是当 Python 遇到 return 时,它 return 就是我们要求它 return 的值,并得出函数结束的结论。它不会继续循环和 return 一次又一次的值。

为了更正您的代码,请使用 python 中可以包含多个值的任何数据结构,例如元组或列表,并将您需要的任何值附加到 return循环,一旦循环完成,return 数据结构。