반응형
파이썬의 다른 함수 안에서 호출자 함수 이름을 가져오는 중?
다음과 같은 두 가지 기능이 있는 경우:
def A
def B
그리고 A가 B에게 전화를 걸면, B 안에서 누가 B에게 전화를 걸었는지 알 수 있습니까?
def A () :
B ()
def B () :
this.caller.name
검사 모듈을 사용하여 원하는 정보를 얻을 수 있습니다.스택 메서드는 프레임 레코드 목록을 반환합니다.
Python 2의 경우 각 프레임 레코드는 목록입니다.각 레코드의 세 번째 요소는 발신자 이름입니다.원하는 것은 다음과 같습니다.
>>> import inspect >>> def f(): ... print inspect.stack()[1][3] ... >>> def g(): ... f() ... >>> g() g
Python 3.5+의 경우 각 프레임 레코드는 이름이 지정된 튜플이므로 교체해야 합니다.
print inspect.stack()[1][3]
와 함께
print(inspect.stack()[1].function)
상술한 규정에 의하여
다음과 같은 두 가지 방법이 있습니다.sys
그리고.inspect
모듈:
sys._getframe(1).f_code.co_name
inspect.stack()[1][3]
그stack()
폼의 판독성이 떨어지며 호출하기 때문에 구현에 종속됩니다.sys._getframe()
에서 발췌를 보다.inspect.py
:
def stack(context=1):
"""Return a list of records for the stack above the caller's frame."""
return getouterframes(sys._getframe(1), context)
참고(2018년 6월): 오늘은 아마도inspect
모듈, 다른 답변 참조
sys._getframe(1).f_code.co_name
아래의 예와 같이:
>>> def foo():
... global x
... x = sys._getframe(1)
...
>>> def y(): foo()
...
>>> y()
>>> x.f_code.co_name
'y'
>>>
중요한 참고: 그것은 명백하기 때문입니다._getframe
메서드 이름(하이, 밑줄로 시작함), 아무 생각 없이 의존해야 하는 API 메서드가 아닙니다.
이것은 나에게 효과가 있습니다! :d
>>> def a():
... import sys
... print sys._getframe(1).f_code.co_name
...
>>> def b():
... a()
...
...
>>> b()
b
>>>
로깅 모듈을 사용하고 BaseConfig()에서 %(funcName)s 옵션을 지정할 수 있습니다.
import logging
logging.basicConfig(
filename='/tmp/test.log',
level=logging.DEBUG,
format='%(asctime)s | %(levelname)s | %(funcName)s |%(message)s',
)
def A():
logging.info('info')
언급URL : https://stackoverflow.com/questions/900392/getting-the-caller-function-name-inside-another-function-in-python
반응형
'programing' 카테고리의 다른 글
Python 생성기 패턴에 해당하는 C++ (0) | 2023.07.19 |
---|---|
그리드 보기 정렬:방향 정렬 항상 오름차순 (0) | 2023.07.19 |
산점도 점을 선으로 연결 - Python (0) | 2023.07.19 |
numpy 값이 참인 인덱스 가져오기 (0) | 2023.07.19 |
복제 시 Git 하위 모듈 폴더 비우기 (0) | 2023.07.19 |