1.6函数进阶

函数多返回值

如果一个函数需要拥有多个返回值,使用方法如下:

基础语法:

def my_function() :
()()()()return x,y

使用样例:

def my_function() :
    return 1,2

x,y =my_function()
print(f"x的值为:{x},y的值为:{y}")

输出结果:
在这里插入图片描述

注意事项:

  1. 按照返回值的顺序,写对应顺序的多个变量接受即可。
  2. 变量之间用逗号分隔开。
  3. 支持不同类型的数据return。

函数多种传参方式

在使用方式上有所不同,我们可以把传入的参数分成:位置参数 、关键字参数 、不定长参数 、缺省参数。

位置参数

位置参数: 调用函数时,根据函数定义的参数位置来传递参数。

使用样例:

def my_function(name,age,gender) :
    print(f"您的名字是{name},年龄是{age},性别是{gender}")

my_function("张三",18,"男")

输出结果:
在这里插入图片描述
值得注意的是:传递的参数和定义和参数顺序以及个数都应一致,相一一对应。

关键字参数

关键字参数:函数调用的时候通过“关键字=值”的形式进行传参。

使用样例:

def my_function(name,age,gender) :
    print(f"您的名字是{name},年龄是{age},性别是{gender}")

my_function(name="张三",age=18,gender="男")
my_function("张三",age=18,gender="男")
my_function("张三",gender="男",age=18)

输出结果:
在这里插入图片描述
注意事项:

  1. 函数在进行传参的时候,如果使用关键字传参,可以不按照顺序传参。
  2. 关键字传参可以和位置传参混用,但是如果混用就需要将位置传参写在前方,不能写在关键字传参的后面。但是位置参数会先锁定该位置的参数。

缺省参数

缺省参数:也叫默认参数,在定义函数的时候,可以给出其默认值,调用的时候可以不传入该值。但值得注意的是缺省参数应该出现在函数的传参列表的最末尾

使用样例:

def my_function(name,age,gender="男") :
    print(f"您的名字是{name},年龄是{age},性别是{gender}")

my_function("张三",age=18)
my_function("赵四",age=18,gender="女")

输出结果:
在这里插入图片描述
注意事项:

函数调用的时候,如果是缺省参数传值,即调用默认传入参数,否则调用传入参数。

不定长参数

不定长参数:也叫可变参数,用于不确定调用函数的时候会传递多少个参数(甚至传0个参数)的场景。

不定长参数的类型:位置传参,关键字传参。

第一种样例:

def my_function(*p) :
    print(p)
    print(p[0])
    print(p.index(18))

my_function("张三",18,"男")

输出结果:
在这里插入图片描述

在传入参数的前面加上一个*负号。可以看出传入的就是我们输入的一个元组tuple,在函数调用的过程中,我们也可以结合元组的相关函数进行使用。这传入的顺序也就相当于位置传参。

第二种样例:

def my_function(**p) :
    print(p)
    print(p['name']) # 切勿写成p[name]
    print(p.clear())
    print(p)

my_function(name = "张三",age = 18,gender = "男")

输出结果:
在这里插入图片描述
需要使用的是**,传入的就是字典,然后我们也可以使用相关的字典函数,不过使用的次数也十分少,还有p[‘name’]切勿写出p[name],name相当于关键字key,在这个过程中,所有的“键=值”都会被字典接受,相当于新增字典,如果出现重复关键字,也相当于覆盖(有的编译器直接报错),这种过程也是关键字传参。

匿名函数

函数作为参数传递

样例分析:

flag = 1
def my_function(fuction) :
    result = fuction(1,2)
    print(result)
def fuc1 (data1,data2) :
    return data1+data2
def fun2 (data1,data2) :
    return data1-data2
if flag==1 :
    my_function(fuc1)
else :
    my_function(fun2)

输出结果:
在这里插入图片描述

实际上主要需要我们理解的就是这种行为,为什么这么使用,我使用了上面的一串代码,我们从中可以看出,有时候我们函数中调用的其他函数的类型也不固定,这就需要我们甄别,使用这种方法的大多数情形都是这样。

这种过程传入的是计算逻辑,而非计算数据。

lambda匿名函数

函数的定义中:

  1. def是关键字,定义带有名字的函数。这个有名字的函数可以无限使用。
  2. lambda也是关键字,定义的是没有名字的函数。只能使用一次。

语法:

lambda 函数传入参数 : 函数体(仅能一行)

  1. lambda是关键字,声明定义的是匿名函数。
  2. 传入参数代表这个匿名函数的形式参数
  3. 函数体就是函数执行的逻辑,值得注意的是,这个lambda函数体执行的功能是不带return的return一行函数,记得只能写一行。

样例

flag = 1
def my_function(fuction) :
    result = fuction(1,2)
    print(result)
if flag==1 :
    my_function(lambda data1,data2 :data1+data2) # 参数不需要括号包围
else :
    my_function(lambda data1,data2 :data1-data2)

输出结果:
在这里插入图片描述
实际上就是在传入参数的时候,把一个函数直接传入。但值得注意的是传入参数和普通函数的传入参数不一样,不需要括号包括。相同的也可以使用元组进行lambda的使用,比如my_function(lambda *p : p[0]+p[1])可以进行调换文中的相应位置,读者可以自己手动调试一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值