2009-04-15 17 views
24

w moim poprzednim question Andrew Jaffe pisze:W jaki sposób zwraca wynik innej funkcji niż drukowanie?

Poza wszystkimi innymi wskazówki, myślę, że jesteś czegoś brakuje kluczowe: twoje funkcje rzeczywiście trzeba powrócić coś. Po utworzeniu autoparts() lub splittext() chodzi o to, że będzie to funkcja, do której można zadzwonić i która może (i powinna) dać coś z powrotem. Po wykryciu wyjścia, które ma mieć funkcja, należy umieścić go w oświadczeniu return.

def autoparts(): 
    parts_dict = {} 
    list_of_parts = open('list_of_parts.txt', 'r') 

    for line in list_of_parts: 
     k, v = line.split() 
     parts_dict[k] = v 

    print(parts_dict) 

>>> autoparts() 
{'part A': 1, 'part B': 2, ...} 

Funkcja ta tworzy słownika, ale nie zwraca coś. Jednak od czasu dodania print, wyjście funkcji jest wyświetlane, gdy uruchomię tę funkcję. Jaka jest różnica między wartością return i print?

Odpowiedz

55

Drukuj prostu wypisuje strukturę do urządzenia wyjściowego (zazwyczaj konsoli). Nic więcej. Aby zwrócić go z funkcji, należy:

def autoparts(): 
    parts_dict = {} 
    list_of_parts = open('list_of_parts.txt', 'r') 
    for line in list_of_parts: 
     k, v = line.split() 
     parts_dict[k] = v 
    return parts_dict 

Dlaczego wrócić? Cóż, jeśli nie, ten słownik umiera (zbiera śmieci) i nie jest już dostępny, jak tylko zakończy się to wywołanie funkcji. Jeśli zwrócisz wartość, możesz zrobić z nią inne rzeczy. Na przykład:

my_auto_parts = autoparts() 
print my_auto_parts['engine'] 

Zobacz, co się stało? Funkcja autoparts() została wywołana i zwróciła part_dict, a my zapisaliśmy ją w zmiennej my_auto_parts. Teraz możemy użyć tej zmiennej, aby uzyskać dostęp do obiektu słownika i nadal działa, mimo że wywołanie funkcji jest zakończone. Następnie wydrukowaliśmy obiekt w słowniku za pomocą klucza "silnik".

Aby uzyskać dobry samouczek, zapoznaj się z dive into python. Jest bezpłatny i bardzo łatwy do naśladowania.

3

po prostu dodać return ...

def autoparts(): 
    parts_dict={} 
    list_of_parts = open('list_of_parts.txt', 'r') 
    for line in list_of_parts: 
     k, v = line.split() 
     parts_dict[k] = v 
    return parts_dict 

drukowania drukuje tylko na standardowe wyjście (ekran) wniosku. Można również zwracać wiele rzeczy, oddzielając je przecinkami:

return parts_dict, list_of_parts 

go używać:

test_dict = {} 
test_dict = autoparts() 
7

Instrukcja print wypisze obiekt użytkownikowi. Instrukcja return umożliwia przypisanie słownika do zmiennej po zakończeniu funkcji.

>>> def foo(): 
...  print "Hello, world!" 
... 
>>> a = foo() 
Hello, world! 
>>> a 
>>> def foo(): 
...  return "Hello, world!" 
... 
>>> a = foo() 
>>> a 
'Hello, world!' 

lub w kontekście powrotu do słownika:

>>> def foo(): 
...  print {'a' : 1, 'b' : 2} 
... 
>>> a = foo() 
{'a': 1, 'b': 2} 
>>> a 
>>> def foo(): 
...  return {'a' : 1, 'b' : 2} 
... 
>>> a = foo() 
>>> a 
{'a': 1, 'b': 2} 

(sprawozdania, gdzie nic nie jest drukowany po linii jest wykonywany oznacza ostatnie stwierdzenie powrócił Brak)

3

Chyba jest zdezorientowany, ponieważ korzystasz z REPL, który automatycznie wypisuje wartość zwróconą podczas wywoływania funkcji.W takim przypadku otrzymasz identyczne wyjście, niezależnie od tego, czy masz funkcję, która tworzy wartość, drukuje ją i wyrzuca, czy masz funkcję, która tworzy wartość i zwraca ją, pozwalając, aby REPL ją wydrukował.

Jednak nie są one bardzo dużo samo, jak zdasz sobie sprawę, kiedy zadzwonić autoparts z innej funkcji, która chce zrobić coś z wartości, które Autoparts tworzy.

Powiązane problemy