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 ​

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种灵活而简洁的编程语言,其自定义函数非常强大。而在Python中,函数参数的传递方式也是非常灵活的,可以通过传递不同类型的参数来满足各种不同的需求。本文将介绍Python中的参数传递方法,并以代码示例来说明。 1. 位置参数 位置参数是默认的参数传递方式。当我们定义一个函数时,在函数的括号内定义的参数即为位置参数。调用函数时,传递的参数与定义的顺序对应。 我们来看一个求和函数的例子: ``` def sum(a, b): return a + b print(sum(3, 4)) ``` 在这个例子中,函数接受两个位置参数a和b,分别为3和4,返回它们的和7。 2. 关键字参数 关键字参数是通过指定参数名称来传递的,它不需要按照位置的顺序传递所有参数。 我们还是以求和函数为例,只不过这次我们使用关键字参数: ``` def sum(a, b): return a + b print(sum(a=3, b=4)) ``` 在这个例子中,我们使用了关键字参数a=3和b=4。函数会根据指定的参数名称来计算它们的和。这样的话,即使我们颠倒顺序给定参数的值,我们还是能够正确计算和。 3. 默认参数 默认参数是在定义函数时指定的一个固定的值,在调用函数时可以不传递该参数值。如果调用函数时没有传递该参数,则使用默认值。 以下是一个带有默认参数的函数示例: ``` def greeting(name="World"): print("Hello, " + name) greeting("John") greeting() ``` 在这个例子中,函数接受一个默认参数name="World",如果调用时没有传递参数,则默认使用"World"。第一个调用传递了非默认参数"John",因此输出为"Hello, John"。第二个调用没有传递参数,因此使用默认值 "World",输出为"Hello, World"。 4. 可变参数 有时候我们需要传递不确定数量的参数。这时可以使用可变参数。Python中有两种可变参数: * *args:可以接受多个位置参数,以元组(tuple)的形式传递。 * **kwargs:可以接受多个关键字参数,以字典(dictionary)的形式传递。 以下是一个带有可变参数的函数示例: ``` def calculate(*args): result = 0 for n in args: result += n return result print(calculate(1, 2, 3)) print(calculate(1, 2, 3, 4, 5, 6)) ``` 在这个例子中,函数calculate接受可变位置参数,将它们相加并返回结果。第一个调用传递了3个位置参数,因此结果为6。第二个调用传递了6个位置参数,因此结果为21。 5. 其他注意事项 * 如果可变参数和其他参数同时使用,可变参数要放到最后。 * 可以组合多种参数传递方式,比如位置参数、关键字参数和可变参数。 总而言之,Python自定义函数的参数传递非常灵活多变,能够满足不同的需求。掌握这些参数传递方式,可以更加高效地编写Python程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值