2014-11-22 3 views
1

У меня есть две функции. Первая функция - def training_list() создает два списка - under_50k & over_50k. Я бы хотел, чтобы вторая функция def sums_lists() создала sum_list, который добавляет каждый индекс в оба списка, а затем добавляет каждый список для создания 1 list-sums_list. когда я запускаю код, он говорит, что over_50k не определен в функции sums_list. Можете ли вы сказать мне, как я определить это, я хочу перенести список over_50k under_50k & в новую функциюPython: Функции - перенос результатов из одной функции в другую


  • сообщение об ошибке

    File "C:\Python34\Lib\assign1.py", line 208, in sums_list over_50k_sum_list = [sum(k) for k in zip(*over_50k)] NameError: name 'over_50k' is not defined


def training_list(): 

    data_list = create_data(data_url) 
    training_list = data_list[:int(len(data_list) * 75/100)] 
    test_list = data_list[int(len(data_list) * 25/100):] 

    #return training_list 


    over_50k = [] 
    over_50k_count = 0 
    under_50k = [] 
    under_50k_count = 0 

    for row in training_list: 
     if row[-1].lstrip() == '<=50K': 
      under_50k.append(row[:-1]) 
      under_50k_count +=1 
     elif row [-1].lstrip() == ">50K": 
      over_50k.append(row[:-1]) 
      over_50k_count +=1 


    return under_50k,over_50k 

def sums_list(): 

    over_50k_sum_list = [] 
    under_50k_sum_list = [] 

    over_50k_sum_list = [sum(k) for k in zip(*over_50k)] 
    under_50k_sum_list = [sum(k) for k in zip(*under_50k)] 
    sums_list = over_50k_sum_list + under_50k_sum_list 

    print(sums_list) 
    return sums_list 

def main(): 
    def trainging_list(): 

     over_50k = [[1, 2, 3, 4], [3, 4, 5, 6], [7, 8, 9, 8]] 
     under_50k = [[1, 4, 6, 8], [3, 7, 4, 5], [6, 9, 4, 5]] 
     print(over_50k) 
     return over_50k, under_50k 

    over_50k, under_50k = trainging_list() 

    def sum_columns(over_50k, under_50k): 
     print("a") 
     over_50k_sum_list = [sum(k) for k in zip(*over_50k)] 
     under_50k_sum_list = [sum(k) for k in zip(*under_50k)] 
     sums = over_50k_sum_list + under_50k_sum_list 
     print(sums) 
     return sums 
main() 
+1

передать массивы в качестве параметров 'sums_list'. – akonsu

+0

Привет, akonsu, из моего примера, что мне нужно делать? –

+0

Это работает для меня – michaelpri

ответ

0

under_50k и over_50k были назначены только в вашей первой функции. Вы должны вызвать эту функцию, чтобы они могли существовать, когда вы вызываете вторую функцию. Добавление:

under_50k, over_50k = training_list() 

после того, как ваша первая функция будет работать так, как они были тогда назначены глобальными переменными.

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

def sums_list(under_50k, over_50k): 
    # rest of the function 

Затем вызовите одна функция, то другой в отступа пространстве:

p, q = training_list 
sums_list(p ,q) 
0

Ваша главная программа должна вызвать training_list, хранить значения, которые возвращаются, и передать их в sums_list.

def main(): 
    under_50k, over_50k = training_list() 
    sums = sums_list(under_50k, over_50k) 

Но это может быть проще уменьшить sums_list для всего

def sum_columns(table): 
    return [sum(column) for column in zip(*table)] 

и вызвать его с помощью sum_columns(under_50k + over_50k). (Я бы предпочел имя sum_columns, потому что это облегчает понимание того, что он делает.)

+0

Привет Стюарт, пытаясь следовать первой части вашего комментария. Я добавил обновление кода. Просто попытаться получить простой пример для работы в первую очередь. Я добавил функцию def main(), а также менее 50k, over_50k = training_list(). Я получаю следующую ошибку: Файл «C: /Python34/Lib/rerun.py», строка 12, в основном over_50k, under_50k = trainging_list() ТипError: объект 'function' не является итерабельным –

+0

Любые идеи, в которые я иду Неправильно здесь? –

+0

Ваша функция 'trainging_list' возвращает переменную, называемую' trainging_list', не присваивая ей никакого значения. Таким образом, python ищет то, на что вы можете ссылаться, и обнаруживает, что сама функция называется 'trainging_list' и возвращает это. Вам нужно явно указать значение возвращаемой переменной. И обычно вы не должны указывать имя переменной внутри функции с тем же именем, что и сама переменная, поскольку это вызывает путаницу. – Stuart

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