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:
deffoo():
print("hello from inside of foo")
return1
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:
>>> deffoo():... print("hello from within foo")
... return1
...
>>> foo()
hello from within foo
1>>> defbar():... return10 * 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.
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 ?
defsquare(n):return n * n
defadd_one(n):return n + 1print square(12)
# square(12) is the same as writing 144print 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.
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:
>>> defgetN():... 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.
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 :
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:
>>> defmake_3_characters_long(some_string):... if len(some_string) == 3:
... returnFalse... 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.
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).
Oto moje zrozumienie. (mam nadzieję, że to komuś pomoże i to prawda).
defcount_number_of(x):
count = 0for item in x:
if item == "what_you_look_for":
count = count + 1return 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.
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
defadd(a, b):print"ADDING %d + %d" % (a, b)
return a + b
defsubtract(a, b):print"SUBTRACTING %d - %d" % (a, b)
return a - b
defmultiply(a, b):print"MULTIPLYING %d * %d" % (a, b)
return a * b
defdivide(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:
Nasza funkcja jest wywoływana z dwoma argumentami: ai b.
Drukujemy, co robi nasza funkcja, w tym przypadku „DODAWANIE”.
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 ”.
Python dodaje te dwie liczby. Kiedy funkcja się kończy, każda uruchomiona linia będzie mogła przypisać ten a + bwynik zmiennej.
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:
deffact(x):if x < 2:
return1return x * fact(x - 1)
print(fact(5))
To wyjaśnienie dotyczy wszystkich języków programowania, a nie tylko języka Python .
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()
ireturn
: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 zbar()
, 1 nie jest zapisywane w konsoli. Zamiast tego jest używany do obliczania wartości zwracanej zbar()
.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.źródło
"foo returned " + str(x)
bo inaczej otrzymaszTypeError: cannot concatenate 'str' and 'int' objects
.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
źródło
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.
źródło
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.
źródło
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 >>>
źródło
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 powodureturn temp
(linia 4). Więcprint("return statement")
sposób nie zostanie wykonany.Wynik:
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'
źródło
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ódło
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
źródło
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ę funkcjareturn
). 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).
źródło
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.
źródło
return
jest częścią definicji funkcji, podczas gdyprint
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
źródło
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? Zasadniczoreturn
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 jakstdout/cout
wC 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,
idivide
. Ważną rzeczą, na którą należy zwrócić uwagę, jest ostatnia linia, w której mówimy returna + b
(inadd
). Co to robi, jest następujące:a
ib
.a + b
. Można powiedzieć, że „dodaję je,a
ab
następnie zwracam ”.a + b
wynik zmiennej.źródło
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
iprint
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 .
źródło