python中可变参数*args传入函数时的存储方式为,Python函数可变参数(*args,**kwargs)详解...

Python 在定义函数时也可以使用可变参数,即允许定义参数个数可变的函数。这样当调用该函数时,可以向其传入任意多个参数。可变参数,又称不定长参数,即传入函数中的实际参数可以是任意多个。Python 定义可变参数,主要有以下 2 种形式。

1) 可变参数:形参前添加一个 '*'

此种形式的语法格式如下所示:

*args

args 表示创建一个名为 args 的空元组,该元组可接受任意多个外界传入的非关键字实参。下面程序演示了如何定义一个参数可变的函数:# 定义了支持参数收集的函数def dis_str(home, *str) :print(home)# 输出str元组中的元素print("str=",str)for s in str :print(s)#可传入任何多个参数dis_str("http://c.biancheng.net","http://c.biancheng.net/python/","http://c.biancheng.net/shell/")

程序执行结果为:

http://c.biancheng.net

str= ('http://c.biancheng.net/python/', 'http://c.biancheng.net/shell/')

http://c.biancheng.net/python/

http://c.biancheng.net/shell/

上面程序中,dis_str() 函数的最后一个参数就是 str 元组,这样在调用该函数时,除了前面位置参数接收对应位置的实参外,其它非关键字参数都会由 str 元组接收。当然,可变参数并不一定必须为最后一个函数参数,例如修改 dis_str() 函数为:# 定义了支持参数收集的函数def dis_str(*str,home) :print(home)# 输出str元组中的元素print("str=",str)for s in str :print(s)dis_str("http://c.biancheng.net","http://c.biancheng.net/python/",home="http://c.biancheng.net/shell/")

可以看到,str 可变参数作为 dis_str() 函数的第一个参数。但需要注意的是,在调用该函数时,必须以关键字参数的形式给普通参数传值,否则 Python 解释器会把所有参数都优先传给可变参数,如果普通参数没有默认值,就会报错。也就是说,下面代码调用上面的 dia_str() 函数,是不对的:dis_str("http://c.biancheng.net","http://c.biancheng.net/python/","http://c.biancheng.net/shell/")

Python 解释器会提供如下报错信息:

TypeError: dis_str() missing 1 required keyword-only argument: 'home'

翻译过来就是我们没有给 home 参数传值。当然,如果 home 参数有默认参数,则此调用方式是可行的。

2) 可变参数:形参前添加两个'*'

这种形式的语法格式如下:

**kwargs

**kwargs 表示创建一个名为 kwargs 的空字典,该字典可以接收任意多个以关键字参数赋值的实际参数。例如如下代码:

# 定义了支持参数收集的函数def dis_str(home,*str,**course) :print(home)print(str)print(course)#调用函数dis_str("C语言中文网",\"http://c.biancheng.net",\"http://c.biancheng.net/python/",\shell教程="http://c.biancheng.net/shell/",\go教程="http://c.biancheng.net/golang/",\java教程="http://c.biancheng.net/java/")

程序输出结果为:

C语言中文网

('http://c.biancheng.net', 'http://c.biancheng.net/python/')

{'shell教程': 'http://c.biancheng.net/shell/', 'go教程': 'http://c.biancheng.net/golang/', 'java教程': 'http://c.biancheng.net/java/'}

上面程序在调用 dis_str() 函数时,第 1 个参数传递给 home 参数,第 2、3 个非关键字参数传递给 str 元组,最后 2 个关键字参数将由 course 字典接收。注意,*args 可变参数的值默认是空元组,**kwargs 可变参数的值默认是空字典。因此,在调用具有可变参数的函数时,不一定非要给它们传值。以调用 dis_str(home, *str, **course) 为例,下面的调用方式也是正确的:dis_str(home="http://c.biancheng.net/shell/")

程序执行结果为:

http://c.biancheng.net/shell/

()

{}

2_16148109281084.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值