00:00
好,我们开始上课,接下来我们来进入到我们第五章的学习啊,我还是先来创建我的这个笔记啊,我让反义层我在这里新建一个文件夹,叫做一个LESSON0LESSON05,然后这里边呢,我们这个文件,我们的笔记还是叫做一个read read me,点一个这个MD啊,Read me点一个MD,好,那这里边我们来写一下笔记啊,这是我们的第五章,这个写错名了,写成密了,对吧,我们这应该是一个MD啊,马克文件MD。然后呢,重新打开一下。呃,U ti杠八的井号,我们叫做一个这个第五章。第五章我们该说什么了呢?哎,该说我们的一个函数啊,函数函数我们之前一直在用是吧?像我们用的这些什么,哎,Print input,哎,这些都是函数,包括我们在对这个这个这个列表的时候,我们用过Li对吧,Max mean,这些也都是函数啊,也都是函数,那我们先来研究一下这个函数的是干嘛的啊,函数是干嘛的?所以这节课我们来做一个函数的一个简介啊,我们先研究一下函数是干嘛的,那我们这里边要给函数下几个定义,大家仔细听一下,首先我们要说第一个叫什么呢?哎,函数也是一个对象啊,函数也是一个对象,所以这里边要时刻注意,我们在我们的Python里,一切接对象,所有东西都是对象,包括函数它也是一个对象啊,它也是一个对象,那我们再回顾一下,对象是干嘛的,对象是干嘛的,哎对象是什么呀?哎,对象是我们这个内。
01:47
给存中干嘛的呢?诶,专门诶用来存储数据的一块区域,诶对象是我们内存中专门用来存储数据的一块区域啊,你这一个大内存,诶我里边有一个小的区域,这个小区域就是干嘛呢?专门负责存储某个数据的,那专专门用来存储某个数据的,那这个区域它就是一个什么呀,就是一个对象,而在我的这个程序里边,它是不是会有很多个对象啊,哎,很多对象,好,那问题就来了,那我这个对象,那函数这个对象也是用来存储数据的,那它和别的对象有什么区别吗?有什么区别吗?那这里啊,我们来创建一个文件看一下。
02:33
保存一下啊,还是在这我新建一个件夹,叫一个code啊,专门用来放我们的代码的,在code里呢,我来整一个文件,我们的零一,诶函数简介这一个PY,那这里边注意了,我们在开发的时候经常遇到这个问题啊,比如什么呢?比如有如下三行代码。
03:00
三行代码,哎,这三行代码哎是一个完整的功能,完整的功能那我们这块啊,在这写一个哎print,我们这写一个hello啊hello,然后呢,这写一个这个print啊print,我这再写一个这个什么呀,诶你好啊你好,然后呢,我再写一个print啊print我再写一个什么呢?呃,写一个这个写一个再见三行代码没有任何意义啊,没有任何意义,现在假设我们这三行代码它是一个完整的功能,什么叫完整的功能呢?这三行代码要么都执行,要么都不执行,也就是说我需要这三行代码同时执行,来替我完成这么一个功能啊,完成这个功能,而且呢,这三行代码我需要在我程序的不同位置去调用,比如说我的我的项目里边一共10万行代码,对吧,那这个呢,这三行。
04:00
码呢,可能我需要什么呢,我在第99行要用一次,诶,在第118行要用一次,哎,在第123行要用一次,在第158行要用一次,简单来说这个代码可能要在我的程序里要用上100次啊,要用上100次,那现在我们。怎么办?就我们现在的技术来说,我们能做的事就是把这个代码干嘛复制100次对吧,把这个代码复制100次,然后你哪用就哪复制,哪用哪复制,对吧?但是这个时候带来一个很大的问题,我们都说过了,就是你写的时候再麻烦都不叫问题,最大的问题是什么?是你维护的时候的问题,什么意思?那现在我这个代码写完了,等有一天我这改了,我这不说hello了是吧,我可能换一个啊呀哟,是吧,我来个韩语的,你好,那这个时候我把这儿改了,是改了注意了,我在我的程序里边是不是可能有100个位置都使用了这这三个代码啊,诶,那也就意味什么,我得把这100个位置都找到,把这代码干嘛全都改了。
05:06
那这个时候维护起来是不是就是十分的麻烦了,哎,十分的麻烦了,所以就我们现在来讲,我们的代码的可复用性是非常差的,或者简单来说,这个代码写完了,你能不能再重复使用了,不能重复使用,你要想重复使用只能干嘛,只能把它复制一遍啊,只能把它复制一遍,甚至说你在工作的时候,你写那个代码,你觉得这个代码功能很好,很全,你希望是不是别的你的别的同事也可以用这个代码啊,那注意了,他怎么用啊,那现在来讲只能干嘛,只能把代码直接CTRLCCTRL干嘛。复制奎啊复制奎,那这个时候我们就派生了一个需求,什么需求呢?我们希望可以有一个位置,他能把我的代码给他干嘛呀,存起来,哎存起来也就说存起来以后呢,我想用的时候,我直接把这个位置找出来,我是不是直接就去。
06:01
使用了,哎直接就去使用了,那这里边我们就要说了,我要把这东西存哪儿啊,哎存哪,哎,那我们说了,在我们的这个程序里有一个东西是专门用来存数据的,那代码其实也是一个数据,是不是也能往这个东西里边去存呀?诶那问题就来了,这个东西是什么?哎,这个东西就是我们说的什么呀。对象啊对象,但是注意代码这个东西比较特殊,并不是所有的对象都能存,专门有一个对象用来存代码,就是谁呢?就是我们的一个函数啊,就是我们这个函数,所以注意函数也是存数据的,函数中它的存的数据比较特殊,函数中可以用来什么呢?函数可以用来保存我们什么呀?哎,保存一些我们这个可执行的代码,哎,可执行的代码说白了函数也是一个对象,它是用来存什么的,存代码的啊,函数的英文我们叫做一个function啊function,所以注意函数里存的都是代码,存的都是语句啊,存都是语句,但是注意了,光存有没有用啊,哎,光存是没用的啊,光存是没用的,并且什么呢?并且可以在需要时诶,并且可以在需要时,诶对这些语句干嘛呀,诶进行多次的调用啊,多次调用说白。
07:24
完了就跟你整一个变量是一样的,你整一个变量A等于十,那你这个变量你是不是可以在任何位置随时使用啊,哎,随时使用,那同样你把这个代码存到函数里以后,你也可以在任何位置去调用这些代码,它可以调用,反复的去调用多次啊,想调几次就调用几次,那这样的好处就是,那以后我要再出问题了,哎,我说我要100个地方调用,我用不用把那所有代码都复制过去,不用直接写一个函数就行了,并且当我代码需要发生改变的时候,我用不用每一个都改,也不用,我只需要改什么呀,第一次就OK了啊,只需要改第一次就OK了。好,那这里我们也不规划了,我们这里边来说,我们作用应该已经很明确了,那接下来我们来说什么如何创建函数啊,如何创建函数,我们就来说一下创建函数,说一下语法,说是创建函数呢,其实可以说是定义函数,它所以它用的一个关键字叫做def DeFine啊,DeFine叫定义的意思啊,定义的意思DeFine空格后边跟的是。
08:24
我们函数名啊,函数名你函数你得给它起一个名啊,起一个名,然后函数名后边跟一个括号,括号的我这来一个中号,以后注意看到中号都是可选的啊,可选的这是我写一个行参一,然后逗号来个行参二。然后这来一个省略号,哎,这来一个逗号吧,哎,逗号,然后省略号,这来一个这个行参N啊,写这么一个意思啊,在括号里边可以写行参,然后是中告那个可写可不写的啊,可写可不写,一个也行,写两个也行,写三个也行,写100个也行,不写呢也行啊也行,行参是什么我们先不管啊,我们先不管,然后后边紧跟着是一个冒号,一看到冒号你就知道了,要出什么了,哎,要跟着我们什么了,诶代码代码块了啊代码块了,所以这个就是我们的一个函数,那你猜也猜到了,代码框里边是干嘛的,放的是什么,我们说了函数里边是存什么的,是存我们的语句的,存我们代码的,那你代码写哪啊,诶就写到什么呀。
09:27
代码块啊,代码块里好,在这里我们尝试着去定义一个函数啊,对应函数,好,这三个代码我们来注定来我们来定义一个函数,怎么定义,直接deff,我们的关键字啊,Def DeFine啊,Def DeFine,然后后边跟的是函数名,函数名呢,我们随便写一个,我就叫一个FN啊,我们简单写一个FN,然后函数名完了以后跟着一个什么呀,括号,括号里边是放参数的,我们现在没有参数,不管它,然后我这来一个冒号,冒号以后直接回车,下边跟的是我们这个代码框啊,我们这来写一个print啊print这是我的第一个函数啊,这是我第一个函数。好了,那在这里我们就定义好了一个函数,那现在看着啊,我直接执行,我一执行有没有任何反应,没有任何反应,诶同学说,老师你这不写了一行代码吗?为什么没有反应啊,哎,没有反应,那注意了,我们函数当中保存的代码。
10:27
不会立刻执行。函数中保存的这个代码不会什么呀,哎,不会立即执行,我们需要什么呢?我们需要调用函数,代码才会执行啊,代码才会执行,所以注意你在这仅仅是定义,定义完了没有任何反应,你这再怎么按这个print也不会出来,因为现在是干嘛,现在我是把这个代码存到了这个函数里,我有没有让它执行啊,没有,所以在这注意,如果你仅仅是创建函数,你写多少代码它也不会执行,所以这里边我们要用的话,我们还需要对函数进行什么呀?进行调用啊,进行调用,所以接下来我们要说的是一个什么呀?诶调用函数我们这样,我们先不管函数调用,我们先不管要用,那现在我定义好了这么一个FN,我们来看看这个函数啊,我们来干嘛呢?诶,我来打印一下FN,打印FN直接来一个print print我们来一个什么呢?FN,我直接一执行,它给我显示一个什么,诶叫做一个function f。
11:32
艾,这个位置这是什么?这是内存地址,它的意思是告诉你这是一个函数,它的内存地址是这,如果你要去找这个对象,就去这个内存地址去找来,它的内存地址也是以16进制的形式显示,你看0X开头嘛,对吧,0X开头,那这个时候我们再看一个什么呢?再看一个print,我们来一个这个type,一个这个FN,这一保存我们一执行,诶是不是class function啊,诶class function,所以看到这,你要知道函数也是一个对象,它跟别的对象呢,没有本质的区别,都是用来存储什么呀,都是用来存储数据的啊,都是来存数据的。好,那接下来我们在这儿再来说调用函数,调用函数怎么调用,我们来说一下,就是函数对象加上一个什么呢?括号啊,函数对项加括号就是去调用函数啊,所以在这儿来看我们这儿的函数对象是谁。
12:23
函数对象是不是就是FN呀?哎,就是FN,所以你要调用FN,这函数就是FN加上一个括号,之前我们调print的函数,是不是就print加括号啊,诶我们要要I的是不是就I input加括二啊,哎,I加括二,所以这我一保存咱们看效果,我这一执行走一个,诶这是我的第一个函数,这个代码是不是就执行了,诶这个代码就执行了,大家注意函数可以多次调,你看我这写了四次啊,四次调用函数四次,我这再一执行走一个,是不是就输出了四次,诶就输出了四次,那现在就等于他掉了四次啊,掉了四次,但是同学看到这儿就会有很奇怪的感觉了,什么奇怪的感觉啊,诶你掉FN实际上就等于去执行了这个东西,对吧?那你干嘛不直接去执行它还要通过FN去调呢,诶,当然现在我们的函数里仅仅保存了一行代码,实际上意义不大,但是我要问你了,我的函数里是不是仅仅能存一个代码?
13:17
是不是仅仅能存一个,哎不是,这里边很明显我是不是能存多了呀,哎,比如说我要写一个,哎呢,我来一个hello,然后我再print的一个的一个,这个今天天气真不错,哎真不错啊,写这么一个,我这一保存,那这个时候注意我再去调这个函数的时候,实际上是执行几个代码,哎执行三行代码啊执行三行代码,所以我这一执行是不是你看三行代码执行了四次啊,哎执行了四次啊就这么一个效果,也就是说我这存一行行,存三行行,存1万行行不行,哎你想存多少存多少,但是你调的时候实际上只是什么,只是这么一行直行这么一个语句,是不是把这三行是不是都执行了,哎都执行了,我们叫什么呀?诶一片顶五片对吧,你这一个就可以调用很多啊,一个可以调用更多,为什么可以这样,就是因为这些代码全都存到什么,存到这个什么对象里啊,存到这个对象里,所以这里边就是我们定义的一个最简单的函数啊,就。
14:18
就是一个最简单的函数,好,那这函数我们就说完了,那这里边注意区分一下啊,我们要区分两个东西,一个是什么,一个是我们在我们直接在这写吧,一个是我们的函数对象,注意我们来写一下,写一下啊先注意区分一下,FN是什么,是函数对象啊,FN是函数对象,FN括号是干嘛,是调用函数啊,调用函数同理,我们的print是什么呢?哎,Print也是函数对象,而我们这个print的加括号是什么呢?是调用我们这个函数,这里先死记硬背一下,我们待会儿再去具体解释下一个区别,一定注意FN这是函数的名,它就是函数啊,这个变量,然后print也是函数对象啊,它只是对象,你仅有对象它是不行的,你得去干嘛呀,加上括号是不是去调用这函数,这个时候它里边的代码才会执行啊,才会执行好,那这里我们就说完了,那接下来你们自己来尝试着去定义一下。
15:18
函数,那关于函数还有很多东西,待会儿我们来展开去讲它啊,去讲它,我们先停一下。
我来说两句