Jaki jest cel oświadczenia o zwrocie?


Odpowiedzi:


100

Te print()zapisy funkcyjne, czyli „odbitki”, ciąg w konsoli. returnInstrukcja powoduje swoją funkcję, aby zakończyć i oddać wartość do swojego rozmówcy. Ogólnie rzecz biorąc, celem funkcji jest pobieranie danych wejściowych i zwracanie czegoś. returnOświadczenie stosuje się, gdy funkcja jest gotowy do powrotu do wartości jego rozmówcy.

Na przykład, oto funkcja wykorzystująca oba print()i return:

def foo():
    print("hello from inside of foo")
    return 1

Teraz możesz uruchomić kod, który wywołuje foo, na przykład:

if __name__ == '__main__':
    print("going to call foo")
    x = foo()
    print("called foo")
    print("foo returned " + str(x))

Jeśli uruchomisz to jako skrypt (np. .pyPlik), w przeciwieństwie do interpretera Pythona, otrzymasz następujące dane wyjściowe:

going to call foo
hello from inside foo
called foo   
foo returned 1

Mam nadzieję, że to wyjaśnia to jaśniej. Interpreter zapisuje wartości zwracane do konsoli, więc widzę, dlaczego ktoś może być zdezorientowany.

Oto kolejny przykład od tłumacza, który pokazuje, że:

>>> def foo():
...     print("hello from within foo")
...     return 1
...
>>> foo()
hello from within foo
1
>>> def bar():
...   return 10 * foo()
...
>>> bar()
hello from within foo
10

Możesz zobaczyć, że gdy foo()jest wywoływane z bar(), 1 nie jest zapisywane w konsoli. Zamiast tego jest używany do obliczania wartości zwracanej z bar().

print()jest funkcją, która powoduje efekt uboczny (zapisuje łańcuch w konsoli), ale wykonanie jest wznawiane wraz z następną instrukcją. returnpowoduje, że funkcja przestaje wykonywać i przekazuje wartość z powrotem do tego, co ją nazwało.


Musisz użyć, "foo returned " + str(x)bo inaczej otrzymasz TypeError: cannot concatenate 'str' and 'int' objects.
icktoofay

@NathanHughes dzięki za przemyślaną odpowiedź.
Andy K

23

Myślę, że słownik jest tutaj najlepszym odniesieniem

Zwróć i wydrukuj

W skrócie:

return zwraca coś lub odpowiada wywołującemu funkcję, podczas gdy print produkuje tekst


23

Potraktuj instrukcję print jako wywołującą efekt uboczny , która powoduje, że Twoja funkcja wypisuje tekst do użytkownika, ale nie może jej użyć inna funkcja.

Spróbuję to lepiej wyjaśnić kilkoma przykładami i kilkoma definicjami z Wikipedii.

Oto definicja funkcji z Wikipedii

Funkcja w matematyce wiąże jedną wielkość, argument funkcji, zwany również wartością wejściową, z inną wielkością, wartością funkcji, znaną również jako wyjście.

Pomyśl o tym przez chwilę. Co to znaczy, kiedy mówisz, że funkcja ma wartość?

Oznacza to, że można faktycznie zastąpić wartość funkcji wartością normalną! (Zakładając, że te dwie wartości są tego samego typu)

Dlaczego chcesz, żebyś zapytał?

A co z innymi funkcjami, które mogą akceptować ten sam typ wartości jako dane wejściowe ?

def square(n):
    return n * n

def add_one(n):
    return n + 1

print square(12)

# square(12) is the same as writing 144

print add_one(square(12))
print add_one(144)
#These both have the same output

Istnieje fantazyjny termin matematyczny określający funkcje, których dane wyjściowe zależą tylko od danych wejściowych: przezroczystość referencyjna. Znowu definicja z Wikipedii.

Więziowa przezroczystość i referencyjna nieprzejrzystość są właściwościami części programów komputerowych. Mówi się, że wyrażenie jest referencyjnie przezroczyste, jeśli można je zastąpić jego wartością bez zmiany zachowania programu

Może być trochę trudno zrozumieć, co to oznacza, jeśli dopiero zaczynasz programować, ale myślę, że zrozumiesz to po kilku eksperymentach. Ogólnie jednak możesz wykonywać takie czynności, jak wypisywanie w funkcji, a na końcu możesz również umieścić instrukcję return.

Pamiętaj tylko, że kiedy używasz return, w zasadzie mówisz „Wywołanie tej funkcji jest tym samym, co zapisanie wartości, która zostanie zwrócona”

Python faktycznie wstawi dla ciebie wartość zwracaną, jeśli odmówisz wstawienia własnej, nazywa się „Brak” i jest to specjalny typ, który po prostu nic nie znaczy lub jest pusty.


12

W Pythonie zaczynamy definiowanie funkcji od „def” i generalnie, ale niekoniecznie, kończymy funkcję „return”.

Funkcja zmiennej x jest oznaczona jako f (x). Co robi ta funkcja? Załóżmy, że ta funkcja dodaje 2 do x. Czyli f (x) = x + 2

Teraz kod tej funkcji będzie wyglądał następująco:

def A_function (x):
    return x + 2

Po zdefiniowaniu funkcji możesz jej użyć dla dowolnej zmiennej i otrzymać wynik. Jak na przykład:

print A_function (2)
>>> 4

Moglibyśmy po prostu napisać kod nieco inaczej, na przykład:

def A_function (x):
    y = x + 2
    return y
print A_function (2)

Dałoby to również „4”.

Teraz możemy nawet użyć tego kodu:

def A_function (x):
    x = x + 2
    return x
print A_function (2)

To również dałoby 4. Widzisz, "x" obok powrotu faktycznie oznacza (x + 2), a nie x z "A_funkcja (x)".

Myślę, że z tego prostego przykładu zrozumiałbyś znaczenie polecenia powrotu.


11

return oznacza „wyprowadzić tę wartość z tej funkcji”.

print oznacza „wyślij tę wartość na (ogólnie) standardowe wyjście”

W Python REPL funkcja zwracana będzie domyślnie wyświetlana na ekranie (to nie jest to samo, co print).

Oto przykład druku:

>>> n = "foo\nbar" #just assigning a variable. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>

Oto przykład zwrotu:

>>> def getN():
...    return "foo\nbar"
...
>>> getN() #When this isn't assigned to something, it is just output
'foo\nbar'
>>> n = getN() # assigning a variable to the return value. No output
>>> n #the value is output, but it is in a "raw form"
'foo\nbar'
>>> print n #the \n is now a newline
foo
bar
>>>

11

Ta odpowiedź dotyczy niektórych przypadków, które nie zostały omówione powyżej.
Instrukcja return umożliwia przerwanie wykonywania funkcji przed osiągnięciem końca. Powoduje to, że przepływ wykonywania natychmiast powraca do obiektu wywołującego.

W linii numer 4:

def ret(n):
    if n > 9:
         temp = "two digits"
         return temp     #Line 4        
    else:
         temp = "one digit"
         return temp     #Line 8
    print("return statement")
ret(10)

Po wykonaniu instrukcji warunkowej ret()funkcja zostaje zakończona z powodu return temp(linia 4). Więcprint("return statement") sposób nie zostanie wykonany.

Wynik:

two digits   

Ten kod, który pojawia się po instrukcjach warunkowych lub miejscu, do którego przepływ sterowania nie może dotrzeć, jest martwym kodem .

Zwracane wartości
W wierszach numer 4 i 8 instrukcja return jest używana do zwracania wartości zmiennej tymczasowej po wykonaniu warunku.

Aby podkreślić różnicę między drukowaniem a zwrotem :

def ret(n):
    if n > 9:
        print("two digits")
        return "two digits"           
    else :
        print("one digit")
        return "one digit"        
ret(25)

Wynik:

two digits
'two digits'

8

Aby dodać do doskonałej odpowiedzi @Nathana Hughesa:

returnOświadczenie może być używana jako rodzaj kontroli przepływu. Umieszczając jedną (lub więcej) returninstrukcji w środku funkcji, możemy powiedzieć: „przestań wykonywać tę funkcję. Albo mamy to, czego chcieliśmy, albo coś poszło nie tak!”

Oto przykład:

>>> def make_3_characters_long(some_string):
...     if len(some_string) == 3:
...         return False
...     if str(some_string) != some_string:
...         return "Not a string!"
...     if len(some_string) < 3:
...         return ''.join(some_string,'x')[:,3]
...     return some_string[:,3]
... 
>>> threechars = make_3_characters_long('xyz')    
>>> if threechars:
...     print threechars
... else:
...     print "threechars is already 3 characters long!"
... 
threechars is already 3 characters long!

Więcej porad dotyczących tego sposobu używania można znaleźć w sekcji Styl kodu w przewodniku po Pythonie return.


4

Różnicę między słowami „powrót” i „drukowanie” można również znaleźć w następującym przykładzie:

POWRÓT:

def bigger(a, b):
    if a > b:
        return a
    elif a <b:
        return b
    else:
        return a

Powyższy kod da poprawne wyniki dla wszystkich danych wejściowych.

WYDRUKOWAĆ:

def bigger(a, b):
    if a > b:
        print a
    elif a <b:
        print b
    else:
        print a

UWAGA: To się nie powiedzie w wielu przypadkach testowych.

BŁĄD:

----  

FAILURE: Test case input: 3, 8.

            Expected result: 8  

FAILURE: Test case input: 4, 3.

            Expected result: 4  

FAILURE: Test case input: 3, 3.

            Expected result: 3  

You passed 0 out of 3 test cases


1
Hmm, twój wydrukowany kod nie zawiódł dla dostarczonych przypadków testowych. Wszystkie były poprawne!
codingbryan

4

Myślę, że przydałaby się tutaj naprawdę prosta odpowiedź:

returnudostępnia wartość (często zmienną) do użycia przez wywołującego (na przykład do zapisania przez funkcję, w której znajduje się funkcja return). Bezreturn Twojej wartości lub zmiennej nie byłyby dostępne dla wywołującego do przechowywania / ponownego wykorzystania.

print drukuje na ekranie, ale nie udostępnia wartości lub zmiennej do użytku wywołującego.

(W pełni przyznając, że dokładniejsze odpowiedzi są dokładniejsze).


3

Oto moje zrozumienie. (mam nadzieję, że to komuś pomoże i to prawda).

def count_number_of(x):
    count = 0
    for item in x:
        if item == "what_you_look_for":
        count = count + 1
    return count

Więc ten prosty fragment kodu liczy liczbę wystąpień czegoś. Miejsce zwrotu jest znaczące. Mówi programowi, gdzie potrzebujesz wartości. Więc kiedy drukujesz, wysyłasz wynik na ekran. Kiedy wracasz, mówisz, że warto gdzieś iść. W tym przypadku możesz zobaczyć, że count = 0 jest wcięta za pomocą return - chcemy, aby wartość (count + 1) zastąpiła 0. Jeśli spróbujesz podążać za logiką kodu, gdy wciśniesz dalej polecenie powrotu, wyjście zawsze będzie wynosić 1 , ponieważ nigdy nie powiedzielibyśmy, że początkowa liczba ma się zmienić. Mam nadzieję, że udało mi się to dobrze. Aha, i powrót jest zawsze wewnątrz funkcji.


3

returnjest częścią definicji funkcji, podczas gdy printwyprowadza tekst na standardowe wyjście (zwykle konsolę).

Funkcja to procedura przyjmująca parametry i zwracająca wartość. returnjest dla tego drugiego, podczas gdy pierwszy jest skończonydef .

Przykład:

def timestwo(x):
    return x*2

2

Najlepszą rzeczą w returnfunkcji jest to, że możesz zwrócić wartość z funkcji, ale możesz zrobić to samo z, printwięc jaka jest różnica? Zasadniczo returnnie chodzi o zwykłe zwracanie danych wyjściowych w postaci obiektu, dzięki czemu możemy zapisać tę zwracaną wartość z funkcji do dowolnej zmiennej, ale nie możemy tego zrobić, printponieważ jest tak samo jak stdout/coutw C Programming.

Postępuj zgodnie z poniższym kodem, aby lepiej zrozumieć

KOD

def add(a, b):
    print "ADDING %d + %d" % (a, b)
    return a + b

def subtract(a, b):
    print "SUBTRACTING %d - %d" % (a, b)
    return a - b

def multiply(a, b):
    print "MULTIPLYING %d * %d" % (a, b)
    return a * b

def divide(a, b):
    print "DIVIDING %d / %d" % (a, b)
    return a / b


print "Let's do some math with just functions!"

age = add(30, 5)
height = subtract(78, 4)
weight = multiply(90, 2)
iq = divide(100, 2)

print "Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq)


# A puzzle for the extra credit, type it in anyway.
print "Here is a puzzle."

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

print "That becomes: ", what, "Can you do it by hand?"

Teraz wykonujemy własne funkcje matematyczne dla add, subtract, multiply,i divide. Ważną rzeczą, na którą należy zwrócić uwagę, jest ostatnia linia, w której mówimy return a + b(in add). Co to robi, jest następujące:

  1. Nasza funkcja jest wywoływana z dwoma argumentami: ai b.
  2. Drukujemy, co robi nasza funkcja, w tym przypadku „DODAWANIE”.
  3. Następnie mówimy Pythonowi, aby zrobił coś w rodzaju wstecznego: zwracamy dodanie a + b. Można powiedzieć, że „dodaję je, aa bnastępnie zwracam ”.
  4. Python dodaje te dwie liczby. Kiedy funkcja się kończy, każda uruchomiona linia będzie mogła przypisać ten a + bwynik zmiennej.

1

returnpowinien być używany dla funkcji / metod rekurencyjnych lub chcesz użyć zwracanej wartości do późniejszych aplikacji w swoim algorytmie.

print powinno być używane, gdy chcesz wyświetlić użytkownikowi zrozumiałe i pożądane dane wyjściowe i nie chcesz zaśmiecać ekranu wynikami pośrednimi, którymi użytkownik nie jest zainteresowany, chociaż są one pomocne przy debugowaniu kodu.

Poniższy kod pokazuje, jak używać returni printpoprawnie:

def fact(x):
    if x < 2:
        return 1
    return x * fact(x - 1)

print(fact(5))

To wyjaśnienie dotyczy wszystkich języków programowania, a nie tylko języka Python .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.