Python/개념

2024-03-15 사용자 정의 함수

nomad06 2024. 3. 15. 12:42

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