如果说一个函数,可变参数和关键字可变参数同时存在时,只能通过解包的方式传参才有效吗?

来源:8-8 关键字可变参数

吃小锅米线

2018-04-18

如题:

def func(param, param2=2, *args, **kwargs):
    print(param)
    print(param2)
    print(args)
    print(kwargs)
    
func(1,'param2',1,2,3,4,5,6,{'1':1,'2':2})

打印出来前两个参数(必须参数和默认参数)都对号入座了,但是到了可变参数的时候,它会把后面的关键字可变参数也算作自己的元素,然后最后关键字可变参数打印出来的是个空字典。

如果说存在有可变参数和关键字可变参数同时存在的这种情况,那么我只能这么传:

def func(param, param2=2, *args, **kwargs):
    print(param)
    print(param2)
    print(args)
    print(kwargs)
    
a = 1,2,3,4,5,6,7,8
b = {'1':1,'2':2}
func(1,'param2',*a,**b)

我试过,只有这样通过解包的方式传才与预期相符。

要是我不用解包的方式传,我就在func括号里直接写,有什么办法可以让它知道最后面的花括号表示的是关键字可变参数呢?而不是直接把花括号里的也当作可变参数。

写回答

1回答

Silence_ZK

2018-04-18

同学,你这里参数的顺序得换一下咯,应该是 ;

1.必须参数  2. 可变参数(or 可变关键字参数)3. 默认参数(默认参数必须是最后一个哦)

而这里说的 关键字参数是针对调用函数时的参数而言的 ,关键字可变参数的话,如果你传入的是list or dict  ,tuple的话 也就只能序列解包的方式来解决问题了,请采纳

0
1
吃小锅米线
非常感谢!受教了,看来也只有通过解包来实现。
2018-04-18
共1条回复

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14598 学习 · 4469 问题

查看课程