파이썬 함수의 인수 개수를 어떻게 찾을 수 있습니까? 나는 얼마나 많은 일반 인수가 있고 얼마나 많은 명명 된 인수가 있는지 알아야합니다.
예:
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
또한 호출 할 수 있습니다 len
에 sig.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={})
답변
답변
someMethod.func_code.co_argcount
또는 현재 기능 이름이 결정되지 않은 경우 :
import sys
sys._getframe().func_code.co_argcount
답변
함수 인수의 이름과 기본값을 가져옵니다. 네 가지의 튜플이 반환됩니다 : (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)