
1. return 사용하기: function call 은 expression이므로 하나의 값으로 evaluate됨.
def 함수이름(매개변수):
실행할 코드
return 반환값
return은 다음 두 가지 일을 수행:
- 함수 실행을 즉시 종료
- 호출한 곳으로 결과를 전달: 해당 function call을 해당 결과로 reduction.
예제:
def add(a, b):
return a + b
result = add(3, 4)
print(result) # 7
위의 동작은 흔히 다음과 같이 언급됨:
“함수는 값을 return 한다”
하지만 엄밀히 애기하면 값에 해당하는 객체를 참조하고 있는 reference가 반환되는 것임
2. return이 생략된 경우
다음 코드를 보자.
def f():
x = 10
result = f()
print(result)
출력은 다음과 같다.
None
Python에서는 return 문이 없으면 자동으로 None을 반환.
즉, 아래 두 함수는 동등함:
def f1():
x = 10
def f2():
x = 10
return None
None은 하나의 객체result는None객체를 참조
3. return은 값을 복사하지 않음
정확히 애기하면
Python에서 return은 객체(object)에 대한 참조(reference)를 반환.
3-1. return의 실제 동작: 객체 참조 모델
다음 예제를 보자.
def f():
x = [1, 2, 3]
return x
y = f()
이때 일어나는 일은 다음과 같다.
[1, 2, 3]이라는 리스트 객체가 생성됨- 함수 내부 이름
x가 해당 객체를 참조 return x실행- 함수 밖 변수
y가 같은 객체를 참조
x => [1, 2, 3]
y => [1, 2, 3]
- 객체는 복사되지 않음.
- return은 당 객체의 참조만 전달.
3-2. return 후 함수 내부 변수(function stack frame에 저장된)는 제거됨:
return이 실행되면 함수는 종료되고,
- 함수의 stack frame 제거
- 함수 내부 지역 변수 소멸
앞서의 예에서의 x라는 이름은 제거됨.
하지만 x가 가리키던 객체(앞서 예에선 list객체)는 남아 있음.
그 이유는 반환 이후 y가 이를 참고하고 있기 때문임.
객체의 생존 여부는
scope가 아니라 reference 여부로 결정됨.
4. mutable 객체를 return 하는 경우
mutable 객체(list, dict 등)를 반환하는 경우
def make_list():
return []
lst = make_list()
lst.append(1)
함수 밖에서 반환된 리스트 객체를 수정할 수 있음
- 위의 예에서 보이듯이
return이 리스트 객체의 참조를 넘겼고lst가 그 객체를 그대로 사용하고 있기 때문임
5. immutable 객체를 return 하는 경우
def f():
x = 10
return x
y = f()
이 경우에도,
x와y는 같은 int 객체를 참조함
그런데 다음 코드를 실행하면?
y = y + 5
앞서의 경우 참조된 mutable 리스트의 값이 바뀌는 것과 달리,
이 경우엔 y에 새로운 객체가 할당됨: 새로운 객체는 연산의 결과 값을 가짐.
이는 다음으로 이해할 수 있음:
y + 5: 새로운 int 객체 생성y가 새 객체를 가리키게 변경됨.
주의할 점은
- 기존
10객체는 변경되지 않음 - 이름만
y로 같을 뿐 새 객체를 참조하게 됨.
요약
return은 언제나 객체 참조를 반환- mutable 객체 : 내부 변경 가능
- immutable 객체 : 변경 불가, 이후 변경되는 연산시 새로운 객체 생성되고 해당 객체를 참조하게 됨
같이보면 좋은 자료들
https://dsaint31.tistory.com/506
[Python] Function Definition, Call and Arguments
이 문서는 function에 대한 간단한 소개를 하고 있다.일부 자세한 내용들은 관련 URL을 추가하는 형태로 확장될 수 있음.Function이란?재사용성 과 가독성 을 위해 논리적으로 코드를 나누는(or 그룹화
dsaint31.tistory.com
[Python] function 과 Scope, Name Space 정리 - Summary
Function이란?https://dsaint31.me/mkdocs_site/CE/ch05/ch05_02_01_function/ BME228Function in the Programming Mathematics에서의 function과 약간의 차이점이 있으나 프로그래밍에서의 function은 많은 부분에서 Mathematics에서의 fu
ds31x.tistory.com
'Python' 카테고리의 다른 글
| Typing: dynamic vs. static and strong vs. weak (0) | 2025.12.09 |
|---|---|
| Recursive Function and Recurrence Relation (1) | 2025.12.05 |
| scikit-image: Low Pass Filter (0) | 2025.10.21 |
| scikit-image: High Pass Filter (0) | 2025.10.21 |
| scikit-image: Image Load, Save, Display (0) | 2025.10.20 |