前言,复习想直接看源代码,这里先分享下,*args和**kwargs他们都是什么意思

Posted stubbon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前言,复习想直接看源代码,这里先分享下,*args和**kwargs他们都是什么意思相关的知识,希望对你有一定的参考价值。

本文来自:https://blog.csdn.net/lllxxq141592654/article/details/81288741
在源码中,基本都有这种含*args和**kwargs的表达那么他们都是什么意思呢?
前言:
*args
打包参数(pack)
拆分参数(unpack)(pack)
**kwargs
打包参数(pack)
拆分参数(unpack)
这里先看三个小函数:
def foo3(*args):
    print(args)
    print(type(args))
foo3(1, 2, 3, 4, 5)

def foo4(a, *args):
    print(a:, a)
    print(args:, args)
foo4(1, 2, 3, 4, 5)

def bar1(a,b,c):
    print(a,b,c)
bar1(*[1,2,3])

def bar2(deal):
    a,b,*_, = deal
    _, _, *c, _, _, = deal
    d, *_, e = deal
*args有两部分构成为——∗和args。这里的重点是∗。 
  所以为了讲清楚*args,我们要追根溯源——理解∗的作用。
  这里敲黑板,重点来了,这也是很多博客写的没有写到的地方:∗的作用,有2个—— 打包参数(pack)和拆分参数(unpack)!
打包参数(pack) 
技术图片
def foo(*number):
    ‘‘‘
    ∗ 把函数foo()接受到的多个参数如1,2,3,4,5,打包成了元组(1,2,3,4,5),赋值给了形参number。
    ‘‘‘
    print(number)
    print(type(number))

def foo1(a, *number):
    ‘‘‘
    ∗ 的作用:函数接受实参时,按顺序分配给函数形参,如果遇到带∗的形参,那么就把还未分配出去的实
    参以元组形式打包(pack),分配给那个带∗的形参。
    ‘‘‘
    print(a:, a)
    print(number:, number)
    for i in number:
        print(i)
    print(type(number))

def foo2(a, b, *number, c):
    ‘‘‘
    c前面的参数带∗,把剩下的实参都接受走了,c没有传入实参!这个函数的c参数得不到任何的传值
    ‘‘‘
    pass
View Code
拆分参数(unpack)(pack) 
def bar(a,b,c):
    ‘‘‘
    把打包了的实参(元组或列表),拆分(unpack)成单个的,依次赋值给函数的形参。
    这里的虽然进行打包,但是参数的个数记得需要对应,不然会报错,
    ‘‘‘
    pass
bar(*[1,2,3])
**kwargs也有两部分构成为——∗∗和kwargs。这里的重点是∗∗。没错,kwargs仅仅是一个约定俗成的写法,
没有其他特殊含义,换成其他的也照用不误,但是为了代码可读性,最好还是用约定俗成的。
∗∗ 的作用同样也有两个—— 打包参数(pack)和拆分参数(unpack)!
但是区别还是有的,简单来说就是:
  打包(pack):*args是把多个位置参数打包成元组,**kwargs是把多个关键字参数打包成字典。
  拆分(unpack):*args是把打包了的参数拆成单个的,依次赋值给函数的形参,**kwargs是把字典的键值拆成单个的,依次赋值给函数的形参。
打包参数(pack) 
def bar(**number):
    ‘‘‘
    把传递来的参数打包成一个字典
    ‘‘‘
    print(number)
    print(type(number))
bar(a=1, b=2, c=3)
拆分参数(unpack)(pack)
def bar(a, b, c):
    ‘‘‘
    把字典拆分,根据键值赋值
    ‘‘‘
    print(a,b,c)
bar(**{a: 1,  c: 3,b: 2})

位置参数,关键字参数,*args,**kwargs混用是要有一定顺序的待修正

 
 

 

以上是关于前言,复习想直接看源代码,这里先分享下,*args和**kwargs他们都是什么意思的主要内容,如果未能解决你的问题,请参考以下文章

编程入门先学什么小白想入门看这里

#私藏项目实操分享#Python爬虫实战,requests模块,Python实现爬取网站漫画

2021年腾讯Java开发岗面经分享+复习方法

分享一个可以自定义搜索定位的地图

Newtonsoft 六个超简单又实用的特性,值得一试 上篇

复习:一个指针交换数值的函数的疑惑