함수 속성 탐구
Python 에서 함수는 일급 객체로 간주됩니다. 이것이 의미하는 바는 무엇일까요? 실제 세계에서 책이나 펜과 같은 다양한 유형의 객체를 가지고 있는 것과 유사합니다. Python 에서 함수도 객체이며, 다른 객체와 마찬가지로 자체 속성 집합을 가지고 있습니다. 이러한 속성은 함수 이름, 정의된 위치, 구현 방식 등 함수에 대한 많은 유용한 정보를 제공할 수 있습니다.
Python 대화형 셸을 열어 탐구를 시작해 보겠습니다. 이 셸은 Python 코드를 즉시 작성하고 실행할 수 있는 놀이터와 같습니다. 이렇게 하려면 먼저 프로젝트 디렉토리로 이동한 다음 Python 인터프리터를 시작합니다. 터미널에서 실행할 명령어는 다음과 같습니다.
cd ~/project
python3
이제 Python 대화형 셸에 들어왔으니 간단한 함수를 정의해 보겠습니다. 이 함수는 두 개의 숫자를 받아 더합니다. 다음과 같이 정의할 수 있습니다.
def add(x, y):
'Adds two things'
return x + y
이 코드에서 add라는 함수를 만들었습니다. 두 개의 매개변수 x와 y를 받아 합계를 반환합니다. 문자열 'Adds two things'는 함수가 수행하는 작업을 문서화하는 데 사용되는 docstring 이라고 합니다.
dir() 을 사용하여 함수 속성 검사
Python 에서 dir() 함수는 유용한 도구입니다. 객체가 가진 모든 속성과 메서드의 목록을 가져오는 데 사용할 수 있습니다. add 함수가 어떤 속성을 가지고 있는지 확인하기 위해 사용해 보겠습니다. Python 대화형 셸에서 다음 코드를 실행합니다.
dir(add)
이 코드를 실행하면 긴 속성 목록이 표시됩니다. 다음은 출력의 예입니다.
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
이 목록은 add 함수와 관련된 모든 속성과 메서드를 보여줍니다.
기본 함수 정보에 접근
이제 몇 가지 기본 함수 속성을 자세히 살펴보겠습니다. 이러한 속성은 함수에 대한 중요한 정보를 알려줄 수 있습니다. Python 대화형 셸에서 다음 코드를 실행합니다.
print(add.__name__)
print(add.__module__)
print(add.__doc__)
이 코드를 실행하면 다음과 같은 출력이 표시됩니다.
add
__main__
Adds two things
각 속성이 무엇을 의미하는지 이해해 보겠습니다.
__name__: 이 속성은 함수의 이름을 제공합니다. 이 경우 함수 이름은 add입니다.
__module__: 함수가 정의된 모듈을 알려줍니다. 대화형 셸에서 코드를 실행할 때 모듈은 일반적으로 __main__입니다.
__doc__: 이것은 함수의 문서 문자열 또는 docstring 입니다. 함수가 수행하는 작업에 대한 간략한 설명을 제공합니다.
함수 코드 검사
함수의 __code__ 속성은 매우 흥미롭습니다. 바이트코드 및 기타 세부 정보를 포함하여 함수가 어떻게 구현되었는지에 대한 정보를 담고 있습니다. 여기서 무엇을 배울 수 있는지 살펴보겠습니다. Python 대화형 셸에서 다음 코드를 실행합니다.
print(add.__code__.co_varnames)
print(add.__code__.co_argcount)
출력은 다음과 같습니다.
('x', 'y')
2
다음은 이러한 속성이 알려주는 내용입니다.
co_varnames: 함수에서 사용되는 모든 지역 변수의 이름을 포함하는 튜플입니다. add 함수에서 지역 변수는 x와 y입니다.
co_argcount: 이 속성은 함수가 예상하는 인수의 수를 알려줍니다. add 함수는 두 개의 인수를 예상하므로 값은 2 입니다.
__code__ 객체의 더 많은 속성을 탐색하고 싶다면 dir() 함수를 다시 사용할 수 있습니다. 다음 코드를 실행합니다.
dir(add.__code__)
그러면 함수가 어떻게 구현되었는지에 대한 하위 수준 세부 정보를 포함하는 코드 객체의 모든 속성이 표시됩니다.