python函数传参时加2个星号**作用
一:问题
下面的代码
1 def test_func(*args, **kwargs): 2 print(f"argsType={type(args)},args={args}") 3 print(f"kwargsType={type(kwargs)},kwargs={kwargs}") 4 5 content1 = 11 6 content2 = 22 7 info ={"name":"mmkx","age":2} 8 9 test_func(content1,content2,info) 10 test_func(content1,content2,**info)
我们常常见到方法像第1行这样定义:1个星为可变参数,2个星为关键字参数
这里第9行和第10行的info加不加2个星传入有什么区别?传值的时候到底什么情况要加星什么情况不加星号呢?
二:解答
传参加2个星的意思是:将字典转换为关键字参数
即将info ={"name":"mmkx","age":2} 转成 name=mmkx,age=2
三:解释说明
1、传参加不加2个星号的区别:
这里第一个参数*args是可变参数,支持传入任何参数类型,不过传入的参数类型都会被改变,会把它改成元组
这里第二个参数**kwargs是关键字参数,只支持传入k=v的参数格式和字典参数类型,不支持传其他参数类型,对于字典参数类型传入时需要前面加上**,目的是为了将字典转成k=v关键词的形式
也就是说:
1 content1 = 11 2 content2 = 22 3 info ={"name":"mmkx","age":2} 4 5 test_func(content1,content2,info) 6 test_func(content1,content2,**info)
第5行的结果是:(11,12,{"name":"mmkx","age":2})
第6行的结果是:(11,12)和{'name': 'mmkx', 'age': 2}
2、传参只加一个星号会怎样?
加1个星号,则会将这个星号后面的参数依次遍历,在转成元组
也就是说:
1 content3=99 2 content4=[3,4,5] 3 test_func(content3,content4) 4 test_func(content3,*content4)
第3行的结果是:(99,[3,4,5])
第4行的结果是:(99,3,4,5)
四:总结
传参时:
1. 如果你想将可迭代对象展开为可变参数,则加一个※号
2. 如果你想将字典转成关键字参数,则加2个※号
3. 都不是,则不用加※号
分类:
07-python3核心技术
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!