[python学习]关于*星号的一些用法

文章介绍了Python中星号(*)和双星号(**)在函数定义和调用时的作用,如何收集和分配参数。单星号用于非关键字参数的解包,双星号用于关键字参数的解包。在函数参数列表中出现单独的星号表示位置参数的结束,后续参数必须以关键字方式提供。文章通过示例展示了如何正确使用这些操作符来传递和解析参数。
摘要由CSDN通过智能技术生成

星号在python的函数中经常会使用到,分别在函数定义和函数调用中起到收集或者分配参数,单星号*只对单个参数对象作用,**只对键值对类型的关键字参数作用。
例如:

def foo(*a):
    print(a[0])
foo(1, 2, 3)

>>> 1

def foo(a, b, c):
    print(c)
a = [1, 2, 3]
foo(*a)
>>> 3

def foo(a, b, c):
    print(c)
m = {'a':1, 'b':2, 'c':3}
foo(**m)
>>> 3

def foo(**m):
    print(m)
foo(a=1, b=2, c=3)
>>> {'a': 1, 'b': 2, 'c': 3}

有时候函数参数列表中会出现单独一个*,这是因为python3中**表示以关键字形式来指定参数,从而实现在位置顺序不对应的情况下,也可以明确参数对应关系。在此类函数的形参列表中会出现*,这是星号表示位置参数结束,之后的参数以关键字形式表示,该星号不会被赋予任何值。

def www(to_float32: bool = False,
        color_type: str = 'color',
        imdecode_backend: str = 'cv2',
        ignore_empty: bool = False,
        *,
        backend_args: dict = None) -> None:
    print(backend_args)
 
pipeline=dict(imdecode_backend='cv', backend_args=dict(backend='disk'))

www(**pipeline)

此时,利用**来强制以关键字形式解开pipeline中的键值,并按照对应关系进行赋值

def www(to_float32: bool = False,
        color_type: str = 'color',
        imdecode_backend: str = 'cv2',
        ignore_empty: bool = False,
        *,
        backend_args: dict = None) -> None:
    print(backend_args)
 
backend=dict(backend_args='disk')

www(True, 'binary', **backend)
www(True, 'binary', 'matplot', True, backend)
www(True, 'binary', 'matplot', True, **backend)

此时,www(True, 'binary', **backend)前两个参数按照位置复制,backend需找对应得键值对;www(True, 'binary', 'matplot', True, backend)则会报错,因为*表示之后的参数必须用**来赋值,即第三行www(True, 'binary', 'matplot', True, **backend)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值