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__을 사용하는 것이 가장 직접적인 방법입니다. 위 예제들은 성공적으로 실행되었으며, 출력에는 각 식이 반환한 이름이 표시됩니다.