名称 | 说明 |
---|---|
annotations | 参数和返回值的注解 |
call | 可调用对象协议 |
closure | 判断是否是闭包函数,即自由变量的绑定,一般是None |
code | 编译成字节码的函数元数据和函数定义体 |
defaults | 形式参数的默认值 |
get | 实现只读描述符协议 |
globals | 函数所在模块中的全局变量 |
kwdefaults | 仅限关键字形式参数的默认值 |
name | 函数名称 |
qualname | 函数的限定名称 |
def demo(para1: int = 1, para2: str = '1') -> str:
"""
Args:
para1: int
para2: str
Returns: str
"""
return para1 * para2
print(f"对象的所有属性(方法)名: {demo.__dir__()}")
print(demo.__repr__())
print('判断是否是闭包函数:%s' % demo.__closure__)
print('函数的doc注释:%s' % demo.__doc__)
print('函数名称: %s' % demo.__name__)
print('函数所在模块名 %s' % demo.__module__)
print(f'默认参数当前值组成的元组: {demo.__defaults__}')
print(f'定义函数的模块的全局命名空间: {demo.__globals__}')
print(f'注解组成的字典: {demo.__annotations__}')
print(f'查看对象所在类: {demo.__class__}')
"""
对象的所有属性(方法)名: ['__repr__', '__call__', '__get__', '__new__', '__closure__', '__doc__', '__globals__', '__module__', '__code__', '__defaults__', '__kwdefaults__', '__annotations__', '__dict__', '__name__', '__qualname__', '__hash__', '__str__', '__getattribute__', '__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__init__', '__reduce_ex__', '__reduce__', '__subclasshook__', '__init_subclass__', '__format__', '__sizeof__', '__dir__', '__class__']
<function demo at 0x7f9441edd5f0>
判断是否是闭包函数:None
函数的doc注释:
Args:
para1: int
para2: str
Returns: str
函数名称: demo
函数所在模块名 __main__
默认参数当前值组成的元组: (1, '1')
定义函数的模块的全局命名空间: {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f9441e6c710>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/zaygee/work_script/Script/python_test/round_two/7_25_test.py', '__cached__': None, 'os': <module 'os' from '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py'>, 'A': <class '__main__.A'>, 'a': <__main__.A object at 0x7f9441e7c910>, 'demo': <function demo at 0x7f9441edd5f0>}
注解组成的字典: {'para1': <class 'int'>, 'para2': <class 'str'>, 'return': <class 'str'>}
查看对象所在类: <class 'function'>
"""
获取参数信息
1、可通过 code 获取 2、通过 from inspect import signature
def make_averager():
"""计算移动平均值"""
series = []
def averager(new_value):
# series 是自由变量:指未在本地作用域中绑定的变量
series.append(new_value)
print(f'series : {series}')
total = sum(series)
return total/len(series)
return averager
avg = make_averager()
print(avg(10))
print(avg(11))
print(avg(12))
# 获取函数创建的局部变量名称,其中参数名称是前N个字符串,由co_argcount可得
# 获取函数创建的局部变量名称: ('new_value', 'total')
print(f'获取函数创建的局部变量名称: {avg.__code__.co_varnames}')
# 获取函数参数个数
# 获取函数参数个数 : 1
print(f'获取函数参数个数 : {avg.__code__.co_argcount}')
# 获取函数中的自由变量
# 获取函数中的自由变量 : ('series',)
print(f'获取函数中的自由变量 : {avg.__code__.co_freevars}')
from inspect import signature
sig = signature(avg)
# OrderedDict([('new_value', <Parameter "new_value">)])
print(sig.parameters)
for name, param in sig.parameters.items():
# POSITIONAL_OR_KEYWORD : new_value = <class 'inspect._empty'>
print(param.kind, ':', name, '=', param.default)
"""
POSITIONAL_OR_KEYWORD: 可通过定位参数和关键字参数传入的形参
VAR_POSITIONAL: 定位参数元祖
VAR_KEYWORD: 关键字参数字典
"""