HOWTO · Python

Python에서 함수 이름 가져오기

Python에서 함수 이름을 출력하는 방법을 보여줍니다.

이 페이지의 내용

함수 이름을 얻으려면 함수를 호출하지 않고 __name__ 속성을 읽으면 됩니다. function.__name__은 문자열을 반환합니다. 어휘적 범위가 중요하면 __qualname__을 사용하고, 현재 실행 중인 함수의 정보가 필요할 때만 프레임을 살펴보세요.

__name__으로 함수 이름 가져오기

함수 객체의 짧은 이름은 __name__ 속성으로 확인할 수 있습니다. 이 예제는 두 함수를 정의하고 이름을 출력하며, 어느 함수도 호출하지 않습니다.

def greet():
    return "Hello"


def farewell():
    return "Goodbye"


print(greet.__name__)
print(farewell.__name__)
greet
farewell

이 속성은 내장 함수와 가져온 함수에서도 사용할 수 있습니다. 예를 들어 print.__name__은 print이고 os.system.__name__은 system입니다:

import os

print(print.__name__)
print(os.system.__name__)
print
system

이 식들은 함수 객체를 살펴볼 뿐, 어느 함수도 호출하지 않습니다. 프로그램의 다른 부분에 함수를 전달하거나 함수의 이름을 표시할 때 유용한 구분입니다.

__qualname__으로 한정된 이름 가져오기

__qualname__에는 함수가 속한 범위 안에서의 어휘적 경로가 포함됩니다. 따라서 짧은 __name__이 같은 메서드나 중첩 함수를 구분할 수 있습니다.

class Report:
    def render(self):
        return "ready"


print(Report.render.__name__)
print(Report.render.__qualname__)
render
Report.render

이 메서드의 짧은 이름은 render이고 한정된 이름은 Report.render입니다. 두 속성 모두 고유 식별자는 아닙니다. 서로 다른 모듈의 함수가 같은 한정된 이름을 가질 수 있으며, 함수를 다른 변수에 할당해도 선언된 이름은 바뀌지 않습니다.

함수의 선언된 이름을 간결하게 표시하거나 이를 기준으로 조회하려면 __name__을 사용하세요. 어떤 함수를 가리키는지 설명하는 데 포함 클래스나 중첩 범위가 도움이 된다면 __qualname__을 사용하세요. 둘 다 함수 객체의 속성이므로 함수 이름 뒤에 괄호를 붙이지 않고 참조합니다.

현재 호출 프레임 살펴보기

현재 실행 중인 함수의 이름이 꼭 필요한 경우, Python의 inspect 모듈을 사용해 현재 프레임과 코드 객체의 co_name을 확인할 수 있습니다. 이는 디버깅이나 관련 도구를 위한 인트로스펙션 기법이며, 함수 객체의 이름을 얻는 일반적인 방법은 아닙니다.

import inspect


def current_function_name():
    frame = inspect.currentframe()
    if frame is None:
        return None
    return frame.f_code.co_name


print(current_function_name())
current_function_name

프레임 조회를 지원하지 않는 구현에서는 inspect.currentframe()이 None을 반환할 수 있습니다. 프레임 객체는 지역 변수에 대한 참조도 유지할 수 있으므로, 짧은 검사 후에도 프레임 참조를 보관한다면 이를 해제하세요. 사용 가능한 환경에서는 sys._getframe(0).f_code.co_name을 더 낮은 수준의 대안으로 쓸 수 있습니다. 이름이 밑줄로 시작하므로 이 인터페이스는 이식 가능한 이름 조회 API가 아니라 구현별 인터페이스로 취급해야 합니다.

상황에 맞는 방법 선택하기

  • 알고 있는 함수 객체의 짧은 이름을 얻으려면 function.__name__을 사용하세요.
  • 중첩 범위나 클래스 문맥을 표시되는 이름에 포함해야 한다면 function.__qualname__을 사용하세요.
  • 디버깅처럼 현재 실행 중인 프레임의 세부 정보가 필요할 때만 inspect.currentframe() 또는 sys._getframe()을 사용하세요.

일반적으로 함수 이름을 표시하려면 __name__을 사용하는 것이 가장 직접적인 방법입니다. 위 예제들은 성공적으로 실행되었으며, 출력에는 각 식이 반환한 이름이 표시됩니다.