python学习第三周之默认参数与默认参数组

1.定义一个函数,该函数有两个形参,将形参y赋值为2,则y为默认参数

def test(x,y=2):
    print(x)
    print(y)
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

调用该函数时,可以只为x赋值,test(1),此时输出x,y的值为1,2;也可以给x,y均赋值1,3,即test(1,3),此时输出结果1,3.

由此可以看出默认参数的特点,在调用函数的时候,默认参数的值是非必须传递的;

鉴于默认参数的该特点,有两个用途:(1)默认安装值,某个软件的默认安装位置;

                                                             (2)连接数据库的端口号   def conn(host,port=3306):pass

2.默认参数组

(1)在实参数据不固定的时候,对于形参的定义:*args,可以接受多个实参,将多个实参放入一个元组中,*代表args接收的参数个数不固定,args是变量名

但是要注意:*args接收的是n个位置参数,转换成元组的形式

def test(*args):   # *代表args接收的参数个数不固定,args是变量名
    print(args)
test(1,2,3,4,5)    #也可以写为test(*[1,2,3,4,5])  *args=*[1,2,3,4,5],即args=tuple[1,2,3,4,5]
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

输出结果以元组的形式输出:(1, 2, 3, 4, 5)

(2)也可以将形式参数与默认参数组结合在一起使用:

def test1(x,*args):
    print(x)
    print(args)
test1(1,2,3,4,5,6,7)   #1会传给x,其余的值会传递给args
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

在以上代码中,将1赋予形参x,将(2,3,4,5,6,7)以元组的形式赋予args,所以输出结果为:

1
(2, 3, 4, 5, 6, 7)

3.将参数以字典的形式传递,使用**kwargs,接收N个 关键字 参数转换成字典的方式

(1)

def test2(**kwargs):
    print(kwargs)
    print(kwargs['name'])
    print(kwargs['age'])
test2(name='wu',age=18,sex="F")  #name为key,wu为name的value
#也可以这样写:test2(**{'name':'xiao','age':20})
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

输出结果以字典的方式呈现:

{'name': 'wu', 'age': 18, 'sex': 'F'}
wu
18

(2)将形参与字典结合起来:

def test3(name,**kwargs):
    print(name)
    print(kwargs)
test3('wu',age=18,sex='m')
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

将wu赋予name,将age,sex以元组形式赋予kwargs,输出结果为:

wu
{'age': 18, 'sex': 'm'}

4.将形参、默认参数与字典相结合起来使用:

def test4(name,age=18,**kwargs):  #参数组放在后面
    print(name)
    print(age)
    print(kwargs)
test4('wu',1,sex='m')  #给默认参数age赋值,可以直接当作位置参数赋值:test4('wu',1,sex='m');也可以当作关键字来赋值:test4('wu',age=1,sex='m')
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

要注意的是,在定义函数的时候,参数组放在最后面;在调用函数,给参数赋值的时候,可以将默认参数当成位置参数或关键字来赋值,均可以。

在以上代码中,将wu赋予了name,将1赋给了age,将sex赋给了kwargs,输出结果如下:

wu
1
{'sex': 'm'}

5.将形参、默认参数、默认参数组与元组结合起来:

def test5(name,age=18,*args,**kwargs):
    print(name)
    print(age)
    print(args)
    print(kwargs)
test5('wu',age=1,sex='m',hobby='draw')   #*args接收的是n个位置参数,转换成元组的形式
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 

以上代码中将wu赋予name,将1赋予age,由于接收的是为位置参数,所以在此处输出为空,将sex、hobby的值赋予kwargs。

输出结果为:

wu
1
()
{'sex': 'm', 'hobby': 'draw'}

 

 

6.函数的定义与调用顺序,要先对函数定义,然后才可以对函数调用

def test5(name,age=18,*args,**kwargs):
    print(name)
    print(age)
    print(args)
    print(kwargs)
    logger("TEST5")
def logger(source):
    print("from %s" % source)
test5('wu',age=1,sex='m',hobby='draw')

如以上程序,定义了两个函数test5与logger,并且在test5中调用了logger函数,如果此时先调用test5函数,然后定义logger函数,会报错;所以我们应该先定义logger函数,然后在调用test5函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值