2016-06-17 4 views
0

У меня есть код, который мне нужно вернуть значения, но я думаю, что я не могу правильно разместить инструкцию return. Мне нужно, чтобы вернуть объединенный список IP-адрес вызывающей функции в питонеНе знаю, как вернуть значение из функции

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

i не возвращает значение первых двух регионов таким образом, возвращаются только последние области ip. – Kittystone

+0

см. Мои обновления. –

+0

проверяет ваш код, не может получить его правильно, имея проблемы с отступом – Kittystone

0

Ваша проблема заключается не в том, где разместить оператор возврата. Проблема в том, что вы переопределяете ip_list в каждой итерации цикла for, так что нет никакой точки, в которой у вас будет вся информация, чтобы вернуть ее.

Я не знаю точно, что формат, который вы хотите вернуть значения в, но, возможно, вы могли бы определить combined_ip_list переменные как пустой список перед для цикла, добавьте значение ip_list вместо его печати в конце этот цикл, а затем вернуть это значение вне цикла.

+0

да, точно сэр. Мне нужен «comb_ip_list» списка форм. вы можете помочь мне с кодом здесь, я не могу это сделать – Kittystone

Смежные вопросы