python基础教程:动态参数

前言

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

Python的动态参数有两种,分别是*args和**kwargs,

这里面的关键是一个和两个星号的区别,而不是args和kwargs在名字上的区别,

实际上你可以使用*any或**whatever的方式。

但就如self一样,默认大家都使用*args和**kwargs。

注意:动态参数,必须放在所有的位置参数和默认参数后面!

def func(name, age, sex='male', *args, **kwargs): # 位置参数 默认参数 动态参数
    pass

*args

一个星号表示接收任意个参数。调用时,会将实际参数打包成一个元组传入形式参数。

如果参数是个列表,会将整个列表当做一个参数传入。

例如:

'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
def func(*args):
    for arg in args:
        print(arg)

func('a', 'b', 'c')

li = [1, 2, 3]
func(li)

运行结果是:

a
b
c
[1, 2, 3]

重要知识点*

通过循环args,我们可以获得传递的每个参数。

但是li这个列表,我们本意是让它内部的1,2,3分别当做参数传递进去,但实际情况是列表本身被当做一个整体给传递进去了。

怎么办呢?使用一个星号!

调用函数,传递实参时,在列表前面添加一个星号就可以达到目的了。

实际情况是,不光列表,任何序列类型数据对象,比如字符串、元组都可以通过这种方式将内部元素逐一作为参数,传递给函数。

而字典,则会将所有的key逐一传递进去。

def func(*args):
    for arg in args:
        print(arg)

li = [1, 2, 3]
func(*li)

**kwargs

'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
def func(**kwargs):
    for kwg in kwargs:
        print(kwg, kwargs[kwg])

dic = {
    'k1': 'v1',
    'k2': 'v2'
}

func(**dic)

两个星号能将字典内部的键值对逐一传入**kwargs。

“万能”参数

当*args和kwargs组合起来使用,理论上能接受任何形式和任意数量的参数,需要注意的是,*args必须出现在kwargs之前。

'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
def func(a, b, c=1, *args, **kwargs):
    print('c的值是:', c)
    for arg in args:
        print(arg)

    for kwg in kwargs:
        print(kwg, kwargs[kwg])


lis = ['aaa', 'bbb', 'ccc']
dic = {
    'k1': 'v1',
    'k2': 'v2'
}

func(1, 2, *lis, **dic)

打印结果为:

c的值是: aaa
bbb
ccc
k1 v1
k2 v2

原来,lis的第一个元素被传递给参数c了!这就是Python的参数传递规则之一。

关键字参数

关键字参数前面需要一个特殊分隔符*和位置参数及默认参数分隔开来,*后面的参数被视为关键字参数。

在函数调用时,关键字参数必须传入参数名,这和位置参数不同。

如果没有传入参数名,调用将报错。

不同于默认参数,关键字参数必须传递,但是关键字参数也可以有缺省值,这时就可以不传递了,从而简化调用。

'''
python资料获取看这里噢!! 小编 V:qian97378,即可获取:
文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
def student(name, age, *, sex):
    print(name,age,sex)

student(name="jack", age=18, sex='male')

如果函数定义中已经有了一个args参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符了。

def student(name, age=10, *args, sex, classroom, **kwargs):
    pass

student(name="jack", age=18, sex='male', classroom="202", k1="v1")

尾语

好了,今天的分享就差不多到这里了!

对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

最后,宣传一下呀~ 更多源码、资料、素材、解答、交流 皆点击下方名片获取呀

你可能感兴趣的:(python,python,开发语言,pycharm)