python参数+关键字参数+inspect模块实例分析
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要讲解了"python参数+关键字参数+inspect模块实例分析",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"python参数+关键字参数
千家信息网最后更新 2025年02月02日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安全错误
数据库的锁怎样保障安全
网络安全手机使用保密管理
数据库SQL工作待遇
关于网络技术的论文3000字
网络安全最前沿的东西
东莞销售软件开发哪家好
虚拟机怎么用ubuntu服务器
饥荒服务器1核2g内存不够
实况数据库小程序故障
人民日报提出的网络安全
计算机网络技术是什么意思
转发网络安全手册
我的世界哪款服务器最火
广州云锐互联网科技有限公司
配置代理服务器加速软件
浪潮是什么服务器
数据库实训报告出现的问题
广西c 软件开发
服务器1500g月流量
网络安全网络诈骗手抄报内容
我的世界服务器空岛道路规划
联通云服务器安全性能怎么样
多跨框架软件开发ppt
国外dns服务器
计算机网络安全与管理主题文章
怎样做服务器
长三角新华互联网科技
行业软件开发定制
联想服务器内存条插法
广西玉林网络安全公司
数据库期末考试的名词解释