12.多变的函数参数

1.定义函数的时候,吧函数的参数和参数的位置确定下来,加上函数体及return返回值,函数定义就完成了。函数内部复杂的逻辑被封装起来,调用者只需要知道需要传哪些参数,产生什么返回值就可以了。

2.python定义函数参数的灵活性非常大,有必选参数、默认参数、可变参数、关键字参数、参数组合等形式出现

3.位置参数:按照位置排列好的参数

4.默认参数:函数的某一个参数比较固定,我们可以为其设置默认参数。好处是减少了函数调用的复杂度。在需要复杂的函数调用时,可以选择传入参数修改默认的参数值。需要注意的一点是,默认参数必须是不变的量,否则容易踩坑!

5.可变参数:顾名思义是函数参数个数可以 发生变化的函数,可变参数定义为在参数前边加一个*号

def add1(*values):

    num=0

    for data in values:

        num+=data

    return num

print(add1(1,2,3))

6 ​

可变参数的函数可以使用list或tuple作为参数传入,但它和传入list或tuple的区别是函数调用的时候,具有可变参数的函数可以接受任意多个参数,而接受list或tuple的函数只接受传入list或tuple,但是list或tuple在传给可变参数的函数时,可以在list或tuple前面加*,表示将list或tuple中的每一个数以可变参的形式传递给函数

list1=[3,4,5,6,7]

print(add1(list1))

TypeError: unsupported operand type(s) for +=: 'int' and 'list'

list1=[3,4,5,6,7]

print(add1(*list1))

25 ​

6.关键字参数:含参数名的参数,这些参数会被组装成一个dict,除了正常的必传参数为,还可以传入任意多的带有名字的参数。好处是在调用函数的时候可以携带任意的额外信息,扩展函数的功能

def student(name,age,**kv):

    print(type(kv))

    print('name is %s,age is %d,and other:%s'% (name,age,kv))



print(student('liko',32,height=170,weight=60))



print(student('liko',32))

<class 'dict'>

name is liko,age is 32,and other:{'weight': 60, 'height': 170}

<class 'dict'>

name is liko,age is 32,and other:{}

7.命名关键字参数:关键字参数可以传入任意多的带有名字的参数,有时候我们需要限制传入参数的名字,那就可以使用命名关键字参数。命名关键字函数使用*号分隔

在带有关键字参数的函数内部,通过in关键字判断关键字参数中都包含哪些参数

def student(name,age,**kv):

    print(type(kv))

    if 'gender' in kv:

        pass

    if 'id' in kv:

        pass

    else:

        print('name is %s,age is %d,and other:%s'% (name,age,kv))



print(student('liko',32,height=170,weight=60,id=12345))

print(student('liko',32,height=170,weight=60))

<class 'dict'>

 

<class 'dict'>

name is liko,age is 32,and other:{'weight': 60, 'height': 170}

命名关键字参数:在调用命名关键字函数的时候必须指定参数的名字 ,并且参数必须和命名关键字相同,否则报错

def student(name,age,*,height,weight):

        print('name is %s,age is %d,height is %d,weight is %d' % (name,age,height,weight))



print(student('liko',32,height=170,weight=60))

print(student('liko',32,id=125,weight=60))

name is liko,age is 32,height is 170,weight is 60

Traceback (most recent call last):

None

    print(student('liko',32,id=125,weight=60))

TypeError: student() got an unexpected keyword argument 'id' ​

如果已经有了一个可变的参数,可以省略*

def student(name,age,*args,height,weight):

        print(name,age,args,height,weight)



print(student('liko',32,'i love python',height=170,weight=60))

liko 32 ('i love python',) 170 60 ​

为命名关键字参数指定默认值

def student(name,age,*args,height,weight=65):

        print(name,age,args,height,weight)



print(student('liko',32,'i love python',height=170))

liko 32 ('i love python',) 170 65 ​

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值