안녕하세요!
이번 글에서는 파이썬이 함수를 바인딩하는 방식에 대해서 알아보려고 합니다.
그전에 변수를 바인딩하는 방식을 모르신다면 이 글을 참고해 주세요
[python] 파이썬이 변수를 할당하는 방식
안녕하세요! 이번 글에서는 파이썬이 함수 내에서 변수를 할당하는 방식에 대해서 알아보려고 합니다. 1) 변수를 할당하는 방식 2) 메모리 주소와 타입을 알아내는 방법 순으로 알아보겠습니다.
newbienew.tistory.com
1) 함수를 바인딩 하는 방식
2) 예제를 활용한 설명
순으로 알아보겠습니다.
1) 함수를 바인딩 하는 방식
object는
<function_name, function type, memory address, garbage collection,
reference_counter, method, symbol table >
등 여러정보들을 담은 object를 function_name과 매핑합니다.
사용할 때는 function_name으로 식별해서 사용합니다.
변수를 바인딩하는 방식에 함수 내부적으로 사용하는 변수에 대한 정보를 제공하는
symbol table이 추가된 것입니다.
def myadd(a,b): # 함수 정의
""" 더하기 하는 함수"""
print(locals())
return a+b
print(myadd(100,200)) # 함수 호출
print(id(myadd)) # memory 주소 확인
print(type(myadd)) # type 확인
print(globals()) # global한 namespace 확인
# {'a': 100, 'b': 200}
# 300
# 1871900509824
# <class 'function'>
# <..., ..., 'myadd': <function myadd at 0x000001B3D5F7ng.0680>}
함수를 정의하면 함수 이름을 object와 바인딩을 합니다.
인터프리터는 함수 이름이 가르키는 object를 함수로 인식하는데 이게 무슨말이냐면
함수 이름이 object를 가르키고 있기만 하다는 말입니다.
call by reference라고 하는데 이것은 다른 이름으로 동일한 동작을 하는 함수를 매핑시켜 줄 수 있습니다.
def mymul(a,b):
return a * b
mul = mymul # 함수 바인딩
print(mul(10,30)) # 그대로 사용 가능
print(globals())
# 300
# {..., ..., 'mymul': <function mymul at 0x0000027B9DC50680>, 'mul': <function mymul at
# 0x0000027B9DC50680>}
보시면 마지막 줄에 mymul function으로부터 파생된 mul이 있죠 따지고 보면
같은 메모리 주소를 가리키고 있습니다.
이름은 다르지만 같은 메모리 주소의 동작을 가져와서 사용하는 느낌이라고 생각해 주시면 되겠습니다.
정리)
사실 변수를 할당하는 방식과 크게 다를 건 없습니다.
함수 객체에 symbol table mapping 하는 것을 추가하는 것이니까요
파이썬 레퍼런스 원문을 그대로 읽고 제 방식 대로 다시 해석하는데 시간도 꽤 오래 걸리고
제가 똑바로 이해한 것이 맞는지도 사실 잘 모르겠습니다.
아닌 부분은 지적해 주시면 감사하겠습니다.
마치면서)
파이썬 공식 문서에서 파이썬 Defining Functions로 예제를 찾아보시면 더욱 자세한 정보를 얻을 수 있습니다.
다음 글에서도 유용한 파이썬 팁과 기능을 소개하도록 하겠습니다
감사합니다.
'파이썬 > 사용법' 카테고리의 다른 글
[python] 파이썬 함수 파라미터 전달 방식 정리 (0) | 2023.07.30 |
---|---|
[python] 파이썬이 변수를 할당하는 방식 (0) | 2023.07.29 |
[python] 파이썬이 함수내에서 변수를 찾는 방식 (0) | 2023.07.28 |
[python] 파이썬 에러 커스텀하기 (0) | 2023.07.27 |
[python] 파이썬 에러(Error)와 예외(Exception) 정리 (0) | 2023.07.26 |