함수 서명 가져오기

Muhammad Husnain 2023년6월21일
  1. signature()를 사용하여 Python에서 함수 호출 세부 정보 가져오기
  2. 데코레이터를 사용하여 Python에서 함수 호출 세부 정보 얻기
함수 서명 가져오기

이 자습서에서는 Python을 사용하여 함수 호출 세부 정보를 빠르게 가져오는 몇 가지 방법에 대해 설명합니다. 이는 대규모 코드베이스를 분석할 때 특히 유용하며 한 눈에 함수가 수행하는 작업을 파악하기가 어려워집니다.

코드를 앞뒤로 이동하는 대신 signature() 함수와 데코레이터를 사용하여 이 정확한 문제에 대한 보다 스마트한 솔루션을 제공합니다.

signature()를 사용하여 Python에서 함수 호출 세부 정보 가져오기

이 정보를 얻는 가장 쉬운 방법은 inspect.signature() 기능을 사용하는 것입니다. Python 3.5+용 문서는 이 기능을 사용할 것을 권장합니다.

inspect.signature()는 다양한 콜러블을 허용합니다. 여기에는 함수, 클래스 및 functools.partial() 객체가 포함됩니다.

이 함수는 콜러블의 주석을 반환합니다. 서명을 제공할 수 없는 경우 함수는 ValueError를 발생시킵니다. 객체 유형이 지원되지 않으면 TypeError가 발생합니다.

예제 코드:

import inspect


def foo(x, y, a="anything"):
    pass


print(inspect.signature(foo))

터미널에 다음을 인쇄해야 합니다.

(x, y, a="anything")

데코레이터를 사용하여 Python에서 함수 호출 세부 정보 얻기

Python의 함수에는 사용할 수 있는 몇 가지 특성이 있습니다. 이러한 속성 중에는 __code__가 있습니다.

__code__ 속성에는 추가로 사용할 수 있는 속성이 있습니다. 아래에서 각각의 기능을 설명하는 목록을 찾을 수 있습니다.

그 아래에는 이 작업을 수행할 수 있는 함수를 작성하는 코드 스니펫이 포함됩니다. 함수 이름을 얻기 위해 __name__ 속성을 사용합니다.

  1. co_varnames는 함수에 전달된 인수 이름과 함수 내에서 사용된 지역 변수의 튜플을 반환합니다.

  2. co_argcount는 인수의 수를 반환합니다. 그러나 이 수에는 키워드 전용 인수(kwargs), *args**args가 제외됩니다.

    스니펫에 이러한 모든 인수를 인쇄하는 방법이 포함되어 있습니다.

def get_func_dets(func):
    # the point of using argcount is to ensure we only get
    argument_names = func.__code__.co_varnames[: func.__code__.co_argcount]
    func_name = func.__name__

    # getting variable length arguments and keyword arguments
    def inner_fun(*args, **kwargs):
        print(func_name, "(", end="")

        print(
            ", ".join(
                "%s = %r" % ent
                for ent in zip(argument_names, args[: len(argument_names)])
            ),
            end=", ",
        )

        print("args = ", list(args[len(argument_names) :]), end=",")
        print("kwargs =", kwargs, end="")
        print(")")

    return inner_func
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

관련 문장 - Python Function