Dùng inspect.getfullargspec() (Python 3) hoặc inspect.signature() (khuyên dùng).
inspect.getfullargspec()
import inspect
def aMethod(arg1, arg2):
pass
def foo(a, b, c=4, *arglist, **keywords):
pass
print(inspect.getfullargspec(aMethod))
# FullArgSpec(args=['arg1', 'arg2'], varargs=None, varkw=None, defaults=None, ...)
print(inspect.getfullargspec(foo))
# FullArgSpec(args=['a', 'b', 'c'], varargs='arglist', varkw='keywords', defaults=(4,), ...)
inspect.signature() (Modern, Python 3.3+)
sig = inspect.signature(foo)
print(list(sig.parameters.keys())) # ['a', 'b', 'c', 'arglist', 'keywords']
for name, param in sig.parameters.items():
print(f"{name}: kind={param.kind}, default={param.default}, annotation={param.annotation}")
Parameter kinds
POSITIONAL_ONLY: Chỉ positional (trước/).POSITIONAL_OR_KEYWORD: Thường.KEYWORD_ONLY: Chỉ keyword (sau*hoặc*args).VAR_POSITIONAL:*args.VAR_KEYWORD:**kwargs.
Khuyên dùng signature() vì API giàu hơn, hỗ trợ type hints, parameter kinds.