>  기사  >  백엔드 개발  >  Python의 함수 인수에서 원래 변수 이름을 추출할 수 있습니까?

Python의 함수 인수에서 원래 변수 이름을 추출할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 12:34:03395검색

Can You Extract Original Variable Names from Function Arguments in Python?

함수에 전달된 인수에서 원래 변수 이름을 추출하는 방법

다음 시나리오를 고려하십시오. 변수 이름을 인수로 요구하는 함수가 있습니다. 해당 이름을 기반으로 일부 작업을 수행합니다. 함수 내에서 원래 변수 이름을 얻을 수 있는 방법이 있습니까?

이 질문에 대답하려면 호출 컨텍스트를 검색하고 코드 컨텍스트에서 변수 이름을 추출할 수 있는 검사 모듈을 활용하는 방법을 살펴보겠습니다. .

<code class="python">import inspect

def foo(a, f, b):
    # Get the stack frame of the calling function
    frame = inspect.currentframe()
    
    # Move up one level to get the frame of the calling context
    frame = inspect.getouterframes(frame)[1]

    # Get the source code context of the calling context
    string = inspect.getframeinfo(frame[0]).code_context[0].strip()
    
    # Extract the argument names from the code context
    args = string[string.find('(') + 1:-1].split(',')
    
    names = []
    for i in args:
        if i.find('=') != -1:
            # Handle keyword arguments
            names.append(i.split('=')[1].strip())
        else:
            # Handle positional arguments
            names.append(i)
            
    print(names)

def main():
    e = 1
    c = 2
    foo(e, 1000, b = c)

main()</code>

설명:

  1. inspect.currentframe()은 현재 함수(이 경우 foo())의 스택 프레임을 가져옵니다.
  2. inspect.getouterframes()는 호출 함수 main()의 프레임을 가져오기 위해 호출 컨텍스트에서 한 수준 위로 탐색합니다.
  3. inspect.getframeinfo()는 호출 함수에 대한 코드 컨텍스트 정보를 검색합니다. 프레임을 획득했습니다.
  4. 코드 컨텍스트를 구문 분석하여 인수 목록을 분리한 다음 위치 인수와 키워드 인수를 모두 고려하여 인수 이름을 추출합니다.
  5. 마지막으로 원래 변수 목록 이름이 인쇄됩니다.

출력 예:

['e', '1000', 'c']

참고: 이 접근 방식에는 호출 스택을 검사하고 취약하고 오류가 발생하기 쉬운 소스 코드 컨텍스트입니다. 실용적인 사용을 권장하지 않으며 학문적, 오락적 목적으로만 고려하시기 바랍니다.

위 내용은 Python의 함수 인수에서 원래 변수 이름을 추출할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.