python函数参数中单独的*

本文详细解释了Python中单独星号(*)作为函数参数的作用,即限制关键字参数的名字,仅允许指定的命名关键字参数,展示了如何定义及调用此类函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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这本书里看到的。 还是要多看书呀~

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值