return 문의 목적은 무엇입니까?


답변:


100

print()함수는 콘솔에 문자열을 기록합니다. 즉, "prints"입니다. 이 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파이썬 인터프리터와는 반대로 스크립트 (예 : 파일)로 실행 하면 다음과 같은 출력을 얻을 수 있습니다.

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.
icktoofay 2011-08-20

@NathanHughes 신중하게 만들어진 답변에 감사드립니다.
Andy K

23

여기서는 사전 이 가장 좋은 참고 자료 라고 생각합니다

반환인쇄

요컨대 :

return 은 무언가를 돌려 주거나 인쇄 하는 동안 함수 호출자에게 응답 합니다. 가 텍스트를 생성 합니다.


23

print 문을 부작용 을 일으키는 것으로 생각하면 함수가 사용자에게 텍스트를 작성하지만 다른 함수에서 사용할 수 없습니다 .

몇 가지 예와 Wikipedia의 몇 가지 정의를 통해이를 더 잘 설명하려고합니다.

다음은 Wikipedia의 함수 정의입니다.

수학에서 함수는 입력이라고도하는 함수의 인수 인 한 수량을 출력이라고도하는 함수의 값인 다른 수량과 연관시킵니다.

잠시 생각해보십시오. 함수에 값이 있다는 것은 무엇을 의미합니까?

의미하는 바는 실제로 함수의 값을 일반 값으로 대체 할 수 있다는 것입니다! (두 값이 동일한 유형의 값이라고 가정)

왜 물어보고 싶습니까?

무엇으로 값이 동일한 유형의 동의를 할 수있는 다른 기능에 대한 입력을 ?

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

출력을 생성하기 위해 입력에만 의존하는 함수에 대한 멋진 수학적 용어가 있습니다. 참조 투명성. 다시, Wikipedia의 정의.

참조 투명성과 참조 불투명도는 컴퓨터 프로그램의 일부 속성입니다. 프로그램의 동작을 변경하지 않고 값으로 바꿀 수있는 표현식은 참조 적으로 투명하다고합니다.

프로그래밍이 처음이라면 이것이 무엇을 의미하는지 이해하기가 조금 어려울 수 있지만 몇 가지 실험 후에 얻을 것이라고 생각합니다. 그러나 일반적으로 함수에서 인쇄와 같은 작업을 수행 할 수 있으며 끝에 return 문을 사용할 수도 있습니다.

return을 사용할 때 기본적으로 "이 함수에 대한 호출은 반환되는 값을 쓰는 것과 동일합니다."라는 것을 기억하십시오.

파이썬은 여러분이 직접 입력하는 것을 거부하면 실제로 반환 값을 삽입 할 것입니다. 이것은 "None"이라고 불리며 단순히 아무것도 의미하지 않거나 null을 의미하는 특별한 유형입니다.


12

파이썬에서는 "def"로 함수 정의를 시작하고 일반적으로 "return"으로 함수를 종료합니다.

변수 x의 함수는 f (x)로 표시됩니다. 이 기능은 무엇을합니까? 이 함수가 x에 2를 더한다고 가정합니다. 그래서 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"는 실제로 "A_function (x)"의 x가 아니라 (x + 2)를 의미합니다.

이 간단한 예를 통해 return 명령의 의미를 이해할 수있을 것 같습니다.


11

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
>>>

11

이 답변은 위에서 논의되지 않은 일부 경우에 대해 설명합니다. 반환 문을 사용하면 할 수 있습니다 종료 당신이 끝에 도달하기 전에 함수의 실행을. 이로 인해 실행 흐름이 즉시 호출자에게 반환됩니다.

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'

8

@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!

이러한 .NET 사용 방법에 대한 자세한 내용은 Python 가이드 의 코드 스타일 섹션 을 참조하세요 return.


4

"반품"과 "인쇄"의 차이점은 다음 예에서도 확인할 수 있습니다.

반환:

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


1
제공 한 테스트 케이스에 대한 인쇄 코드가 실패하지 않았습니다. 모두 맞았습니다!
codingbryan

4

여기에 정말 간단한 대답이 유용 할 것이라고 생각합니다.

return호출자가 값 (종종 변수)을 사용할 수 있도록합니다 (예 : 사용하는 함수가있는 함수에 의해 저장 됨 return). 이 없으면 return호출자가 저장 / 재사용 할 수 있도록 값이나 변수를 사용할 수 없습니다.

print 화면에 인쇄하지만 호출자가 사용할 수있는 값이나 변수를 만들지는 않습니다.

(더 철저한 답변이 더 정확하다는 것을 완전히 인정합니다.)


3

여기 내 이해가 있습니다. (누군가를 도울 것이며 정확하기를 바랍니다).

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을 대체하기를 원합니다. 리턴 명령을 더 들여 쓰기 할 때 코드의 논리를 따르려고하면 출력은 항상 1이됩니다. , 초기 개수를 변경하지 않을 것이기 때문입니다. 내가 옳았 으면 좋겠어. 아, 그리고 return은 항상 함수 안에 있습니다.


3

returnprint표준 출력 (일반적으로 콘솔)에 텍스트를 출력 하는 동안 함수 정의의 일부입니다 .

함수는 매개 변수를 받아들이고 값을 반환하는 프로 시저입니다. return후자를위한 것이고 전자는 def.

예:

def timestwo(x):
    return x*2

2

return함수 에 대한 가장 좋은 점은 함수에서 값을 반환 할 수 있지만 똑같이 할 수 있다는 것입니다 print. 차이점은 무엇입니까? 기본적으로 return약 단지 우리가 어떤 변수에 함수로부터의 반환 값을 절약 할 수 있지만, 우리가 할 수 있도록 객체 형태로 출력을 제공 반환하지 않는 print등의 동일하기 때문에 stdout/coutC 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있습니다. 주목해야 할 중요한 것은 return a + b(in add) 이라고 말하는 마지막 줄 입니다. 이것이하는 일은 다음과 같습니다.

  1. 우리의 기능은 두 개의 인수로 호출 : ab .
  2. 함수가 수행하는 작업을 인쇄합니다 (이 경우 "ADDING").
  3. 그런 다음 파이썬에게 일종의 거꾸로 작업하도록 지시 a + b합니다.. "나는 추가 a하고b 반환합니다." .
  4. 파이썬은 두 숫자를 더합니다. 그런 다음 함수가 종료되면 해당 함수를 실행하는 모든 줄에서이 a + b결과를 변수 에 할당 할 수 있습니다 .

1

return사용되어야한다 재귀 기능 / 방법 또는 당신은 당신의 알고리즘 나중에 응용 프로그램에 대한 반환 된 값을 사용하고 싶습니다.

print 사용자에게 의미 있고 원하는 출력을 표시하고 사용자가 관심이없는 중간 결과로 화면을 복잡하게 만들고 싶지 않을 때 사용해야하지만 코드 디버깅에는 유용합니다.

사용하는 방법 다음 코드 쇼 returnprint제대로 :

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

print(fact(5))

이 설명은 파이썬 뿐만 아니라 모든 프로그래밍 언어에 적용됩니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.