暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【python基础】函数—动态参数

云南高校数据化运营管理工程中心 2018-11-20
881

目录






  1. 动态参数的定义

  2. *args

  3. *kwargs

  4. 万能参数






作者:

编辑:

版本:

孙凯

张德鑫

python3

动态参数的定义

顾名思义,动态参数就是传入的参数个数是动态的,可以是零个或多个,在不需要的时候,就可以把它忽略,不用传递任何值。Python里面的动态参数有两种:*args和**kwargs,这里面的关键区别在于是一个星还是两个星,名字上的区别不是最主要的,其实你可以另外定义两个名字,但是别忘了带上*,只是默认情况是*args和**kwargs。

*args

一个星号表示接收任意个参数。调用时,会将实际参数打包成一个元组传入形式参数。如果参数是个列表,会将整个列表当做一个参数传入。例如:


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分别当做参数传递进去,但实际情况是列表本身被当做一个整体给传递进去了。怎么办呢?使用一个星号!

将上述代码第6行改为

func(*li)   #使用*使得列表里面的数据分别传递给位置参数


**kwargs


两个星表示接受键值对的动态参数,数量任意。调用的时候会将实际参数打包成字典。例如:


def func(**kwargs):
for kwg in kwargs:
print(kwg, kwargs[kwg])
func(k1='v1', k2=[0, 1, 2])


运行结果是:


k1 v1
k2 [0, 1, 2]


而如果我们这样传递一个字典dic呢?我们希望字典内的键值对能够像上面一样被逐一传入。


def func(**kwargs):
for kwg in kwargs:
print(kwg, kwargs[kwg])
dic = {
'k1': 'v1',
   'k2': 'v2'}
func(dic)


实际结果却是弹出错误,为什么?

因为这时候,我们其实是把dic当做一个位置参数传递给了func函数。而func函数并不接收任何位置函数。那怎么办呢?使用两个星号!


def func(**kwargs):
for kwg in kwargs:
print(kwg, kwargs[kwg])
dic = {
'k1': 'v1',
   'k2': 'v2'}
func(**dic)


有了前面一个星号的基础,这里我们应该很好理解了。两个星号能将字典内部的键值对逐一传入**kwargs。

“万能”参数

当*args和**kwargs组合起来使用,理论上能接受任何形式和任意数量的参数,在很多代码中我们都能见到这种定义方式。需要注意的是,*args必须出现在**kwargs之前。

 

def func(*args, **kwargs):
for arg in args:
print(arg)
for kwg in kwargs:
print(kwg, kwargs[kwg])
lis = [1, 2, 3]
dic = {
'k1': 'v1',
   'k2': 'v2'}
func(*lis, **dic)


运行结果:


1
2
3
k1 v1
k2 v2

思考

现在你可以说出动态参数*args和**kwargs的区别了吗?

python基础系列目录

基本概念

  1. 常量及变量

  2. 据类型

  3. 数据类型转化


运算符

  1. 运算符

  2. 运算符优先级


数据结构

  1. 列表

  2. 元组

  3. 字典

  4. 序列


控制流

  1. if语句

  2. while语句

  3. for循环

  4. break语句

  5. continue语句


函数

  1. 函数形参

  2. 局部变量

  3. 默认参数值

  4. 动态参数

  5. return语句

  6. 字符串文档

配套教学视频






本系列练习可以配合计算机二级视频一起食用,观看地址为:

https://study.163.com/course/introduction.htm?courseId=1006044085






理解编程语言,探索数据奥秘

每日练习|干货分享|新闻资讯|公益平台。

每天学习一点点,你将会见到全新的自己。

长按识别二维码关注


文章转载自云南高校数据化运营管理工程中心,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论