函数,我们先抛开概念。大家想在现实过程中遇到没遇到过这种情况,当我买了这个东西之后,我不用关心他怎么去实现,我只要拿来用。他就能把功效展现出来。比如男士用剃须刀,我拿了剃须刀之后,我就只能剃须,不用关心它里边是结构怎么实现的。
如果,我把那个剃须刀再加上一个吹风机,那就是产生一个新的一个机器,又能吹风,又能剃须。这种,每一块儿设备,不用关心他怎么去实现的,就是说别人已经把它实现了,我们往一块对接。这个跟我们在程序很相似,有时候,我们在写程序的时候,要进行复用,那怎么办呢?我就把这段代码封装起来,在用的时候拿去直接使用就行了,你不用关心里边怎么实现的,也不用再重新去写一遍。
如果一个地方写了一段代码,不仅当前功能需要调用,其他功能也需要调用,能不能把这个代码提取出来呢?给他封装一下呢,在其他地方呢,直接去调用,这就是函数。函数的作用是简化代码的重复率,提高了代码的复用。
举了一个例子,叫做斐波那契数列。怎么去做呢,定义一个列表,他是0和1开头。这个列表里面,有一个for循环调用函数,我们的列表,通过append追加元素,然后每次追加倒数第1个和倒数第2个元素的和。依此类推从0开始往上加,这样加把元素的往进追加,形成斐波那契数列。就是说新的1位等于前两位相加的和。一步一步给往进去追加起来,最后构成斐波那契数列。
其实函数就类似于我们的积木,他把一块儿一块儿的功能拼接起来。比如说有一个动画片叫做托马斯,我有一个玩具,有一个火车头,后面有车厢,把这些拼接起来,就构成了一个什么玩具火车。这就相当于我们说函数,类似于我们的积木。
其实在python里,除了函数以外,还有两种就是能够提供模块化和独立的功能,一个是对象,一个是模块,前面我们已经接触过了。比如导入了Math, math里边的求平方。这个函数呢,不知道怎么去求平方,但是把这个函数名写出来,里面给放一个值就求平方了。对象也一样,我们后边会讲到。大家只记住函数、对象和模块都是把我的程序分解成几个小的部分,而且这些部分还可以在其他地方进行复用。
创建函数
函数名,可以小写和大写,不同字母,不同单词之间,通过下划线关联起来,有的也采取第一个单词小写,第二个单词的第一个字母大写,这样来命名函数。先来简单的认识,看函数的格式。
-
def 定义了一个函数,名后加 () ,然后为冒 号(:)。
- 缩进内容为代码块
-
最后:主程序,通过函数名和括号来调用这个函数
def printMyAddress():
print("Leo")
print("Bela age is 20")
print()
# 调用
printMyAddress()
函数的格式,它是通过def去定义一个函数。如上,定义一个函数printMyAddress,然后在里面调用几个print方法。看函数的结构,通过def来定义一个函数,后边是函数名,后面跟着一对小括号,后边是冒号,这个小括号里面是可以放参数。现在没有放,接下来冒号下面,是代码块,它一定是缩进的,python里面的缩进是强制的,然后最后,相当于在主程序里面来调用这个函数,这就是函数的格式。如下,看我们菲波那切数列:
传递参数
前面看到的斐波那契数列的函数定义,
def fibs(num)
,其中的num就是往里面传递的参数。函数后的括号就是来传递参的。
def printMyAddress(myAddress ):
print ("Leo address is:" ,myAddress)
print ("Bela age is 20")
print ("========")
printMyAddress("bj")
printMyAddress("sh")
结果:
Leo address is: bj
Bela age is 20
Leo address is:sh
Bela age is 20
带参数的函数,printMyAddress方法带了个名字myAddress的参数。然后,在方法体中,把这个参数当做一个变量一样使用,打印其中的值。如果有多个参数呢,在括号里面继续添加参数,并用逗号隔开:
看方法体黄色的内容,已经标记了,就是参数。
最后,大家要重点来理解为什么使用函数?就是帮我们解决代码复用的问题。函数格式是怎么样的呢,就是def后面加上小括号,小括号里其实还应该加上参数,冒号下面的就是代码块。