名称 说明
annotations 参数和返回值的注解
call 可调用对象协议
closure 判断是否是闭包函数,即自由变量的绑定,一般是None
code 编译成字节码的函数元数据和函数定义体
defaults 形式参数的默认值
get 实现只读描述符协议
globals 函数所在模块中的全局变量
kwdefaults 仅限关键字形式参数的默认值
name 函数名称
qualname 函数的限定名称
  1. def demo(para1: int = 1, para2: str = '1') -> str:
  2. """
  3. Args:
  4. para1: int
  5. para2: str
  6. Returns: str
  7. """
  8. return para1 * para2
  9. print(f"对象的所有属性(方法)名: {demo.__dir__()}")
  10. print(demo.__repr__())
  11. print('判断是否是闭包函数:%s' % demo.__closure__)
  12. print('函数的doc注释:%s' % demo.__doc__)
  13. print('函数名称: %s' % demo.__name__)
  14. print('函数所在模块名 %s' % demo.__module__)
  15. print(f'默认参数当前值组成的元组: {demo.__defaults__}')
  16. print(f'定义函数的模块的全局命名空间: {demo.__globals__}')
  17. print(f'注解组成的字典: {demo.__annotations__}')
  18. print(f'查看对象所在类: {demo.__class__}')
  19. """
  20. 对象的所有属性(方法)名: ['__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__']
  21. <function demo at 0x7f9441edd5f0>
  22. 判断是否是闭包函数:None
  23. 函数的doc注释:
  24. Args:
  25. para1: int
  26. para2: str
  27. Returns: str
  28. 函数名称: demo
  29. 函数所在模块名 __main__
  30. 默认参数当前值组成的元组: (1, '1')
  31. 定义函数的模块的全局命名空间: {'__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>}
  32. 注解组成的字典: {'para1': <class 'int'>, 'para2': <class 'str'>, 'return': <class 'str'>}
  33. 查看对象所在类: <class 'function'>
  34. """

获取参数信息

1、可通过 code 获取 2、通过 from inspect import signature

  1. def make_averager():
  2. """计算移动平均值"""
  3. series = []
  4. def averager(new_value):
  5. # series 是自由变量:指未在本地作用域中绑定的变量
  6. series.append(new_value)
  7. print(f'series : {series}')
  8. total = sum(series)
  9. return total/len(series)
  10. return averager
  11. avg = make_averager()
  12. print(avg(10))
  13. print(avg(11))
  14. print(avg(12))
  15. # 获取函数创建的局部变量名称,其中参数名称是前N个字符串,由co_argcount可得
  16. # 获取函数创建的局部变量名称: ('new_value', 'total')
  17. print(f'获取函数创建的局部变量名称: {avg.__code__.co_varnames}')
  18. # 获取函数参数个数
  19. # 获取函数参数个数 : 1
  20. print(f'获取函数参数个数 : {avg.__code__.co_argcount}')
  21. # 获取函数中的自由变量
  22. # 获取函数中的自由变量 : ('series',)
  23. print(f'获取函数中的自由变量 : {avg.__code__.co_freevars}')
  1. from inspect import signature
  2. sig = signature(avg)
  3. # OrderedDict([('new_value', <Parameter "new_value">)])
  4. print(sig.parameters)
  5. for name, param in sig.parameters.items():
  6. # POSITIONAL_OR_KEYWORD : new_value = <class 'inspect._empty'>
  7. print(param.kind, ':', name, '=', param.default)
  8. """
  9. POSITIONAL_OR_KEYWORD: 可通过定位参数和关键字参数传入的形参
  10. VAR_POSITIONAL: 定位参数元祖
  11. VAR_KEYWORD: 关键字参数字典
  12. """