Day3-Python基础3--默认参数和参数组

一、默认参数

先看下下面的代码:

 1 def stu_register(name,age,country,course):
 2     print("----注册学生信息------")
 3     print("姓名:",name)
 4     print("age:",age)
 5     print("国籍:",country)
 6     print("课程:",course)
 7  
 8 stu_register("王山炮",22,"CN","python_devops")
 9 stu_register("张叫春",21,"CN","linux")
10 stu_register("刘老根",25,"CN","linux")

发现 country 这个参数 基本都 是"CN", 就像我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国, 这就是通过默认参数实现的,把country变成默认参数非常简单。

1 def stu_register(name,age,course,country="CN"):

这样,这个参数在调用时不指定,那默认就是CN,指定了的话,就用你指定的值。这里的country就是个默认参数。

二、参数组

之前我们传参数,都是传一个固定参数,不能多也不能少,但是如果说我们需要非固定参数怎么办呢?好吧,于是就衍生出了,以下两种传参方式:

  1. 非固定位置参数传参(*args)
  2. 非固定关键字传参(**kwargs)

下面我们就来说说这两种方式传参:

1、非固定位置参数传参

1)功能:接收N个位置参数,转换成元组的形式。

2)定义,代码如下:

1 def test(*args): #形参必须以*开头,args参数名随便定义,但是最好按规范来,定义成args
2     print(args)
3  
4 test(1,2,3,4,5) #输入多个位置参数
5  
6 #输出
7 (1, 2, 3, 4, 5)  #多个参数转换成元组

3)传入列表

 1 def test(*args):
 2     print(args)
 3  
 4 print("-------data1-----")
 5 test() #如果什么都不传入的话,则输出空元组
 6 print("-------data2-----")
 7 test(*[1,2,3,4,5])  #如果在传入的列表的前面加*,输出的args = tuple([1,2,3,4,5])
 8 print("-------data3-----")
 9 test([1,2,3,4,5])  #如果再传入的列表前不加*,则列表被当做单个位置参数,所以输出的结果是元组中的一个元素
10  
11 #输出
12 -------data1-----
13 ()
14 -------data2-----
15 (1, 2, 3, 4, 5)
16 -------data3-----
17 ([1, 2, 3, 4, 5],)

4)位置参数和非固定位置参数

1 def test(x,*args):
2     print(x)  #位置参数
3     print(args)  #非固定参数
4  
5 test(1,2,3,4,5,6)
6  
7 #输出
8 1
9 (2, 3, 4, 5, 6) 

第1个参数x,被当做位置参数,剩下的被当做非固定位置参数

5)关键字和非固定位置参数

 1 def test(x,*args):
 2     print(x)
 3     print(args)
 4  
 5 test(x=1,2,3,4,5,6)
 6  
 7 #输出
 8   File "D:/PycharmProjects/pyhomework/day3/非固定参数/非关键字参数.py", line 21
 9     test(x=1,2,3,4,5,6)
10             ^
11 SyntaxError: positional argument follows keyword argument #位置参数在关键字参数后面

因为x=1是关键字参数,*args是位置参数,而关键字参数不能再位置参数前面的。

2、非固定关键字传参(**kwargs)

1)功能:把N个关键字参数,转换成字典形式

2)定义:

1 def test(**kwargs): #形参必须以**开头,kwargs参数名随便定义,但是      最好按规范来,定义成kwargs
2     print(kwargs)
3  
4 test(name="maqing",age=27) #传入多个关键字参数
5  
6 #输出
7 {'name': 'maqing', 'age': 27} #多个关键字参数转换成字典 

3)传入字典:

1 def test(**kwargs): #形参必须以**开头,kwargs参数名随便定义,但是最好按规范来,定义成kwargs
2  print(kwargs)
3  
4 test(**{"name":"maqing","age":27}) #传入多个关键字参数
5  
6 #输出
7 {'name': 'maqing', 'age': 27} #多个关键字参数转换成字典 

要传入字典,在传入关键字参数的前面要加上**

4)配合位置参数:

 1 def test(name,**kwargs):
 2     print(name)
 3     print(kwargs)
 4  
 5 print("------data1-----")
 6 test("maqing") #1个位置参数
 7 print("------data2------")
 8 test("maqing",age=27,sex="M") #1个位置参数,两个关键字参数
 9 print("------data3------")
10 test(name="maqing",age=27,sex="M") #3个关键字参数
11  
12 #输出
13 ------data1-----
14 maqing #输出1个位置参数
15 {}  #没有输入关键字参数,所以输出空字典
16 ------data2------
17 maqing  #第1个位置参数
18 {'age': 27, 'sex': 'M'} #剩下关键字参数,转换成1个字典
19 ------data3------
20 maqing  #第1个关键字参数
21 {'age': 27, 'sex': 'M'} #剩下的关键字参数,转换成1个字典

5)位置参数、关键字和非固定关键字参数

 1 def test(name,age=27,**kwargs):
 2     print(name)
 3     print(age)
 4     print(kwargs)
 5  
 6 print("----------data1--------")
 7 test("maqing",sex='M',hobby='tesl')
 8 print("----------data2--------")
 9 test("maqing",27,sex='M',hobby='tesl')
10 print("----------data3--------")
11 test("maqing",sex='M',hobby='tesl',age=27) #age关键字参数放到最后,也可以的
12  
13 #输出
14 ----------data1--------
15 maqing
16 27   #不传,显示默认参数
17 {'sex': 'M', 'hobby': 'tesl'}
18 ----------data2--------
19 maqing
20 27  #传位置参数
21 {'sex': 'M', 'hobby': 'tesl'}
22 ----------data3--------
23 maqing
24 27   #关键字参数,放在前后并没有影响
25 {'sex': 'M', 'hobby': 'tesl'}

6)位置参数、关键字参数、非固定位置参数和非固定关键字参数

 1 def test(name,age=27,*args,**kwargs):
 2     print(name)
 3     print(age)
 4     print(args)
 5     print(kwargs)
 6      
 7 print("-------第1种传参--------")
 8 test("maqing",20,1,2,3,4,sex="m",hobby="tesla")
 9 print("-------第2种传参--------")
10 test("maqing",20,*[1,2,3,4],**{'sex':"m",'hobby':"tesla"})
11  
12 #输出
13 -------第1种传参--------
14 maqing #传name位置参数
15 20   #给age传位置参数
16 (1, 2, 3, 4)  #非固定位置参数,以转换成元组
17 {'sex': 'm', 'hobby': 'tesla'}  # 非固定关键字参数,转换成字典
18 -------第2种传参---------
19 maqing
20 20
21 (1, 2, 3, 4)  #以列表的形式传入,在列表前加*
22 {'sex': 'm', 'hobby': 'tesla'} #以字典的形式传入,在字典前加**

 

 

 

 

转载于:https://www.cnblogs.com/bldly1989/p/6558101.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值