当前位置:首页>python>Python函数进阶

Python函数进阶

  • 2026-10-21 13:27:50
Python函数进阶

写在前面

此前我们已经对Python函数进行了初步介绍(Python函数与方法),这里我们再补充一些内容,能够帮助大家构建更复杂的函数。

一、多返回值函数

在特定场景与功能下的函数需要返回多个结果变量的值,可以如下定义:

def multi_return():return'Value1','Value2','Value3'multi_return()
## ('Value1', 'Value2', 'Value3')
# 返回值也可以用多个变量去接收my_x, my_y, my_z = multi_return()print(my_x)# 变量值会被分别接收
## Value1

二、参数

10.2.1 关键字参数

我们之前在第八讲中所写的函数都需要参数有一个对应的顺序(即位置参数),如果通过关键字参数以键=值的形式让关键字与参数一一对应,这样即使参数的顺序打乱,也不会相互混淆。

def my_return(value1,value2):print(f"第一个参数{value1}比第二个参数{value2}要小")
# 正常使用:my_return(1,2)
## 第一个参数1比第二个参数2要小
# 倒过来使用就不对了my_return(2,1)
## 第一个参数2比第二个参数1要小
# 通过关键字参数的使用,可以保证输入顺序打乱的同时结果不乱my_return(value2 =2,value1 =1)
## 第一个参数1比第二个参数2要小

10.2.2 缺省参数

即函数中的一些参数可以具有预设值,当用户没有给定值时,该参数也有对应值而不会报错

def my_return(value1=1,value2=2,value3=3):print(f"第一个参数为{value1}。第二个参数为{value2}。第三个参数为{value3}")my_return(value1=5) #可以看到我们并没有给函数后面两个参数,但后面两个参数仍可正常输出
## 第一个参数为5。第二个参数为2。第三个参数为3

需要注意的是,缺省参数必须 在定义时放在最后,否则会有如下报错:

def my_return(value1=1,value2=2,value3):print(f"第一个参数为{value1}。第二个参数为{value2}。第三个参数为{value3}")

SyntaxError: unexpected EOF while parsing (, line 1) IndentationError: unexpected indent (, line 1)

10.2.3 不定长参数

这种情况下传入参数的数量不确定,可以用*来代表这类参数:

# 位置不定长参数:def my_return(*my_arg):print(my_arg)my_return("Biomamba")
## ('Biomamba',)
my_return("Biomamba_0","Biomamba_1","Biomamba_2") #可以接受任意长度的参数值
## ('Biomamba_0', 'Biomamba_1', 'Biomamba_2')
mytype =type(my_return("Biomamba_0","Biomamba_1","Biomamba_2"))
## ('Biomamba_0', 'Biomamba_1', 'Biomamba_2')
print(mytype) # 不定长参数返回的数据格式是元组
## <class 'NoneType'>
# 关键字不定长参数:def my_return(**my_arg):return my_arg# 输入时需要关键字与值一一对应print(my_return(my_arg_1 ="Biomamba_0",my_arg_2 ="Biomamba_1",my_arg_3 ="Biomamba_2"))# 返回的数据类型自然也就是字典
## {'my_arg_1': 'Biomamba_0', 'my_arg_2': 'Biomamba_1', 'my_arg_3': 'Biomamba_2'}
my_type =type(my_return(my_arg_1 ="Biomamba_0",my_arg_2 ="Biomamba_1",my_arg_3 ="Biomamba_2"))print(my_type)
## <class 'dict'>

三、匿名函数

10.3.1 将函数作为参数传递

# 定义主函数,其中sub_func为一个子函数def my_func(sub_func,value1,value2):    my_result = sub_func(value1,value2)return my_result# 定义两个子函数# 求和子函数def my_add(value1,value2):    temp_add = value1 + value2return temp_add# 求积子函数def my_mult(value1,value2):    temp_mult = value1 * value2return temp_mult
# 可以看出我们可以通过主函数分别调用两个子函数实现特定功能print(my_func(sub_func = my_add,value1 =2,value2=5))
## 7
print(my_func(sub_func = my_mult,value1 =2,value2=5))
## 10

10.3.2 lambda匿名函数

之前我们对函数的介绍均通过def进行定义,这类函数具有名称,可通过名称重复性使用。而lambda关键字可以定义没有名称的函数,匿名函数只可临时使用一次,定义时可省略return。定义形式为:lambda 传入参数: 函数体(单行代码)

# 定义示例:lambda value1, value2: value1+value2# 只可以写一行
## <function <lambda> at 0x000001AFE8C35400>
# 将其应用于我们上面写的myfunc()中def my_func(sub_func,value1,value2):    my_result = sub_func(value1,value2)return my_resultmy_func(sub_func =lambda value1, value2: value1+value2,       value1 =2, value2 =5)#可以看到my_func成功执行了匿名函数的功能
## 7

往期回顾

生信Python速查手册

Python安装(Windows+Linux)

Python的"Rstudio"——Pycharm

码Python神器:jupyter notebook

一文了解Python基础:字面量、注释、变量、类型、运算符

Python判断语句

Python循环语句

Python函数与方法

一文掌握Python数据容器

如何联系我们

留一个领取资料、开箱即用的单细胞分析镜像的微信号[Biomamba_zhushou],方便各位随时交流。同时我们也构建了交流群矩阵,欢迎大家入群讨论。
大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
没有检索,就没有发言权

已有生信基地联系方式的同学无需重复添加

您点的每个赞和在看,我都认真当成了喜欢

最新文章

随机文章