函数内省
当你拿到一个“函数对象”的时候,你可以继续知道,它的名字,参数定义状况等信息。类似与JAVA的反射
>>> def f(a,b=80,c=None, *args,**kwargs):
... d = 80
# 获得函数的默认值,仅限关键字参数的默认值在__kwdefault__属性中
>>> f.__defaults__
(80, None)
# 参数的名称在__code__属性中
>>> f.__code__
<code object f at 0x000001BC5049C0E0, file "<stdin>", line 1>
# 参数名称,不过里面包含有函数创建的局部变量
>>> f.__code__.co_varnames
('a', 'b', 'c', 'args', 'kwargs', 'd')
# co_argcount 决定参数的个数,不包含* 和 ** 的变长参数
>>> f.__code__.co_argcount
3
inspect 模块:可以把函数参数和参数的默认值一一对应起来
>>> from inspect import signature
>>>
>>> sig = signature(f)
>>> sig
<Signature (a, b=80, c=None, *args, **kwargs)>
>>> str(sig)
'(a, b=80, c=None, *args, **kwargs)'
>>> for name, param in sig.parameters.items():
... print(param.kind,':',name,'=',param.default)
...
POSITIONAL_OR_KEYWORD : a = <class 'inspect._empty'>
POSITIONAL_OR_KEYWORD : b = 80
POSITIONAL_OR_KEYWORD : c = None
VAR_POSITIONAL : args = <class 'inspect._empty'>
VAR_KEYWORD : kwargs = <class 'inspect._empty'>
inspect.Paramter 对象kind 属性的五种取值:
POSITIONAL_ONLY = _POSITIONAL_ONLY (仅限位置参数)
POSITIONAL_OR_KEYWORD = _POSITIONAL_OR_KEYWORD (可以通过定位参数和关键字参数传入)
VAR_POSITIONAL = _VAR_POSITIONAL (定位参数元组,例如:*args)
KEYWORD_ONLY = _KEYWORD_ONLY (仅限关键字参数, *号之后的关键仔参数)
VAR_KEYWORD = _VAR_KEYWORD (关键字参数字典,例如:**kwargs)
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/15858047.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!