前言
跟着我的课程学习已经有一段时间了,相信你们会一个疑问?就是课程还有多久才能学习完成?其实现在这个阶段,算是完成了 python 零基础入门的三分之一,而且这个阶段能坚持下来的,证明你们都有一股想改变自己的冲动,是的,学习编程本身就很需要耐心的,但是坚持下来了,以后就会变得美好了,好的,上面都是题外话来的,那么我们就开始今天的课程吧!
什么是函数
函数是执行特定任务的一段代码,程序通过将一段代码定义成函数,并为该函数指定一个函数名,这样即可在需要的时候多次调用这段代码。
是不是没有明白上面表达的意思,没有关系,我给你们举个例:我们每次点开微信的朋友圈的时候,是不是朋友圈的内容都会自动刷新一次,将微信好友的更新动态,呈现到你的面前,那么 “朋友圈内容“就是一段调用数据库数据,封装在 函数内的 代码,那么朋友圈的内容 “自动刷新“ 的 动作就是调用这个函数名,然后每次执行更新的操作,微信就会调用函数名,就可以执行代码更新到朋友圈的动态了。
看到上面的例子后,你们是不是有一个疑问呢?就是我假如我每次更新 朋友圈内容的 时候,都要重新写一次代码吗?其实是不用的,因为如果相同的代码的话,只需要写一次代码就可以了,等到要更新的时候,就直接用函数名去调用就好了。
定义函数和调用函数
在使用函数之前必须先定义函数,定义函数的语法格式如下:
def 函数名(形参列表):
//由零条到多条可执行语句组成的函数
[return [返回值]]
需要注意的:
1、函数名,从语法的角度来看,函数名只要是一个合法的标识符即可;从程序的可读性角度来看,函数名应该由一个或多个有意义的单词连缀而成,每个单词的字母全部小写,单词与单词之间使用下画线分隔
2、形参列表,用于定义该函数可以接收的参数,形参列表由多个形参名组成,多个形参名之间以英文逗号(,)隔开,一旦在定义函数时指定了形参列表,调用该函数时就必须传入对应的参数值,谁调用函数,谁负责为形参赋值。
有形参的,例:
def my_max(x, y):
z = x if x > y else y
return z
a = my_max(8, 6)
print(a)
输出结果:
8
没有形参的,例:
def my_name():
print("你的名字孙悟空")
my_name()
输出结果:
你的名字孙悟空
注意:
在函数体中使用 return 语句可以显示地返回一个值,return 语句返回的值既可以是有值的变量,也可以是一个表达式。
为函数提供文档(假如别人开发的项目,由你来接手,如何快速知道哪些方法怎么用的,这个就可以帮到你了)
我们可以通过 help() 函数查看指定函数的帮助信息
例:
def my_max(x, y):
'''
获取两个值之间较大数的函数
my_max(x, y)
返回x、y两个参数之间较大的那个数
'''
z = x if x > y else y
return z
help(my_max)
print(my_max.__doc__)
输出结果:
Help on function my_max in module __main__:
my_max(x, y)
获取两个值之间较大数的函数
my_max(x, y)
返回x、y两个参数之间较大的那个数
获取两个值之间较大数的函数
my_max(x, y)
返回x、y两个参数之间较大的那个数
多个返回值
如果程序需要有多个返回值,则即可将多个值包装成列表之后返回,也可直接返回多个值,如果python函数直接返回多个值,python会自动将多个返回值封装成元组,例:
def sum_and_avg(list):
sum = 0
count = 0
for e in list:
if isinstance(e, int) or isinstance(e, float):
count += 1
sum += e
return sum, sum / count
mylist = [20, 15, 2.8, 'a', 35, 5.9, -1.8]
tp =sum_and_avg(mylist)
print(tp)
输出结果:
(76.9, 12.816666666666668)
递归函数(这个阶段,了解一下即可)
在一个函数体内调用它自身,被称为函数递归,函数递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。例:
def fn(n):
if n == 0 :
return 1
elif n == 1 :
return 4
else :
return 2 * fn(n - 1) + fn(n - 2) #这里就是递归了
print("fn(10)的结果是:", fn(10))
详解:对于fn(10),即等于2 * fn(9) + fn(8),其中fn(9)又等于2fn(8) + fn(7) 。。。。以此类推,最终会计算到 fn(2) 等于 2fn(1) + fn(0),即fn(2)是可计算的,这样递归带来的隐式循环就有结束的时候,然后一路反算回去,最后就可以得到fn(10)的值。
仔细看上面的递归的过程,当一个函数不断地调用它自身时,必须在某个时刻函数的返回值是确定的,即不再调用它自身;否则,这种递归就变成了无穷递归,类似于死循环,因此,在定义递归函数时有一条最重要的规定:递归一定要向已知方向进行。
课外监督
最近一部分同学在后台私聊我说,自己每天都准备要学习了,但是一去到电脑桌上就是提不起劲来,怎么办呢?针对这种情况的同学,我决定每天花一点时间对你们学习进行监督和辅导,如有需要的同学,扫描下面的图片,点击 “联系作者” 进行报名。
结语
这节课是有点逻辑思维在的,但跟着我学习后,你就会理解它其中的意思,好啦,今节课就先讲到这里,下节课讲函数的参数,敬请期待。