这是我当前的代码:
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函数的工作方式相对应)?
答案 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中的任何数据结构,它可以包含多个值,如元组或列表,并附加你需要返回到循环内的任何值,一旦循环完成,返回数据结构。