[python] 파이썬 함수의 인수 개수를 어떻게 찾을 수 있습니까?

파이썬 함수의 인수 개수를 어떻게 찾을 수 있습니까? 나는 얼마나 많은 일반 인수가 있고 얼마나 많은 명명 된 인수가 있는지 알아야합니다.

예:

def someMethod(self, arg1, kwarg1=None):
    pass

이 메소드에는 2 개의 인수와 1 개의 명명 된 인수가 있습니다.



답변

이전에 허용 대답이되어 사용되지 않는 현재의 Python 3.0. 사용하는 대신 inspect.getargspec이제 Signature이를 대체 한 클래스를 선택해야 합니다.

함수를 통해 쉽게 서명을 작성할 수 signature있습니다 .

from inspect import signature

def someMethod(self, arg1, kwarg1=None):
    pass

sig = signature(someMethod)

이제 매개 변수를 사용하여 해당 매개 변수를 빠르게 볼 수 있습니다 str.

str(sig)  # returns: '(self, arg1, kwarg1=None)'

또는을 통해 속성 이름을 매개 변수 객체에 매핑 할 수도 있습니다 sig.parameters.

params = sig.parameters 
print(params['kwarg1']) # prints: kwarg1=20

또한 호출 할 수 있습니다 lensig.parameters이 기능이 필요 인수의 수를 볼 수 :

print(len(params))  # 3

params매핑의 각 항목 은 실제로 인생을 편하게 해주는 추가 속성을 가진 Parameter객체 입니다. 예를 들어, 매개 변수를 잡고 기본값을 보는 것은 이제 다음을 통해 쉽게 수행 할 수 있습니다.

kwarg1 = params['kwarg1']
kwarg1.default # returns: None

에 포함 된 나머지 개체에 대해서도 유사합니다 parameters.


Python 2.x사용자의 경우 더 이상 사용되지 inspect.getargspec 않지만 언어는 곧 :-)입니다. Signature클래스는 사용할 수 없습니다 2.x시리즈되지 않습니다. 따라서 여전히 작업해야합니다 inspect.getargspec.

당신이 코드가있는 경우 파이썬 2와 3 사이의 전환에 관해서는,의 인터페이스에 의존하는 getargspec파이썬 2와 전환 signature에하는 것은 3너무 어렵습니다, 당신은 가치있는 옵션이 있습니까 사용을 inspect.getfullargspec. getargspec함수의 인수를 가져 와서 다음과 같은 일부 추가 사례를 처리하기 위해 (호출 가능한 단일 인수) 와 유사한 인터페이스를 제공합니다 getargspec.

from inspect import getfullargspec

def someMethod(self, arg1, kwarg1=None):
    pass

args = getfullargspec(someMethod)

와 마찬가지로 getargspec, getfullargspec반환 NamedTuple인수를 포함하는.

print(args)
FullArgSpec(args=['self', 'arg1', 'kwarg1'], varargs=None, varkw=None, defaults=(None,), kwonlyargs=[], kwonlydefaults=None, annotations={})


답변

import inspect
inspect.getargspec(someMethod)

검사 모듈 참조


답변

someMethod.func_code.co_argcount

또는 현재 기능 이름이 결정되지 않은 경우 :

import sys

sys._getframe().func_code.co_argcount


답변

inspect.getargspec ()

함수 인수의 이름과 기본값을 가져옵니다. 네 가지의 튜플이 반환됩니다 : (args, varargs, varkw, defaults). args는 인수 이름의 목록입니다 (중첩 목록을 포함 할 수 있음). varargs 및 varkw는 * 및 ** 인수의 이름이거나 None입니다. 기본값은 기본 인수 값의 튜플이거나 기본 인수가 없으면 None입니다. 이 튜플에 n 개의 요소가 있으면 args에 나열된 마지막 n 개의 요소에 해당합니다.

버전 2.6으로 변경 : 명명 된 튜플 ArgSpec (args, varargs, 키워드, 기본값)을 반환합니다.

참조 캔 – 당신 – 목록 – 더 – 키워드 인수-A-파이썬 기능은-받습니다 .


답변

위의 내용에 덧붙여 대부분의 경우 help () 함수가 실제로 도움이된다는 것을 알았습니다.

예를 들어, 인수에 대한 모든 세부 사항을 제공합니다.

help(<method>)

아래에 제공

method(self, **kwargs) method of apiclient.discovery.Resource instance
Retrieves a report which is a collection of properties / statistics for a specific customer.

Args:
  date: string, Represents the date in yyyy-mm-dd format for which the data is to be fetched. (required)
  pageToken: string, Token to specify next page.
  parameters: string, Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1, app_name2:param_name2.

Returns:
  An object of the form:

    { # JSON template for a collection of usage reports.
    "nextPageToken": "A String", # Token for retrieving the next page
    "kind": "admin#reports#usageReports", # Th


답변

Python 2와 Python 3.6 이상에서 이식 가능한 방식 으로이 작업을 수행하려는 사람들에게 희소식 : 사용 inspect.getfullargspec()방법. Python 2.x 및 3.6 이상에서 작동합니다.

Jim Fasarakis Hilliard와 다른 사람들이 지적했듯이 다음과 같이 사용되었습니다.
1. Python 2.x : use inspect.getargspec()
2. Python 3.x : 서명을 사용 getargspec()하고 getfullargspec()사용되지 않습니다.

그러나 파이썬 3.6 (일반적인 수요에 따라)을 시작하면 상황이 더 좋아졌습니다.

Python 3 문서 페이지에서 :

inspect.getfullargspec (func)

버전 3.6으로 변경 :이 메소드는 이전 signature()에 Python 3.5 에서 선호되지 않는 것으로 문서화 되었지만 레거시 getargspec()API 에서 마이그레이션하는 단일 소스 Python 2/3 코드에 대해 명확하게 지원되는 표준 인터페이스를 복원하기 위해이 결정이 취소되었습니다 .


답변

inspect.getargspec ()은 필요에 맞게

from inspect import getargspec

def func(a, b):
    pass
print len(getargspec(func).args)