2016-06-17 39 views
0

我有一個代碼,我需要返回的值,但我認爲我不能正確地將return聲明。我需要IP地址的組合列表在python返回到調用函數現在不知道如何從函數返回值

def call_me(): 
    ACCESS_KEY= "XX" 
    SECRET_KEY= "XXXX" 
    regions = ['us-west-2','eu-central-1','ap-southeast-1'] 
    for region in regions: 
    instance_information = {} 
    ip_dict = {} 
    client = boto3.client('ec2',aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY,region_name=region,) 
    addresses_dict = client.describe_addresses().get('Addresses') 

    for address in addresses_dict: 

     if address.get('InstanceId'): 
      instance_information[address['InstanceId']] = [address.get('PublicIp')] 
     # print instance_information 

    dex_dict = client.describe_tags().get('Tags') 
    for dex in dex_dict: 
     if instance_information.get(dex['ResourceId']): 
      instance_information[dex['ResourceId']].append(dex.get('Value')) 
    for instance in instance_information: 

     if len(instance_information[instance]) == 2: 
      ip_dict[instance_information[instance][0]] = instance_information[instance][1] 
     else: 
      ip_dict[instance_information[instance][0]] = '' 
# print (json.dumps(instance_information,indent=4)) 
    #print type(instance_information) 
    ip_list = [i[0] for i in instance_information.values()] 
    print (ip_list) 

我不知道在哪裏發生的,因爲return ip_list聲明,這個運行在3個地區

回答

0

可以前的定義ip_list與價值觀的各區域列表for環和extend它:

ip_list = [] 
for region in regions: 
    instance_information = {} 
    # 
    # your code 
    # 
    ip_list.extend(i[0] for i in instance_information.values()) 
    print(ip_list) 
return ip_list 

如果你想在一個列表的列表,從地區保持值,則可以更換延長線的Wi th:ip_list.append([i[0] for i in instance_information.values()])

+0

我沒有返回前2個區域的值,只有最後一個區域的IP返回 – Kittystone

+0

看到我的更新。 –

+0

嘗試你的代碼,米不能得到它的權利,有縮進問題 – Kittystone

0

你的問題不在於在哪裏放置return語句。問題是您在for循環的每次迭代中都重新定義了ip_list,因此您沒有任何信息可以返回它。

我不知道你想返回的值到底是什麼格式,但也許你可以定義一個combined_ip_list作爲變量在for循環之前的空單,追加的ip_list的值,而不是在結束打印出來的該循環,然後在循環外部返回該值。

+0

是的,正是先生。我需要form_list的'combined_ip_list'。你可以在這裏幫助我的代碼,我無法這樣做 – Kittystone