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.  CPython implementation detail: CPython generates implicit parameter names of the form .0 on the code objects used to implement comprehensions and generator expressions.  Changed in version 3.6: These parameter names are exposed by this module as names like implicit0.   
  
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, like Parameter.KEYWORD_ONLY):   
Name Meaning   
POSITIONAL_ONLY Value must be supplied as a positional argument. Positional only parameters are those which appear before a / entry (if present) in a Python function definition.  
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
 
  
kind.description  
Describes a enum value of Parameter.kind.  New in version 3.8.  Example: print all descriptions of arguments: >>> def foo(a, b, *, c, d=10):
...     pass

>>> sig = signature(foo)
>>> for param in sig.parameters.values():
...     print(param.kind.description)
positional or keyword
positional or keyword
keyword-only
keyword-only
 
  
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, pass Parameter.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 to None if their kind was set to POSITIONAL_ONLY. This is no longer permitted.