00:00
好,接下来我们再来看啊,我们的下一个概念也是一个,呃,比较重要,比较简单的一个概念啊,我们来一个零四叫做一个返回值。返回值,那返回值是干嘛的啊,那这样啊,我复制一下我刚才定的一个函数,我们这个sum这个函数sum这个函数的作用呢,这个函数作用就是可以求我们这个任意一个数的和,对吧?任意一个数的和,那现在我们来调一下啊,现在我们来调一下,呃,这时候我来调一下这个萨,我们来一个123逗号,一个456,来一个78933个数的和,我这一直行算出来了1368对吧?1368这个值啊,这个值,那现在那个结果已经算出来了,诶并且他是不是已经把这结果给我打印出来了,对吧?给我打印出来了,那这个时候你要注意了,有没有什么问题。有没有什么问题,当我们现在去使用sum函数的时候,我传了三个十三一二三四五六七八九萨,这函数会把这三个值进行相加,相加完了以后是不是会把这个结果给我们输出啊,哎,给我们输出,那这个时候注意了,就带来了一个问题啊,带来一个问题,什么问题,我让这个函数去给我计算结果,我是一定要输出吗?
01:23
我是一定要输出吗?我有没有可能拿过来这个结果,我要做一些别的操作,别的事儿呢?是不是很有可能,哎很有可能,但是现在的特点就是我这把值给它传过去,他给我计算完了以后,是不是直接通过print的语句,是不是给我打印出来了,哎给我输出出来了,那现在我能不能去通过这个结果做别的事儿,哎不能做啊,不能做,因为这个结果我有没有拿到,没有拿到这个结果自始至终result,这个值自始至终是不是一直在函数内部呀,那假如说我这想获取到这个结果,我想要这个结果干嘛呢?再做一些别的运算,或者再做一些别的操作,这时候是不是就不行了,哎,这时候不行了,那说白了,他给我计算这个结果,我有可能想打印。
02:12
我也有可能我想用它做别的计算,我也可能是不是还有别的作用啊,但是总之最好的是什么?最好的方式是把这个结果给我,而不是你替我输出,你把这个结果直接给我以后,我是想打印也好,我想再做计算也好,我想再当它作为参数去传递好,这个东西是不是最好应该由我自己决定啊,哎,由我自己决定,那现在我们这个事儿像什么呢?哎,现在我们这个函数就相当于我们去火车站买票,诶去火车站买票,哎,我给售,我给这个售票员是吧,我说给您100块钱,您给我来一张票,你给我张票是吧?诶售票说好,售票员把钱借过去,然后给你撕了一张票,现在我们这还还什么呢?售票员撕了一个票以后,拿这个票朝你晃了一下,诶,晃了一下看票在这儿呢,然后把票又装回了自己的兜里,那你想想这样合不合适,哎,不合适,为什么?因为我们买票,我并不是希望你把票给我看一。
03:12
我是希望你把这个票给我吧,同样我在这儿去计算三个数的和我也不是希望什么,你告你告诉我结果,我是希望什么呀,你把结果交给我,那至于我是想打印还是想干什么,由我自己来决定,对吧?那所以这个时候我们就要用到一个什么呀,用到一个返回值啊,返回值,返回值是什么东西。在这我们来写一下返回值,哎返回值哎就是我们函数执行以后什么呢?哎,返回的一个结果啊,函数执行以后返回的结果,这个跟我们数学那函数有点像是吧?数学我们有一个什么呀?比如说我这来一个FX,这是不是数学函数啊,哎,等于一个这个X加5R加五,那这个函数就应该是什么,你如果X是一,我这函数整体是不是给你返回一个六啊,你如果X15,是不是整体可以返返回15,因为是不是等于X加5IX加五,那这个是五六或者是15,这个就是我们这个函数的返回值,同样在我们的Python里,函数是不是应该也应该有返回值,哎,也应该有返回值,但是注意这个函数它目前是没有返回值的,那我们怎么来指定返回值,那怎么来指定返回值,那我们可以什么呢?哎,我们可以通过我们个re p return,诶来指定我们这个函数的一个返回值啊,返回值来我们。
04:35
从这里边直接写一个,这里边我们直接定义一个啊,定义一个FNFN在这我不指定参数了,我这直接re return一个100啊随便写一个return一个100,现在这个函数反回值就是100,那这个时候你注意了,我现在直接调用一下这函数,这个函数不会有任何输出啊,因为我们在里边是不是没有写打印一句啊哎,不会有任何输出,那么同学说了,那这返回值有什么用啊哎,返值有什么用啊?哎,那注意了,返回值是通过特来指定的,哎,返回值什么呢?哎,我们可以诶通过一个这个变量诶来接收我们这个函数的什么呀?哎,返回值我们直接说完整啊,我们可以什么呢?我们可以直接使用函数的这个返回值,哎,也可以什么呢?通过一个变量来接收函数的返回值,什么意思?那现在来看,我这函数是不是返回了一个100啊,那注意了,我们这是不在调用函数啊,这个就是一个函数表达式它的结果。
05:35
就是什么?这个函数的结果就是的返回值执行结果,哎,就是它的返回值啊,执行结果就是它的返回值,那现在我们来说,就像什么我一加一的执行结果就是什么,就是二啊就是二,而我这函数的执行结果就是它的返回值,所以这个函数的执行结果就是什么呀,100诶那我怎么获取到这个东西,我可以这定一个变量,比如说我这来一个这个R,或者你直接叫造也行啊,这叫什么都行,R等于FNRR等于FN,那这个时候你直接来普润一下这个R,这一保存我们一执行R多少,R就是100,为什么R是100,因为它的返回值是100,或者你可以这么打,或者你也可以干嘛呢?直接打印FN括号,这个跟我直接打印R是不是一样的呀?诶这两个本质上是一样的,只不过我这个是用变量接收,这个是在直接打印一执行是不是两个都是100啊,哎,所以注意啊,这两种是等价的,你直接打它也行或。
06:35
或者直接用这个变量接收也OK啊,也OK,所以注意你特后边跟什么值,函数返回的结果就是什么啊,这里边我们来写一下瑞特。后边哎跟什么值,哎函数就会返回什么值啊,返回什么值,那现在我跟的是一个100对吧,我来换一个换个二百一直行是不是变成200了,哎,我来换一什么呢?我来换一个处一保存一直行是不就是处啊哎,我来换一个什么呢?我来换一个这个字符串换一个什么呢?换一个hello这一保存走一个是不是就hello啊哎你这该什么,它最终就会返回什么,这个是不是非常简单呀,哎非常非常简单对吧?然后你这它返回什么,你这个位置是不是接收到的就是什么呀?哎就是什么啊非常简单,那问题就来了,我return后边可以跟什么值啊,哎跟什么值啊,那注意了,Return后比可以跟任意的什么呀,对象啊,可以跟任意对象,什么都行啊,什么都行,你说我这来什么呀,我这复制一下啊,复制一下,我把这先注了,我这来一个列表吧,列表来一个一。
07:52
逗号二逗号三一保存行不行,哎没有问题,我这来一个这个字典吧,行不行啊,哎来一个字典,直接来一个这个呃K这来一个这个V,我们简单写了啊简单写了这一保存一执行是不是就返回一个字典呀?哎跟什么都行,甚至可以干嘛呢,甚至可以跟一个函数反。
08:16
返回值甚至可以是一个函数,什么意思呢?那注意了,看着啊看着我这来一个DEF,一个FN2括号括号,我们这来一个普的一个hello啊,一个hello,那现在你注意了,现在我又定义了一个FN2这个函数,而这个函数是在哪?这个函数是不是在FN的内部呀?哎,那这就是我们的函数的一个嵌套,我在函数内部又定义了一个函数,那这个时候我这直接写一个re TN特一个SN2,现在我就将FN2作为返回值返回了,那这个时候我们来看R是谁,R是谁二我这一保存一执行R是谁?R是不是就是一个方程,叫做一个FN2啊,诶,F2这log我们先不管它,但是你现在知道,我现在这个二就是FN2,返回值也可以是一个函数啊,返回值也可以是一个函数,那现在等于。
09:16
R就是一个函数,那注意了,那既然是函数能不能掉啊,直接R来一个括号一保存走一个是不是哈,就执行了,哎,R就执行了啊,所以注意返回值也是一个函数,这种在Python里用的不是特别特别的多,但是你要知道它是可以这么做的啊,可以返回一个函数啊,可以返回一个函数,总之就是一句话,返回值,你返回啥玩意儿都行啊,返回啥玩意儿都行,哎,但是有一个疑问了啊,我这来一个DFN2,我这定一个FN2,注意这两个F2没有关系,因为这是在内部啊,它俩不是在一个级别啊,然后呢,这我直接return,我直接写一个return,直接写一个return。那这是什么效果,哎,我们这来看一下,我还是R等于FN2啊,这就等于FN2了,我重新给R进行赋值,我们来打印一下这个二直接一保存走一个什么玩意儿,诶是一个那啊那再看我这如果不写return啊,我这我写一个写一个A等于十吧,随便写一个,因为我这不写东西,它会报错,或者写一个pass也行,现在我是不是没有return,哎没有return,我这一保存走一个是吧,也是呢啊也是呢,所以这个时候注意,哎,如果仅仅写一个这个return re t return哎或者什么呢?哎或者我们这个return后什么呀,哎后不根直哎或者什么呢,或者不写return,哎不写return哎则什么呢?哎则相当于我们这个return么呀呢啊return呢,所以注意,如果你没写return或者是return后边你。
10:58
就光写return后边没有别写别别的东西,那这样就相当于什么呀,你就相当于return一个nu啊return一个那就相当于写这玩意啊,就是返回一个空啊,返回一个空这一个,那这个一定要记住啊,一定要注意你不写或者写写这个就相当于是瑞return人的啊好,这也是一个,然后我们再看一个啊再看一个啊,我们这再来一个DEF,一个FN3 FN3我这写一个啊print一个这个hello,一个hello,然后呢,这print一个ABC有两个print对吧,我这调一下FN3,这很明显是没有反应值对吧,没有反应值所以就是什么呀,那对吧,就是那hello ABC是这打的对吧,这打的好看着啊,我在这写一个return,我在hello和ABC之间写一个return,这个输出我先不打印,我们就看这,这是不是掉了,诶掉了那很明显,阿什呢,因为瑞特后边没有根直,我要看的是什么哈,肯定会执行,ABC会不会执行,来我们来看啊,一执行哈出来了,ABC出不出来。
11:58
哎,没有出来,为什么还是说一句话,瑞,Return一旦执行,哎,Return在函数中啊,在函数中,诶return后的这个代码,哎,都不会执行啊,Return后的代码都不会执行,所以注意这儿写了一个return,这个ABC是不是在return后边啊,Return什么意思啊,就是返回的意思,我都已经返回结果了,就证明我这函数已经执行完了,所以后边的代码都不会再执行了。return一旦执行,函数自动结束return,哎,一旦执行我们这个函数什么呀?哎,自动结束啊,自动结束RETURN1执行函数就完事了啊,函数就完事了,这个是我们说的一个return啊return好FN3我们这个函数就这样啊,这个就是我们这个返回值啊,非常非常的简单,那其实你看到这瑞特你想起什么来,想起什么来,诶瑞特。
12:58
其实有点像我们那个循环里边那个什么呀,Break对吧?哎,Break,那我们来看一下break,哎,那这里边我们来定义一下啊,来一个FN4啊随便定一个函数,那这里边呢,我们写简单一点,我来一个负循环啊负卧循环,我来一个I in一个什么呀,哎,润润呢,我来一个五,这是不是一个五次循环啊,哎,五次循环在这儿,我来print一个五,然后呢,诶然后啊,然后在这儿我们来看一下这一保存,我们这一块你这么一整肯定没用,对吧,因为函数没有调用在这儿,我来调用一下IPH4啊IPHONE4这一保存一执行,诶是不是给我输出了这个五次啊,诶我打印的是五,应该打印的是谁啊,哎啊,应该打印,哎,我这一执行01234是不是循环执行了五次,哎,执行了五次,那这时候我们来看啊,这时候我们来看啊,我在这儿写一个判断,我来一个if I等等于。
13:52
三啊A等等于三在这我来一个breakak break来一个break break什么效果,哎,我们说了,哎这样啊,我们在这儿为了看区别,我在循环外边再写一个啊写一个什么呢?哎,写一个循环执行完毕,哎循环执行完毕,我现在先写了一个break,那我一旦执行break,我们想想零会输出,一会输出,二也会输出到3BREAK,那三四还会不会输出了,哎就不会输出了,所以我们这个写了一个break的效果应该是012,然后什么?然后循环执行完毕啊,循环执行完毕,所以这一保存一执行012循环执行完毕,为什么?因为break的作用,我们来说一下break它用来干嘛呀?诶退出我们当前循环,BREAK1执行循环结束啊循环结束还有谁啊,还有我们一个叫做continue continue干嘛的,哎,看效果,Continue用来跳过当次循环,所以它会跳过三内次。但是对。
14:52
对四有没有影响,没有影响,所以它应该是012,然后是什么,然后是四,最后是不是显示这句话,哎,所以我们这一直行0124循环定完毕,是不是就没有三呀?诶没有三,这个是我们的一个continue continue干嘛呢?Continue用来干嘛呢?诶用来跳过当次循环啊,它只跳一次啊,它只跳一次,最后我们来看一个return return return也就是说到三这我执行了return,这个还执不执行,肯定不执行,对吧,这个点上跟我们break是一样的,但是问题就是这个执不执行,执不行,哎那注意同样这个玩意儿也不会执行,因为瑞特一执行整个函数都结束了,它是最猛的,后边全都不会执行,所以瑞特你看到应该什么012后边就都没了啊,就都没了,我这一保存一执行012后边是不是都没了,哎,因为它是退出函数啊,所以注意return,我们来说一下return,哎用来干嘛呀?哎用来结束我们这个函。
15:52
啊用来结束我们这个函数,这是三个啊对比一下,Break退出当前循环,Continue跳过当次循环,而我们这个return是用来结束我们这个函数的啊函数的好,接着再往下说啊,那现在我们有了返回值了,我们这sum函数我是不是可以改造一下了,怎么改造,那这个时候我还用不用去调这个result了?诶还用不用打印result了?哎,不用了,在这儿我可以直接什么呀?Re,诶return一个result啊return一个result,然后我这个时候再调这函数,我直接R等于一个sum,我们来什么呢?诶123诶456789,还是算这三个混合,那这个时候是不算出一个结果呀?哎,那这时候注意我直接print一个这个二,我这一保存一执行是不是1398呀?哎,同学说老师你这么做不跟刚才一样了吗?不还是打印结果吗?哎,对,确实是打印结果,但是现在是不是我自己打印的,你说我不想打印了,我就不打印就完了,你说我想让他跟别的值去计算,我直接在。
16:52
插上一个,诶7781保存走,你是不是又给我做了一个计算,也就说这个值现在是我拿到了手里,我拿到手里以后,我是不是就是想干嘛就干嘛呀,哎,由我自己来控制啊,由我自己来控制就是这么一个目的啊,就这么一个目的,所以这个一定要注意我们的返回值啊,一般情况下我们都会有返回值啊,一般情况下就是我们函数是用来完成某种功能的,之前我们也说过了,函数是用来完成某种功能的,那有些功能是需要返回一个结果的,那这个时候我们就要设置返回值,而有一些功能是不需要设置结果的,那比如说print就是一个函数,它没有返回结果,我们这调一个是不是它就是一个函数,它不需要返回结果,它只需要把你给我的值是不是打印就OK了,哎打印就OK了,所以这个时候它的就不需要返回值,但是像我们这种求和的,你是不是得给我返回一个结果,那这种就一般就需要什么,需要返回值啊,需要反应值,好,那待会儿你们可以自己来看看print的反应值啊,你看它的返回值是多少。
17:52
哎,那其实它没有反应值,没有反应值,反应值就是什么呀?哎,就是一个闹啊就是一个闹好呃,那接下来我们在最后补充一个问题啊,补充一个问题,那在这儿呢,我们来定义一下一个新的函数FN5 FN5呢,在这我直接return一个什么呢?Return一个十啊return一个十,然后我们这块说一下,说一下什么呢?FN5和FN5括号的区别区别,我们来看看它们有什么区别,其实他们的区别很简单,你直接打印一下行了,你直接打印一个FN,你再打印一个FN5FN5括号,这打印一个FN5,那这什么区别呀。
18:33
哎,注意FN5是什么,FN5是函数对象啊函数对象,那FN5是函数对象,那在这儿我是不是在打印函数对象,哎,所以注意哎,如果打印FN5,哎,实际上。哎,是在什么呢?打印我们这个函数立项啊,还数立项,而FN5括号是干嘛?是在调用函数啊,是在调用函数,那我们说了打印我们这个FN5括号是干嘛?哎,实际上哎是在打印我们那个什么呀,FN5括号,哎FN5这个函数什么呀,FN5这个函数的返回值,返回值,所以注意这儿会给我们打印一个什么方式什么什么,再来一个内存地址是吧,艾特哪哪哪内存地址,而这个打印的是什么?这个打印的是十啊打印的十我们这一保存一执行,一个是function fn5i的哪哪哪,然后第二个是不是十啊,诶所以这里边我给它粘过来啊,这是两个,上边这是它下边这个呢,就是一个十啊注意它们的区别,如果你只写一个FN5,这个是在干嘛?打印对象,这个会不会调用函数,它是不会去调用函数的,只是打印一个对象而。
19:51
SN5呢,是在调用函数它干嘛?它是在打印函数的什么呀,返回值啊,在执行这个函数,执行函数它的结果就是什么呀?返回值啊,返回值这个好好的记一下,你现在看到这儿肯定不理解,就是即使你理解了也不是真的理解,尤其是你第一次学,把这个东西好好消化一下。举个例子,我们函数一定是实现某种功能的,函数的存在一定是为了实现某种功能而存在的,我们说函数里边是不是用来保存代码的,哎,保存代码的,那我们的函数就相当于是一个机器一样。
20:25
它具有某种功能,我们是不是可以通过这个机器帮我们做事儿啊,哎做事儿,那比如说我们这个函数是一个什么呢?它就相当于是一个,诶冰激凌机啊,一个会做冰激凌的机器啊,Icecream对吧?Iceam啊做冰激凌的一个机器,那这个机器就相当是一个函数啊,相当于函数,那我们说了我这个冰激凌机器它有什么功能,哎,我可以往冰激凌机器里去加什么牛奶,加糖,加面粉,加一系列东西,它是不是可以跟这些东西,将这些东西给我混合,给我生产出冰激凌了,诶我给它搁牛奶,搁糖,搁一些面粉等等一列东西搁进去以后,它是不是自然而然就给我拉出来一个这个冰激凌,对吧?诶给我生产出这个冰激凌,那这个时候注意它的功能是生产冰激凌,那现在注意我这儿写了一个FN5,相当于什么,我有没有在用这个机器去生产冰激凌。
21:23
没有,我在干嘛?我直接把这个对象作为参数是不是传进去了,等于在干嘛?我再把这个机器交给了print函数,我把这个对象直接交给了print函数,诶直接把这个机器给你,懂那意思吧,这是直接给了机器,而当我加了一个括号以后,等于在干嘛?我在调用这个函数,我在干嘛?我在去用这个机器去生产冰激凌,所以我加了一个括号干嘛?诶是将这个机器生产出的产品给你,是将这个什么呀函数的返回值交给了你,所以注意这两个区别,这是对象,这是对象,这些打印对象,而这个是在打印对象的什么呀,返回值,所以你在用的时候一定要注意区分,诶我到底是加括号还是不加括号,如果你仅仅需要的是返回值,那一定要加括号,如果你希望是把函数项直接给它,那就不要加括号,这个注意区分一下啊,注意区分一下,好,这个是我们说的一个返回值,我们就说这么多,还是来。
22:23
一下。
我来说两句