[Python] return

jake·2022년 9월 20일
0

python

목록 보기
12/20

return None

python에서는 함수가 return으로 종료하지 않더라도
자동으로 return none을 해준다.

def check(n):
    if n==1:
        print("yes")
        
print(check(1)) # yes, None 출력

위 코드의 경우 실행하면
yes
None
이런 식으로 차례대로 출력되는데 yes는 print("yes")에서
None은 생략된 return none에서 출력된 것이다.



return, print

def check(n):
    if n==1:
        print("프린트 yes")
        return("리턴 yes")
check(1) # 리턴 yes 출력
print(check(1)) # 프린트 yes,리턴 yes 출력

check(1)은 말그대로 함수자체에 들어있는 print문만 출력한다.
왜냐하면 반환값을 출력하라는 말이 없기 때문이다.

print(check(1))은 함수의 반환값을 출력하라는 의미이다.
프린트 yes는 check(1) 함수 자체에서의 print문에서 나온 것이고
리턴 yes는 함수의 반환값을 print 하라는 명령에서 나온 출력이다.

 


재귀에서의 return

def binary(array,target,start,end):

    if start>end:
        print("타겟 없음”)
        return

    mid=(start+end)//2

    if target==array[mid]:
        print("타겟 발견")
        return

    elif target>array[mid]:
        binary(array,target,mid+1,end)

    else:
        binary(array,target,start,mid-1)
        
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

def binary(array,target,start,end):

    if start>end:
        print("타겟 없음”)
        return

    mid=(start+end)//2

    if target==array[mid]:
        print("타겟 발견")
        return

    elif target>array[mid]:
        return binary(array,target,mid+1,end)

    else:
        return binary(array,target,start,mid-1)

두 코드의 차이점은 재귀로 넘길 때, return으로 넘기냐 안넘기냐의 차이다.

위의 코드는 binary(array,target,mid+1,end)이고
아래의 코드는 return binary(array,target,mid+1,end)이다.

이때 return으로 넘겨주냐 아니냐의 차이가 정말 큰데, return으로 넘겨야
온전히 재귀가 된다.

만약 위의 코드처럼 return으로 넘겨주지 않는다면 return None에서 말한 것처럼 return문이 없기 때문에 자동으로 return None이 되고, 재귀로 넘어간 함수가 어떻게 됐든 영향을 받지 않는다.

 


return X

a(return None) -> b -> c -> d -> ...
함수 a는 이미 return None으로 함수가 종료되었으므로 재귀로 들어간 함수 b, c, d가 뭘 하든 영향을 받지 않는다.
이는 재귀함수라 볼 수 없다.



return O

따라서 올바른 재귀함수를 사용하려면 return문으로 넘겨줘야 한다.
a(return b) -> b(return c) -> c(return d) -> d(return e) -> ...
이렇게 return으로 다음 재귀함수를 지정해야 함수가 종료 되지 않고 재귀로 들어간 함수의 값에 영향을 받게 된다.

 


return은 순서에 영향을 받는다

def f(n):
    if n>4:
        for i in range(4,0,-1):
            return f(i)

    elif n==1:
        return 1
    
    elif n==2:
        return 2
    
    elif n==3:
        return 3
    
    elif n==4:
        return 4

print(f(10))

for문에서 네 번의 return 재귀문을 실행하는데 먼저 실행한 return문만 결과로 출력된다.

0개의 댓글