python函数参数中单独的*
python的可变参数*args和**kwargs是很常见的,但在别人的代码中看到 函数参数中有个单独的*,没明白这个写法有啥用,搜'函数参数 单独的*' 之类的也找不到想要的结果。试也没试出名堂来。。 知道了以后很简单,都不想在这记录了。。显得我多菜。。(虽然可惜这是事实)算了 还是记录一下吧,主要是方便人搜索。
这个叫 命名关键字参数,搜这个结果就很多了。其作用是 限制关键字参数的名字,也就是除了位置参数,只接受*后面的 命名关键字参数
def test_func1(aa, bb, cc='hello'):
print('11111 ', aa)
print('22222 ', bb)
print('33333 ', cc)
def test_func2(aa, *, bb, cc='hello'):
print('11111 ', aa)
print('22222 ', bb)
print('33333 ', cc)
test_func1('haha', 'hehe', 'heihei')
11111 haha
22222 hehe
33333 heihei
test_func2('haha', 'hehe', 'heihei')
Traceback (most recent call last):
File "<ipython-input-5-ec0696934d76>", line 1, in <module>
test_func2('haha', 'hehe', 'heihei')
TypeError: test_func2() takes 1 positional argument but 3 were given
test_func2('haha', bb='hehe')
11111 haha
22222 hehe
33333 hello
test_func2('haha', bb='hehe', cc='heihei')
11111 haha
22222 hehe
33333 heihei
def test_func2(aa, *, bb, cc='hello'): 这样定义后,就只能接受 bb='xxx', cc='xxx', 不能接受其他的命名关键字参数了。
如果已经有一个可变参数,后面的命名关键字就不再需要一个单独的*了,如 def test_func3(aa, *args, bb, cc='hello'): 和 def test_func4(aa, **kwargs, bb, cc='hello'):
--------
没想到这个贴子还相对受欢迎。一筹莫展时,是一位叫奔奔的朋友告诉我的,她从python cookbook这本书里看到的。 还是要多看书呀~