2015-03-01 3 views
-3

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

import itertools 
from itertools import izip_longest 

def go(): 
    first = [1,2,3,4,5,1] 
    return first 

go() 

second = [6,7,8,9,10] 

print map(sum, izip_longest(go().first, second, fillvalue=0)) 
+0

Было бы полезно иметь сообщения об ошибках (если таковые возникают) и чего вы хотите достичь. –

ответ

1

Просто вызовите функцию, вы возвращаете список в функции так просто вызвав его, вы получите список:

print map(sum, izip_longest(go(), second, fillvalue=0)) 


In [4]: def go(): 
    ...:   first = [1,2,3,4,5,1] 
    ...:   return first 
    ...: 

In [5]: go() 
Out[5]: [1, 2, 3, 4, 5, 1] 

Для того, чтобы сделать то, что вы пытаетесь сделать, на самом деле может быть сделано это было бы очень много и не рекомендуется:

def go(): 
    go.first = [1,2,3,4,5,1] 
    return go 


second = [6,7,8,9,10] 

print map(sum, izip_longest(go().first, second, fillvalue=0)) 
+0

Это то, что я искал. Если у меня было несколько списков, возвращаемых функцией go(), и я хотел выбрать один из них, это будет метод. Почему это не рекомендуется? – user3065619

+0

Если вы хотите, чтобы этот вид поиска атрибутов был лучше, –

0

go() - это функция, а не класс. Go не имеет таких атрибутов, как класс, он просто берет что-то и возвращает что-то еще, все между ними - это «черный ящик».

Так

print map(sum, izip_longest(go(), second, fillvalue) 

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

first = go() 
second = [1,2,3,4] 
print first, second 
0

Функции возвращают значение (или изменяют объект или оба) и все. Хотя у них есть члены, к которым вы можете получить доступ (спасибо @Jon Clements), как и другие объекты, это не типичный способ их использования, а first не является одним из них, поэтому go().first не собирается работать.

Кроме того, go() предоставит вам возвращаемое значение функции, а не сам функционал. Таким образом, вы на самом деле звоните:

[1,2,3,4,5,1].first 

Который также не имеет смысла.

Таким образом, go() возвращает значение, которое было названо first в контексте функции (вот список [1, 2, 3, 4, 5, 1]). Вы можете использовать это значение, дав ему имя после вызова функции, чтобы получить его:

# give `go`'s result a name 
lst = go() 
# now use it via that name ... 
print map(sum, izip_longest(lst, second, fillvalue=0) 

Вы можете также использовать его сразу:

print map(sum, izip_longest(go(), second, fillvalue=0) 
+2

Ну ... функции * могут * иметь и * делать * иметь элементы, которые доступны, если вы используете их как объекты первого класса, не вызывая их :) –

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