# 测试
1 | import inspect |
# 输出
inspect.signature (fn) 是: (a, b=0, *c, d, e=1, **f)
inspect.signature (fn) 的类型是: <class ‘inspect.Signature’>
signature.paramerters 属性是: OrderedDict ([(‘a’, <Parameter “a”>), (‘b’, <Parameter “b=0”>), (‘c’, <Parameter “*c”>), (‘d’, <Parameter “d”>), (‘e’, <Parameter “e=1”>), (‘f’, <Parameter “**f”>)])
signature.paramerters 属性的类型是: <class ‘mappingproxy’>
mappingproxy.items () 返回的两个值分别是:a 和 a
mappingproxy.items () 返回的两个值的类型分别是:<class ‘str’> 和 < class ‘inspect.Parameter’>
Parameter.kind 属性是: POSITIONAL_OR_KEYWORD
Parameter.kind 属性的类型是: <enum ‘_ParameterKind’>
Parameter.default 的值是: <class ‘inspect._empty’>
Parameter.default 的属性是: <class ‘type’>
mappingproxy.items () 返回的两个值分别是:b 和 b=0
mappingproxy.items () 返回的两个值的类型分别是:<class ‘str’> 和 < class ‘inspect.Parameter’>
Parameter.kind 属性是: POSITIONAL_OR_KEYWORD
Parameter.kind 属性的类型是: <enum ‘_ParameterKind’>
Parameter.default 的值是: 0
Parameter.default 的属性是: <class ‘int’>
mappingproxy.items () 返回的两个值分别是:c 和 * c
mappingproxy.items () 返回的两个值的类型分别是:<class ‘str’> 和 < class ‘inspect.Parameter’>
Parameter.kind 属性是: VAR_POSITIONAL
Parameter.kind 属性的类型是: <enum ‘_ParameterKind’>
Parameter.default 的值是: <class ‘inspect._empty’>
Parameter.default 的属性是: <class ‘type’>
mappingproxy.items () 返回的两个值分别是:d 和 d
mappingproxy.items () 返回的两个值的类型分别是:<class ‘str’> 和 < class ‘inspect.Parameter’>
Parameter.kind 属性是: KEYWORD_ONLY
Parameter.kind 属性的类型是: <enum ‘_ParameterKind’>
Parameter.default 的值是: <class ‘inspect._empty’>
Parameter.default 的属性是: <class ‘type’>
mappingproxy.items () 返回的两个值分别是:e 和 e=1
mappingproxy.items () 返回的两个值的类型分别是:<class ‘str’> 和 < class ‘inspect.Parameter’>
Parameter.kind 属性是: KEYWORD_ONLY
Parameter.kind 属性的类型是: <enum ‘_ParameterKind’>
Parameter.default 的值是: 1
Parameter.default 的属性是: <class ‘int’>
mappingproxy.items () 返回的两个值分别是:f 和 **f
mappingproxy.items () 返回的两个值的类型分别是:<class ‘str’> 和 < class ‘inspect.Parameter’>
Parameter.kind 属性是: VAR_KEYWORD
Parameter.kind 属性的类型是: <enum ‘_ParameterKind’>
Parameter.default 的值是: <class ‘inspect._empty’>
Parameter.default 的属性是: <class ‘type’>
inspect.Parameter.KEYWORD_ONLY 的值是: KEYWORD_ONLY
inspect.Parameter.KEYWORD_ONLY 的类型是: <enum ‘_ParameterKind’>
# 总结
-
inspect.signature(fn) 将返回一个 inspect.Signature 类型的对象,值为 fn 这个函数的所有参数
-
inspect.Signature 对象的 paramerters 属性是一个 mappingproxy(映射)类型的对象,值为一个有序字典(Orderdict)。这个字典里的 key 是即为参数名,str 类型,这个字典里的 value 是一个 inspect.Parameter 类型的对象
-
inspect.Parameter 对象的 kind 属性是一个_ParameterKind 枚举类型的对象,值为这个参数的类型(可变参数,关键词参数,etc)
- a: POSITIONAL_OR_KEYWORD
- b: POSITIONAL_OR_KEYWORD
- c: VAR_POSITIONAL
- d: KEYWORD_ONLY 在可变参数 (包裹位置) 后面的只能是仅限关键字参数和可变参数 (包裹关键字)
- e: KEYWORD_ONLY
- f: VAR_KEYWORD
- inspect.Parameter 对象的 default 属性:如果这个参数有默认值,即返回这个默认值,如果没有,返回一个 inspect._empty 类。