1. 사용자 정의 함수
사용자 정의 함수란 사용자가 특정 작업을 수행하기 위해 직접 작성한 함수를 의미합니다. 파이썬에는 많은 내장 함수들이 있지만, 때로는 우리의 요구사항에 맞게 동작하는 함수를 직접 만들어야 할 때가 있습니다. 이때 사용자 정의 함수를 작성하게 됩니다. 기본적인 구조는 아래와 같습니다.
def 함수명(매개변수1, 매개변수2, ...):
# 함수 내용
return 결과값
2. 매개변수와 반환 값이 없는 함수
3. 매개변수가 있고 반환 값이 없는 함수
4. 반환 값이 있는 함수
※ None의 특징
None은 파이썬에서 특별한 값으로, 아무런 값이 없음을 표현하는 데 사용됩니다. 다른 언어에서의 null 또는 nil과 유사한 개념입니다.
None은 파이썬의 내장 상수이며, 그 자체로 데이터 타입이 NoneType입니다. 모든 None은 동일하므로, 두 개의 None 값을 비교할 때 항상 True를 반환합니다.
1. 기본 초기값 설정: 변수를 초기화할 때 아무런 값이 할당되지 않았음을 나타내기 위해 None을 사용할 수 있습니다.
variable = None
2. 함수의 반환 값으로 사용: 함수에서 특정 조건에서 아무런 값도 반환하지 않아야 할 때 None을 사용합니다. 사실, 함수에서 return 문이 생략되거나 없으면 기본적으로 None을 반환합니다.
def my_function(x):
if x > 10:
return x
# x가 10 이하일 때는 아무런 값도 반환하지 않습니다. 실제로는 None이 반환됩니다.
3. 선택적 매개변수의 기본값: 함수의 매개변수에 기본값으로 None을 할당하여 선택적으로 인자를 전달받을 수 있게 만들 수 있습니다.
def hello(message=None):
if message is None:
print("Hello!")
else:
print(message)
4. 값의 존재 여부 확인: None을 사용하여 값의 존재 여부를 확인할 수 있습니다.
# 값의 존재 여부 확인
def get_data_from_database():
pass
data = get_data_from_database()
print(data)
if data is None:
print('데이터를 수신하지 못함!')
else:
print('데이터를 수신받음!')
None을 검사할 때는 == 대신 is 연산자를 사용하는 것이 좋습니다. is는 객체의 동일성을 검사하는 반면, ==는 객체의 동등성을 검사하기 때문입니다.
x = None
# 이렇게 검사하는 것이 좋습니다.
if x is None:
pass
# 이렇게 검사하는 것은 권장되지 않습니다.
if x == None:
pass
li1 = [1, 2, 3, 4, 5]
li2 = [1, 2, 3, 4, 5]
# 객체 비교
result1 = li1 is li2
# 값 비교
result2 = li1 == li2
print(result1)
print(result2)
5. 기본값이 설정된 매개변수
6. 가변 매개변수
함수를 호출할 때 *를 사용하면 시퀀스(리스트, 튜플 등)의 요소를 개별적인 위치 인자로 풀어서 전달할 수 있습니다.
7. 키워드 매개변수
8. 여러개의 반환 값
※ 파이썬 함수와 메모리
1. 메모리 로드
함수 정의: 파이썬에서 함수는 객체로 취급됩니다. 따라서 함수를 정의하면 해당 함수는 메모리 상에 적재되며, 함수 이름은 이 함수 객체를 참조하게 됩니다.
변수 할당: 함수를 다른 변수에 할당하면 그 변수는 원래의 함수 객체를 참조합니다. 이는 파이썬의 함수가 일급 객체(first-class object)로 취급되기 때문에 가능합니다.
def my_function():
print("Hello, World!")
func_var = my_function
func_var() # 이렇게 호출해도 "Hello, World!" 가 출력됩니다.
2. 메모리 제거
참조 카운트: 파이썬의 메모리 관리는 주로 참조 카운팅(reference counting)에 기반합니다. 객체를 참조하는 변수나 요소의 수를 세어서 이 카운트가 0이 되면 해당 객체는 메모리에서 제거될 수 있게 됩니다.
Garbage Collection: 참조 카운트가 0인 객체들은 바로 메모리에서 제거되지 않습니다. 대신, 파이썬의 가비지 컬렉터(garbage collector)가 이런 객체들을 주기적으로 찾아서 메모리에서 제거합니다.
함수의 경우: 함수도 파이썬 객체이므로 참조 카운팅과 가비지 컬렉션의 원칙에 따라 동작합니다. 함수를 참조하는 변수나 요소가 없게 되면 해당 함수는 가비지 컬렉터에 의해 메모리에서 제거될 수 있습니다.
명시적 제거: del 명령어를 사용하여 함수에 대한 참조를 명시적으로 제거할 수 있습니다. 하지만 이것이 함수가 즉시 메모리에서 제거된다는 것을 보장하지는 않습니다.
종료 시: 파이썬 프로그램이 종료될 때, 모든 메모리는 OS에 반환됩니다. 따라서 프로그램이 종료되면 함수와 관련된 모든 메모리도 함께 반환됩니다.
def my_function():
print("Hello, World!")
del my_function
# 이후 my_function()을 호출하려고 하면 오류가 발생합니다.
'Python > 개념' 카테고리의 다른 글
2024-03-18 콜백함수와 람다함수 (0) | 2024.03.18 |
---|---|
2024-03-18 변수의 범위 (0) | 2024.03.18 |
2024-03-15 컬렉션과 반복문 (0) | 2024.03.15 |
2024-03-14 제어문 - 반복문 (0) | 2024.03.14 |
2024-03-14 제어문 - 조건문 (0) | 2024.03.14 |