首页 技术 正文
技术 2022年11月16日
0 收藏 770 点赞 2,316 浏览 2419 个字

转载:https://www.cnblogs.com/xuyuanyuan123/p/6674645.html

多个实参,放到一个元组里面,以*开头,可以传多个参数;**是形参中按照关键字传值把多余的传值以字典的方式呈现

*args:(表示的就是将实参中按照位置传值,多出来的值都给args,且以元祖的方式呈现)

示例:

12345 def foo(x,*args):    print(x)    print(args) foo(1,2,3,4,5)#其中的2,3,4,5都给了args

执行结果是:

12 1(2345)

当args与位置参数和默认参数混用的情况下:(注意三者的顺序)

示例一、(三者顺序是:位置参数、默认参数、*args)

123456 def foo(x,y=1,*args):    print(x)    print(y)    print(args) foo(1,2,3,4,5)#其中的x为1,y=1的值被2重置了,3,4,5都给了args

 执行结果是:

123 12(345)

 示例二、(三者顺序是:位置参数、*args、默认参数)

123456 def foo(x,*args,y=1):    print(x)    print(args)    print(y) foo(1,2,3,4,5)#其中的x为1,2,3,4,5都给了args,y按照默认参数依旧为1

 执行结果是:

123 1(2345)1

其中关于*,可以从2个角度来看(需要拆分来看):

1、从形参的角度来看:

示例:

123 def foo(*args):#其实这一操作相当于def foo(a,b,c,d,e):    print(args)foo(1,2,3,4,5)#其中的1,2,3,4,5都按照位置传值分别传给了a,b,c,d,e

执行结果是:

1 (12345)

2、从实参的角度来看:

示例:

123456 def foo(x,y,z):    print(x)    print(y)    print(z)     foo(*(1,2,3))#其中的*(1,2,3)拆开来看就是:foo(1,2,3),都按照位置传值分别传给了x,y,z

执行结果是:

123 123  

——————————————————————————————————————————————————————————————————————————————————————

**kwargs:(表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现)

示例:

1234 def foo(x,**kwargs):    print(x)    print(kwargs)foo(1,y=1,a=2,b=3,c=4)#将y=1,a=2,b=3,c=4以字典的方式给了kwargs

执行结果是:

12 1{'y'1'a'2'b'3'c'4}

关于**kwargs与位置参数、*args、默认参数混着用的问题:(注意顺序)

位置参数、*args、**kwargs三者的顺序必须是位置参数、*args、**kwargs,不然就会报错:

示例:

12345 def foo(x,*args,**kwargs):    print(x)    print(args)    print(kwargs)foo(1,2,3,4,y=1,a=2,b=3,c=4)#将1传给了x,将2,3,4以元组方式传给了args,y=1,a=2,b=3,c=4以字典的方式给了kwargs

执行结果是:

123 1(234){'y'1'a'2'b'3'c'4}

错误示例:(由于顺序错误)

12345 def foo(x,**kwargs,*args):    print(x)    print(args)    print(kwargs)foo(1,y=1,a=2,b=3,c=4,2,3,4)

执行结果就会报错:

1 SyntaxError: invalid syntax

位置参数、默认参数、**kwargs三者的顺序必须是位置参数、默认参数、**kwargs,不然就会报错:

示例:

12345 def foo(x,y=1,**kwargs):    print(x)    print(y)    print(kwargs)foo(1,a=2,b=3,c=4)#将1按照位置传值给x,y按照默认参数为1,a=2,b=3,c=4以字典的方式给了kwargs

执行结果是:

123 11{'a'2'b'3'c'4}

  

其中关于**,可以从2个角度来看(需要拆分来看):

1、从形参的角度来看:

示例:

123 def foo(**kwargs):#其实就是相当于def foo(y,a,b,c)    print(kwargs)foo(y=1,a=2,b=3,c=4)

执行结果是:

1 {'y'1'a'2'b'3'c'4}

2、从实参的角度来看:

示例一:

123456 def foo(a,b,c,d):    print(a)    print(b)    print(c)    print(d)foo(**{"a":2,"b":3,"c":4,"d":5})#**{"a":2,"b":3,"c":4,"d":5}是将字典里的每个值按照关键字传值的方式传给a,b,c,d

执行结果是:

1234 2345

示例二:

123456 def foo(a,b,c,d=1):    print(a)    print(b)    print(c)    print(d)foo(**{"a":2,"b":3,"c":4})#**{"a":2,"b":3,"c":4}是将字典里的每个值按照关键字传值的方式传给a,b,c;d依旧按照默认参数

执行结果是:

1234 2341
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,985
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,501
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,345
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,128
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,763
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,840