写在前面
函数是组织好的、可重复使用的,用来实现特定功能的代码段。通过函数的定义与使用能够提高代码的复用性、减少重复代码,8从而让各位码Python的过程变的高级、优雅~
一、函数演示
例如我们上一讲循环(Python循环语句)中提到的打印99乘法表:
for hang in range(1,10):
for lie in range(1,hang+1):
print(f"{lie}*{hang}={lie * hang}", end='\t')
print("")
我们需要改成8X8的乘法表则需要:
for hang in range(1,9):
for lie in range(1,hang+1):
print(f"{lie}*{hang}={lie * hang}", end='\t')
print("")
这样不仅把四行代码全部重复敲了出来,而且明明我们需要的是8X8的乘法表,在写range时却需要写range(1,9),非常的不高效、优雅。在实战过程中重复的代码可能不仅仅是四行,而是成百上千行,这时我们就可以定义一个函数。通过关键字def(definition的缩写)语句来完成函数定义:
def my_mul_tab(my_num):
for hang in range(1,my_num+1):
for lie in range(1,hang+1):
print(f"{lie}*{hang}={lie * hang}", end='\t')
print("")
这时,我们可以仅用一行代码就输出对应数字的乘法表:
my_mul_tab(8)
并且换成其它数字也依旧可以使用:
二、函数的定义方式
上面的函数定义我们没有设置返回值而是直接将结果print出来,需要接受返回值的标准函数定义格式为:
def 函数名(形式参数):
函数体
return 返回值
上述形式参数可以不止一个,比如这里我们定义一个用于求和并返回结果提示语的计算器,有一点智障,其实一个加号就能搞定,但是给大家演示一下定义并使用函数的过程:
def my_add(my_num1,my_num2):
sum_num = f"{my_num1}+{my_num2}的结果是:{my_num1 + my_num2}"
return sum_num
myresult = my_add(1,5)
print(myresult)
是可以直接输入求和的结果的:
三、函数返回值
这个内容我们在上文中已经使用到了,即关键字return能够将函数运行过程中的一个变量作为结果传出,这也就是为什么我们能够用myresult这个变量去接受求和的结果,不过需要注意的是函数中return后的代码无法执行(有点类似于continue后的语句)。
def my_add(my_num1,my_num2):
sum_num = f"{my_num1}+{my_num2}的结果是:{my_num1 + my_num2}"
return sum_num
print("求和完成")
myresult = my_add(1,5)
print(myresult)
例如,这里return下一行的"求和完成"字符并没有被执行并输出
如果不通过return返回值,则函数自动返回None(在条件语句中可以等同于False)
def my_add(my_num1,my_num2):
sum_num = f"{my_num1}+{my_num2}的结果是:{my_num1 + my_num2}"
myresult = my_add(1,5)
print(f"函数的返回值为:{myresult}")
print(f"函数的返回值类型为:{type(myresult)}")
显然,这样是无法得到计算结果的,我们来看一下None的返回结果与类型:
四、函数说明文档
其实就是在函数中添加一段多行注释,例如对于上面函数来说,可以改成:
def my_add(my_num1,my_num2):
"""
my_add函数可以接受两个参数,这两个参数均为数字,运行此函数可以将两数相加
:param my_num1: 形参中的数字1
:param my_num2: 形参中的数字2
:return my_num1与my_num2相加的结果
"""
sum_num = f"{my_num1}+{my_num2}的结果是:{my_num1 + my_num2}"
return sum_num
myresult = my_add(1,5)
print(myresult)
这时,神奇的事情就发生了,当你的鼠标悬停在"my_add"这个函数上时,会自动弹出一个方框,其中以标准格式展示了此函数的帮助文档。
五、局部变量与全局变量
局部变量仅在函数内生效,全局变量可以在脚本中定义该变量后的任意位置生效,例如,下面的modify_2()虽然可以在函数内容修改temp_var的值,但在全局变量的print()中返回的依旧是代码开头全局变量的值。
temp_var = "我是一个全局变量"
def modify_1():
print(temp_var)
def modify_2():
temp_var = "我是一个临时变量"
print(temp_var)
modify_1()
modify_2()
print(temp_var)
如何解决这一问题呢,只需要在定义函数时用关键字global声明该变量为全局变量:
temp_var = "我是一个全局变量"
def modify_1():
print(temp_var)
def modify_2():
global temp_var
temp_var = "我是一个临时变量"
print(temp_var)
modify_1()
modify_2()
print(temp_var)
这时modify_2()返回的则是修改后的值
六、方法
函数是一个能提供特定功能呢的封装好的代码单元。而在Python
中,如果将函数定义为class
(类)的成员,那么函数会称之为方法。方法的定义方式为:
class myclass:
def add(x, y):
return x + y
# 那么使用起来就是: 类名.函数名()
myclass.add(1,2)
# 方法的其它用法均与函数类似
## 3
往期回顾
如何联系我们
公众号后台消息更新不及时,超过48h便不允许回复读者消息,这里给大家留一下领取资料、免费服务器(有root权限的共享服务器,注册即送200¥)的微信号,方便各位随时交流、提建议(科研任务繁重,回复不及时请见谅)。此外呼声一直很高的交流群也建好了,欢迎大家入群讨论:永久免费的千人生信、科研交流群
大家可以阅读完这几篇之后添加
给生信入门初学者的小贴士
如何搜索公众号过往发布内容