python参数+关键字参数+inspect模块实例分析
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"python参数+关键字参数+inspect模块实例分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python参数+关键字参数
千家信息网最后更新 2026年10月31日python参数+关键字参数+inspect模块实例分析
这篇文章主要讲解了"python参数+关键字参数+inspect模块实例分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python参数+关键字参数+inspect模块实例分析"吧!
函数内省(function introspection)
除了__doc__属性, 函数对象还有很多属性,对于下面的函数,可以使用dir()查看函数具有的属性:
>>> dir(factorial) ['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
其中大多数是Python常规类都有的属性,下面重点看看常规对象没有而函数对象有的属性:
>>> class C:pass...>>> obj = C()>>> def func():pass...>>> sorted(set(dir(func)) - set(dir(obj))) # 计算差集,然后排序['__annotations__', '__call__', '__closure__', '__code__', '__defaults__', '__get__', '__globals__', '__kwdefaults__', '__name__', '__qualname__']
对于上面列出的函数特有属性,说明如下:
__annotations__ dict 参数和返回值的注释
__call__ method-wrapper 实现()运算符,即可调用对象的协议
__closure__ tuple 函数闭包,即自由变量的绑定(通常是None)
__code__ code 编译成字节码的函数元数据和函数定义体
__defaults__ tuple 形式参数的默认值
__get__ method-wrapper 实现只读描述符协议
__globals__ dict 函数所在的模块中的全局变量
__kwdefaults__ dict 仅限关键字形式参数的默认值
__name__ str 函数名称
__qualname__ str 函数的限定名称
定位参数和仅限关键字参数
def tag(name,*content,cls=None,**attrs):if cls is not None:attrs['class'] = clsif attrs:attrs_str = ''.join(' %s="%s" ' % (attr,value) for attr,value in sorted(attrs.items()))else:attrs_str=''if content:return '\n'.join('<%s %s >%s%s>' % (name,attrs_str,c,name) for c in content)else:return '<%s%s />' % (name,attrs_str)print(tag('br'))#定位参数 nameprint(tag('p','hello'))#hello 会被*conteng捕获 存入元组content = ('hello')print(tag('p','hello','world'))#content = ('hello','world')print(tag('p','hello',id=33)) #attrs={'id':33} content = ('hello')print(tag('p','hello','world',cls='sidebar'))#cls 关键字传入 cls='sidebar'print(tag(content='testing',name='img'))#第一个参数name 也能作为关键字传入#同名键会绑定到对应的具名参数上,剩余的则会被**attrs捕获print(tag(**{'name':'img','title':'sunset boulevard','src':'sunset.jpg','cls':'framed'}))#仅限关键字参数是python3.0新增的特性,在上例中,cls参数只能通过关键字参数指定,他一定不会捕获未命名的定位参数#定义函数时候,如果想指定仅限关键字参数,要把它们放到*的参数后面def f(a,*,b):return a,bff = f(1,b=2)print(ff)hello
hello
world
hello
(1, 2)
inspect模板
def tag(name,*content,cls=None,**attrs):if cls is not None:attrs['class'] = clsif attrs:attrs_str = ''.join(' %s="%s" ' % (attr,value) for attr,value in sorted(attrs.items()))else:attrs_str=''if content:return '\n'.join('<%s %s >%s%s>' % (name,attrs_str,c,name) for c in content)else:return '<%s%s />' % (name,attrs_str)import inspectsig = inspect.signature(tag)print(sig)my_tag = {'name':'img','title':'sun long','src':'sunlong.jpg','cls':'framed'}bound_args = sig.bind(**my_tag)for name,value in bound_args.arguments.items():print(name,'=',value)print(bound_args)inspect模块把实参绑定给函数调用:
(name, *content, cls=None, **attrs)name = imgcls = framedattrs = {'title': 'sun long', 'src': 'sunlong.jpg'}感谢各位的阅读,以上就是"python参数+关键字参数+inspect模块实例分析"的内容了,经过本文的学习后,相信大家对python参数+关键字参数+inspect模块实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
参数
函数
关键
关键字
模块
属性
实例
实例分析
分析
对象
学习
定位
内容
变量
名称
常规
形式
形式参数
自由
全局
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技企业
互联网科技工作委员会副主任毛军
互联网科技官网
科技股互联网
互联网科技会
美国互联网科技
壹账通互联网科技
哈尔滨秒房互联网科技有限公司
老年人脱离互联网科技的作文
江苏南京365互联网科技
银川新华互联网科技职业技术培训学校图片
科技互联网大厂
岳阳华臻互联网科技有限公司
中国航天科技大学国际工业互联网
坤平互联网科技
云南省自由互联网科技有限公司
广州互联网高科技取餐柜
北京互联网科技类企业分布
北京军民互联网科技公司
安徽九吞吴互联网科技有限公司
互联网加科技
高科技互联网
互联网科技公司税收优惠
互联网金融与金融科技
互联网科技网站
农村开互联网科技讲堂
以后互联网后是啥科技
半导体是互联网高科技吗
北京品多多互联网科技有限公司
小牛互联网科技有限公司地址
(1, 2)