写在前面
此前我们已经对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 + value2
return temp_add
# 求积子函数
def my_mult(value1,value2):
temp_mult = value1 * value2
return 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_result
my_func(sub_func = lambda value1, value2: value1+value2,
value1 = 2, value2 = 5)
#可以看到my_func成功执行了匿名函数的功能
## 7
往期回顾
如何联系我们
公众号后台消息更新不及时,超过48h便不允许回复读者消息,这里给大家留一下领取资料、免费服务器(有root权限的共享服务器,注册即送200¥)的微信号,方便各位随时交流、提建议(科研任务繁重,回复不及时请见谅)。此外呼声一直很高的交流群也建好了,欢迎大家入群讨论:永久免费的千人生信、科研交流群
大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
如何搜索公众号过往发布内容
网友评论