Яке просте основне пояснення того, що таке оператор return, як використовувати його в Python?
І в чому різниця між ним і printтвердженням?
Яке просте основне пояснення того, що таке оператор return, як використовувати його в Python?
І в чому різниця між ним і printтвердженням?
Відповіді:
У print()функції запису, тобто, «друкує», рядок в консолі. Оператор returnзмушує вашу функцію вийти і повернути значення своєму абоненту. Сенс функцій загалом полягає у тому, щоб взяти вхідні дані і щось повернути. Оператор returnвикористовується, коли функція готова повернути значення своєму абоненту.
Наприклад, ось функція, яка використовує обидва print()і return:
def foo():
print("hello from inside of foo")
return 1
Тепер ви можете запустити код, який викликає foo, приблизно так:
if __name__ == '__main__':
print("going to call foo")
x = foo()
print("called foo")
print("foo returned " + str(x))
Якщо запустити це як скрипт (наприклад, .pyфайл), на відміну від інтерпретатора Python, ви отримаєте такий результат:
going to call foo
hello from inside foo
called foo
foo returned 1
Я сподіваюся, це дає зрозуміти. Інтерпретатор записує в консоль повернені значення, щоб я міг зрозуміти, чому хтось може заплутатися.
Ось ще один приклад інтерпретатора, який демонструє, що:
>>> 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
Ви можете бачити, що при foo()виклику з bar(), 1 не записується на консоль. Натомість він використовується для обчислення значення, поверненого з bar().
print()- це функція, яка викликає побічний ефект (вона пише рядок у консолі), але виконання відновлюється з наступним оператором. returnзмушує функцію зупиняти виконання та передавати значення тому, що його називало.
"foo returned " + str(x)інакше ви отримаєте TypeError: cannot concatenate 'str' and 'int' objects.
Я думаю, що словник - це ваше найкраще посилання тут
Повернення та друк
Коротко:
return повертає щось або відповідає абоненту функції, поки друк видає текст
Подумайте про те, що оператор print спричиняє побічний ефект , це змушує вашу функцію виписувати якийсь текст користувачеві, але його не може використовувати інша функція.
Я спробую пояснити це краще на кількох прикладах та декількох визначеннях з Вікіпедії.
Ось визначення функції з Вікіпедії
Функція в математиці пов’язує одну величину, аргумент функції, також відому як вхід, з іншою величиною, значенням функції, також відомою як вихід.
Подумайте про це на секунду. Що це означає, коли ви говорите, що функція має значення?
Це означає, що ви можете фактично замінити значення функції нормальним значенням! (Припускаючи, що ці два значення є одним типом значення)
Чому ви хочете, щоб ви запитали?
А як щодо інших функцій, які можуть приймати такий же тип значення як вхідні дані ?
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
Існує вигадливий математичний термін для функцій, які залежать лише від їх вхідних даних для отримання своїх результатів: посилальна прозорість. Знову ж таки, визначення з Вікіпедії.
Референційна прозорість та референційна непрозорість - властивості частин комп’ютерних програм. Вираз називається референтно прозорим, якщо його можна замінити своїм значенням без зміни поведінки програми
Можливо, трохи важко зрозуміти, що це означає, якщо ви лише новачок у програмуванні, але я думаю, ви отримаєте це після певних експериментів. Загалом, хоча, ви можете робити такі речі, як друк у функції, а також можете мати оператор return у кінці.
Тільки пам’ятайте, що коли ви використовуєте return, ви в основному говорите: "Виклик цієї функції - це те саме, що написати значення, яке повертається"
Python фактично вставить для вас повернене значення, якщо ви відмовитеся вводити своє, воно називається "None", і це спеціальний тип, який просто нічого не означає, або null.
У python ми починаємо визначати функцію з "def" і загалом, але не обов'язково, закінчуємо функцію "return".
Функція змінної x позначається як f (x). Що робить ця функція? Припустимо, ця функція додає 2 до x. Отже, f (x) = x + 2
Тепер код цієї функції буде таким:
def A_function (x):
return x + 2
Після визначення функції ви можете використовувати це для будь-якої змінної та отримати результат. Як от:
print A_function (2)
>>> 4
Ми могли б просто написати код трохи інакше, наприклад:
def A_function (x):
y = x + 2
return y
print A_function (2)
Це також дало б "4".
Тепер ми можемо навіть використовувати цей код:
def A_function (x):
x = x + 2
return x
print A_function (2)
Це також дасть 4. Дивіться, що "x" поряд із return фактично означає (x + 2), а не x "A_function (x)".
Думаю, з цього простого прикладу ви зрозуміли б значення команди return.
return означає, "вивести це значення з цієї функції".
print означає, "надіслати це значення в (загалом) stdout"
У Python REPL за замовчуванням на екран виводиться функція повернення (це не зовсім те саме, що друк).
Це приклад друку:
>>> 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
>>>
Це приклад повернення:
>>> 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
>>>
Ця відповідь стосується деяких випадків, які не обговорювались вище.
Оператор return дозволяє припинити виконання функції до досягнення кінця. Це призводить до того, що потік виконання негайно повертається до абонента.
У рядку номер 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)
Після виконання умовного оператора ret()функція припиняється через return temp(рядок 4). Таким чином print("return statement"), не виконується.
Вихід:
two digits
Цей код, який з’являється після умовних операторів або місця, до якого не може потрапити потік контролю, є мертвим кодом .
Повертаючі значення
У рядках номер 4 та 8 оператор return використовується для повернення значення тимчасової змінної після виконання умови.
Щоб виявити різницю між друком та поверненням :
def ret(n):
if n > 9:
print("two digits")
return "two digits"
else :
print("one digit")
return "one digit"
ret(25)
Вихід:
two digits
'two digits'
Просто додати до чудової відповіді @Nathan Hughes:
returnЗаява може бути використано в якості свого роду потоку управління. Поставивши один (або більше)return операторів в середині функції, ми можемо сказати: "припиніть виконувати цю функцію. Ми або отримали те, що хотіли, або щось пішло не так!"
Ось приклад:
>>> 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!
Щоб отримати додаткові поради щодо цього способу використання, див . Розділ «Стиль коду» посібника Python return.
Різницю між "return" і "print" також можна знайти в наступному прикладі:
ПОВЕРНЕННЯ:
def bigger(a, b):
if a > b:
return a
elif a <b:
return b
else:
return a
Наведений вище код дасть правильні результати для всіх входів.
ДРУК:
def bigger(a, b):
if a > b:
print a
elif a <b:
print b
else:
print a
ПРИМІТКА. У багатьох тестових випадках це не вдасться.
ПОМИЛКА:
----
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
Я думаю, що справді проста відповідь може бути тут корисною:
returnробить значення (змінну, часто) доступною для використання абонентом (наприклад, для збереження функцією, у якій функція, що використовується return). Без цього returnваше значення або змінна не були б доступні для того, хто викликав, щоб зберігати / використовувати повторно.
print друкує на екран, але не робить значення або змінну доступними для використання абонентом.
(Цілком визнаючи, що більш ґрунтовні відповіді є точнішими.)
Ось моє розуміння. (сподіваюся, це допоможе комусь і це правильно).
def count_number_of(x):
count = 0
for item in x:
if item == "what_you_look_for":
count = count + 1
return count
Отже, цей простий шматок коду підраховує кількість випадків чогось. Розміщення прибутку є значним. Він повідомляє вашій програмі, де вам потрібно значення. Отже, коли ви друкуєте, ви надсилаєте вихідні дані на екран. Повернувшись, ви говорите значення, щоб кудись йти. У цьому випадку ви можете бачити, що count = 0 з відступом відступає - ми хочемо, щоб значення (count + 1) замінило 0. Якщо ви намагаєтесь слідувати логіці коду, коли ви відступаєте командою return, вихід завжди буде 1 , тому що ми ніколи не сказали б, щоб початковий рахунок мінявся. Сподіваюся, я правильно зрозумів. О, і повернення завжди знаходиться всередині функції.
Найкраще у returnфункції - це те, що ви можете повернути значення з функції, але ви можете зробити те саме з printтакою, яка різниця? В основному returnне про те, щоб просто повернути його, виводиться вивід у формі об’єкта, щоб ми могли зберегти це повертане значення з функції до будь-якої змінної, але ми не можемо зробити, printоскільки це те саме, що і stdout/coutв C Programming.
Дотримуйтесь наведеного нижче коду для кращого розуміння
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?"
Зараз ми виконуємо власні математичні функції для add, subtract, multiply,та divide. Найважливіше, на що слід звернути увагу, це останній рядок, де ми говоримо повернення a + b(в add). Це робить наступне:
aі b.a + b. Ви можете сказати це як: "Я додаю, aа bпотім повертаю їх".a + bрезультат змінній.returnслід використовувати для рекурсивних функцій / методів, або ви хочете використовувати повернене значення для наступних програм у своєму алгоритмі.
print слід використовувати, коли ви хочете відобразити значущий та бажаний результат для користувача, і ви не хочете захаращувати екран проміжними результатами, які не цікавлять користувача, хоча вони корисні для налагодження вашого коду.
Наступний код показує, як правильно returnі printправильно використовувати :
def fact(x):
if x < 2:
return 1
return x * fact(x - 1)
print(fact(5))
Це пояснення справедливо для всіх мов програмування, а не лише для python .