python函数参数中单独的*

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 "", line 1, in 
    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'):

你可能感兴趣的:(原来是这样)