我有一个泛型函数,它接受2个参数(int)作为a和B作为必需参数,另外2个作为可选参数;这是函数signatute
myfunct(a, b, c=False, d="joe")
a和b是int,c是bool,d是str类型。你知道吗
我正在使用splat
操作符传递一个列表,因此根据我从argparse
获得的参数数量,我可以添加可选参数,也可以不添加。有时我会得到对函数的调用
myfunct 21, 32
有时作为
myfunct 34, 44, c=True
以及其他的变种
尽管我注意到splat函数没有正确地传递可选参数。相反,它按顺序传递参数,即使我指定使用哪个可选参数。你知道吗
thelist = [21, 32, "d="+"mike"]
myfunct(*thelist]
当我查看函数中每个变量的内容时,我正确地得到了a
和b
,但不是在d
可选参数中得到mike
,而是在c
中得到它,它分配整个字符串,而不是只分配=
符号后面的内容
这就是变量的内容:
a -> 21
b -> 32
c -> d=mike
在我期待的时候
a -> 21
b -> 32
d -> mike
如何使用splat运算符传递可选参数?或者从这个开始是个坏主意?你知道吗
通过dict给出关键字参数(kwargs),用
**
展开:虽然可以为位置参数(显然你已经弄明白了)解包一个列表,但是对于关键字参数,你需要一个字典。你知道吗
这并不是一个天生的坏主意,但是当你做这样的事情时,一定要记住它会对查看你的代码的人的可读性产生怎样的影响(包括你自己在这之后的几个月里已经不再是新鲜的了)。你知道吗
相关问题 更多 >
编程相关推荐