class inspect.Parameter(name, kind, *, default=Parameter.empty, annotation=Parameter.empty)
Parameter objects are immutable. Instead of modifying a Parameter object, you can use Parameter.replace()
to create a modified copy.
Changed in version 3.5: Parameter objects are picklable and hashable.
-
empty
-
A special class-level marker to specify absence of default values and annotations.
-
name
-
The name of the parameter as a string. The name must be a valid Python identifier.
-
default
-
The default value for the parameter. If the parameter has no default value, this attribute is set to
Parameter.empty
.
-
annotation
-
The annotation for the parameter. If the parameter has no annotation, this attribute is set to
Parameter.empty
.
-
kind
-
Describes how argument values are bound to the parameter. Possible values (accessible via
Parameter
, likeParameter.KEYWORD_ONLY
):Name Meaning POSITIONAL_ONLY Value must be supplied as a positional argument.
Python has no explicit syntax for defining positional-only parameters, but many built-in and extension module functions (especially those that accept only one or two parameters) accept them.
POSITIONAL_OR_KEYWORD Value may be supplied as either a keyword or positional argument (this is the standard binding behaviour for functions implemented in Python.) VAR_POSITIONAL A tuple of positional arguments that aren’t bound to any other parameter. This corresponds to a *args
parameter in a Python function definition.KEYWORD_ONLY Value must be supplied as a keyword argument. Keyword only parameters are those which appear after a *
or*args
entry in a Python function definition.VAR_KEYWORD A dict of keyword arguments that aren’t bound to any other parameter. This corresponds to a **kwargs
parameter in a Python function definition.Example: print all keyword-only arguments without default values:
>>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... if (param.kind == param.KEYWORD_ONLY and ... param.default is param.empty): ... print('Parameter:', param) Parameter: c
-
replace(*[, name][, kind][, default][, annotation])
-
Create a new Parameter instance based on the instance replaced was invoked on. To override a
Parameter
attribute, pass the corresponding argument. To remove a default value or/and an annotation from a Parameter, passParameter.empty
.>>> from inspect import Parameter >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) >>> str(param) 'foo=42' >>> str(param.replace()) # Will create a shallow copy of 'param' 'foo=42' >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo:'spam'"
Changed in version 3.4: In Python 3.3 Parameter objects were allowed to have
name
set toNone
if theirkind
was set toPOSITIONAL_ONLY
. This is no longer permitted.
Please login to continue.