Какова цель заявления возврата? - PullRequest
71 голосов
/ 20 августа 2011

Каково простое базовое объяснение того, что такое оператор return, как его использовать в Python?

И в чем разница между ним и оператором print?

Ответы [ 12 ]

88 голосов
/ 20 августа 2011

Функция 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 заставляет функцию прекращать выполнение и возвращать значение тому, кто его вызвал.

22 голосов
/ 23 августа 2011

Я думаю, что словарь является вашей лучшей ссылкой здесь

Возврат и Печать

Короче:

return возвращает что-то или отвечает на вызывающую функцию, в то время как print производит текст

21 голосов
/ 23 августа 2011

Представьте, что оператор печати вызывает побочный эффект , он заставляет вашу функцию записывать некоторый текст пользователю, но он не может быть использован другая функция.

Я попытаюсь объяснить это лучше с помощью нескольких примеров и нескольких определений из Википедии.

Вот определение функции из Википедии

Функция в математике связывает одну величину, аргумент функции, также известный как вход, с другой величиной, значением функции, также известной как выход.

Подумайте об этом на секунду. Что это значит, когда вы говорите, что функция имеет значение?

Это означает, что вы можете заменить значение функции обычным значением! (Предполагая, что два значения имеют одинаковый тип значения)

Зачем тебе это спрашивать?

А как насчет других функций, которые могут принимать значения того же типа, что и вход ?

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

Существует причудливый математический термин для функций, которые зависят только от своих входных данных для получения своих выходных данных: ссылочная прозрачность. Опять определение из Википедии.

Ссылочная прозрачность и ссылочная непрозрачность являются свойствами частей компьютерных программ. Выражение называется прозрачным по ссылкам, если его можно заменить его значением без изменения поведения программы

Может быть, немного сложно понять, что это значит, если вы новичок в программировании, но я думаю, что вы получите это после некоторых экспериментов. В общем, вы можете делать такие вещи, как print, в функции, а также иметь оператор return в конце.

Просто помните, что когда вы используете return, вы в основном говорите: «Вызов этой функции аналогичен записи возвращаемого значения»

Python фактически вставит возвращаемое значение для вас, если вы откажетесь вводить свое собственное, оно называется «Нет», и это специальный тип, который просто ничего не значит, или нуль.

11 голосов
/ 18 мая 2015

В 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)».*

Полагаю, из этого простого примера вы поймете значение команды возврата.

10 голосов
/ 23 июня 2017

Этот ответ охватывает некоторые случаи, которые не обсуждались выше.
Оператор 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 используется для возврата значения временной переменной после выполнения условия.

Чтобы выявить разницу между print и 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'
9 голосов
/ 20 августа 2011

return означает, «вывести это значение из этой функции».

print означает, «отправить это значение (обычно) на стандартный вывод»

В Python REPL, aФункция возврата по умолчанию будет выводиться на экран (это не то же самое, что печать).

Это пример печати:

>>> 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
>>>
8 голосов
/ 06 августа 2013

Просто добавлю к отличному ответу @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.

.
4 голосов
/ 11 мая 2014

Разницу между «return» и «print» можно также найти в следующем примере:

RETURN:

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

Приведенный выше код даст правильные результаты для всех входных данных.

PRINT:

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

3 голосов
/ 19 сентября 2016

return является частью определения функции, в то время как print выводит текст на стандартный вывод (обычно консоль).

Функция - это процедура, принимающая параметры и возвращающая значение.return для последнего, в то время как первый делается с def.

Пример:

def timestwo(x):
    return x*2
3 голосов
/ 18 ноября 2013

Вот мое понимание.(надеюсь, это кому-нибудь поможет и это правильно).

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потому что мы никогда не скажем, чтобы начальный счет изменился.Надеюсь, я понял это правильно.Да, и возвращение всегда внутри функции.

...