python中星号(*和**)

  • 引:在c++中通过声明参数模板可以实现不定长参数的函数,在python中有更加方便的方式实现函数形参不定长的,那就是通过*号来实现。具体地可以分为两类,下面分别总结阐述。
  • 本文主要参考和代码测试了该博文
  • 第一类:在函数定义时使用 * 和 ** 。在函数定义时形参中 使用 * 和 **则表示 可以输入不确定具体参数个数的参数。
    • 通过 * 声明的参数在调用是可以传入0~n个参数,且不管传入的参数为何类型,在函数内部都将其打包存放在以形参名为标识符的tuple中,无法进行修改。
      在这里插入图片描述
    • 同理,通过**声明的参数也是可以传入多个参数,但是传入的参数类型需要为k1=v1,k2=v2…的类型,且参数在函数内部将被存放在以形式名为标识符的dictionary中,这种方法在需要声明多个默认参数的时候特别有用。
      在这里插入图片描述
    • 当然*args与**kwargs可以一起使用,但要注意*args要写在前面。
      在这里插入图片描述
    • 小结:在函数定义时形参使用*或**目的时为了将输入的形参进行打包,只是出关键词外的参数打包成一个tuple变量,各关键字打包成一个dictionary变量。这样函数的形参是可以变长的。
  • 第二类:函数调用时形参变量加上*或**。表示将输入的 集合(序列)类型变量拆开(可见此时传入的是可迭代的容器对象)。
    • 函数调用时参数变量前加*。
      在这里插入图片描述
      从上图可以看出函数调用时变量前加*可以解包各种容器类型变量:包括字典类型,值得注意的是此时字典只会将key解包并参与运算。
    • 函数调用参数时加上**,作用也是将传入的参数拆开,只是输入的参数必须为字典,且每个 key 必须要为函数的某个形参,key对应的value为该参数的值。见下图,该方法可用于将要输入的参数打包成字典,再通过字典解包到函数中。
      在这里插入图片描述
  • 第一类与第二类的结合使用
    • 定义函数和调用函数同时使用*,其实就时解包,再打包到args的过程:
      在这里插入图片描述
    • 同理,定义函数与调用函数同时使用**,也是解包再打包过程
      在这里插入图片描述
  • 总结:有人会有疑问,尤其是在最后的例子中,同时使用第一类和第二类,先解包在打包,这样做是不是又回去了,没有意义?其实不是,这样做的根本目的时保证函数的形参的长度是可变的。
Python,**是一种特殊的语法,用于在函数定义接收任意数量的关键字参数。这些关键字参数会被封装成一个字典,其关键字作为键,对应的值作为值。这样,函数就可以接收任意数量的关键字参数,并在函数体内使用这些参数。\[1\] 举个例子,如果一个函数定义有**kwargs参数,那么这个函数可以接收任意数量的关键字参数。在函数体内,可以通过kwargs字典来访问这些关键字参数。\[3\] 例如,下面的示例代码定义了一个名为foo的函数,它接收三个位置参数a、b和c,以及任意数量的关键字参数kwargs。在函数体内,我们可以通过kwargs字典来访问这些关键字参数。\[2\] ```python def foo(a, b, c, **kwargs): print("a = %s" % (a,)) print("b = %s" % (b,)) print("c = %s" % (c,)) print(kwargs) foo(a="testa", d="excess", c="testc", b="testb", k="another_excess") foo("testa", "testc", "testb", d="excess", k="another_excess") ``` 输出结果为: ``` a = testa b = testb c = testc {'d': 'excess', 'k': 'another_excess'} a = testa b = testc c = testb {'d': 'excess', 'k': 'another_excess'} ``` 可以看到,通过**kwargs参数,我们可以在函数调用时传入任意数量的关键字参数,并在函数体内使用这些参数。这在需要处理不确定数量的关键字参数时非常有用。 #### 引用[.reference_title] - *1* *2* *3* [Python星号*和**的含义](https://blog.csdn.net/gsgbgxp/article/details/123889475)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值