Jakie jest proste, podstawowe wyjaśnienie, czym jest instrukcja return, jak jej używać w Pythonie?
Jaka jest różnica między tym a print
stwierdzeniem?
Jakie jest proste, podstawowe wyjaśnienie, czym jest instrukcja return, jak jej używać w Pythonie?
Jaka jest różnica między tym a print
stwierdzeniem?
Odpowiedzi:
Te print()
zapisy funkcyjne, czyli „odbitki”, ciąg w konsoli. return
Instrukcja 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ś. return
Oś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. .py
Plik), 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ą. return
powoduje, że funkcja przestaje wykonywać i przekazuje wartość z powrotem do tego, co ją nazwało.
"foo returned " + str(x)
bo inaczej otrzymasz TypeError: cannot concatenate 'str' and 'int' objects
.
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.
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.
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
>>>
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'
Aby dodać do doskonałej odpowiedzi @Nathana Hughesa:
return
Oświadczenie może być używana jako rodzaj kontroli przepływu. Umieszczając jedną (lub więcej) return
instrukcji 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
.
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
Myślę, że przydałaby się tutaj naprawdę prosta odpowiedź:
return
udostę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).
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.
return
jest częścią definicji funkcji, podczas gdy print
wyprowadza tekst na standardowe wyjście (zwykle konsolę).
Funkcja to procedura przyjmująca parametry i zwracająca wartość. return
jest dla tego drugiego, podczas gdy pierwszy jest skończonydef
.
Przykład:
def timestwo(x):
return x*2
Najlepszą rzeczą w return
funkcji jest to, że możesz zwrócić wartość z funkcji, ale możesz zrobić to samo z, print
więc jaka jest różnica? Zasadniczo return
nie 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ć, print
ponieważ jest tak samo jak stdout/cout
w C Programming
.
Postępuj zgodnie z poniższym kodem, aby lepiej zrozumieć
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:
a
i b
.a + b
. Można powiedzieć, że „dodaję je, a
a b
następnie zwracam ”.a + b
wynik zmiennej.return
powinien 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ć return
i print
poprawnie:
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 .