00:00
我们接下来讲一下关于函数的参数问题,上一节课我们给大家介绍了一下什么呢?介绍了一下函数的定义以及函数的什么基本结构和主要的参数的一个概念,那么本小节将为大家来详细讲解的参数,或者详细详细啊分析我们的参数问题,那么关于Python的函数参数还是比较大的一个问题的,所以我们先来举一个小例子来看一下函数右键新建一个文件啊,比如说MY下线code,然后呢,四下线该到零三了吧,是不是四啊,My code4下线零三文件。下划线选错了,四下划线零三文件OK。文件串完了之后呢,我们来定义一个函数啊,叫做定义一个定义带有参数的函数。定义带有参数的函数,我们定义一个简单点的行不行,就比如说什么呢?吃水果啊,吃水果eat。
01:04
It靠上括号,我们在这里干什么事呢?写几个人吧,行不行?Print我们写上啊。小明爱吃什么水果?小明喜欢吃什水果,吃什么水果呢?我们冒号啊,后面给他写出来行不行,很多时候这咋写呀,写个加号就可以了,由于我们现在还没有学到字符串操作,所以在这写个加号啊,其实写个加号就是表示可以把其他的数据字符串和我们前面的字符串连接到一起去啊,那写什么呢?小明变量。也要小名,这里写也说白了,我们调的时候只需要给小明传一个水果,是不是可以在里边打印出来,小明喜欢吃什么样的水果,对不对?好,然后呢,再写一个小红喜欢吃什么样的水果。来小红,小红喜欢吃水果,是什么样的水果呢?来,我们也给他传一个参数啊,小红好减下来逗号小红逗号小红好写这么两个参数就可以了,我们在这里干什么事呢?调用函数。
02:11
调用函数啊,调用函数。好,调用函数很简单吧,写函数名eat fruit是水果,如果我们什么都不写,程序会报错,会报什么错误呢?看好了叫做eat fruit函数缺少了两个必要的什么呀?必要的行参的值看见了吗?它是这个意思,然后呢,在这里边就说白了,我需要给小XM和XH分别传一个水果才行,比如说我给小红传一个西瓜啊,西瓜给小红传一个榴莲啊,女孩子比较喜欢吃榴莲,左眼右键运行一遍,看到没有,是不是小明喜欢吃水果,西瓜小红喜欢吃水果榴莲是不是都传进去了?在这里边需要注意啊,我们主要给大家讲注意事项啊,注意事项哪些注意事项呢?首先先看第一个,为什么是西瓜传给了小明,榴莲传给小红,为什么不是西瓜传给小红,西榴莲传给小明呢?这是第一个问题,第一个问题就是我们的食餐啊,传递给我们传递啊。
03:16
传值。给我们行参的时候是按照位置传输的,按照位置编号传输的,位置编号传输的。也是说由于西瓜在最开始的位置,所以他一定给最开始的行参,榴莲在第二个参数的食参的位置,他就给第二个行参,看见了吗?这是第一个注意事项啊,第二个注意事项,那我可不可以比如说只传一个西瓜,那这样小明小红是不是都接触到西瓜的效果呢?答案并不是啊,答案并不是它会报缺少一个参数,看见没有,所以第二个参数就是什么呢?食餐啊。
04:00
必须根据行参的个数进行传值啊,个数进行传值。传值,当然这有条件啊,这是我们的普通参数啊,普通参数,因为我们后面确实有参数跟它不一样啊,但是那是后话,好吧,这是我们需要注意的两个事项,两个事项好。那在这里边写完了之后,我们接着来考虑另外一个问题,什么问题呢?那假如说我们去买电脑的时候,你不说配置,比如说我想买一个什么,我想买一个这个,呃呃,联想的电脑是不是,那么他就按照标配给我吧,是不是我想买某个型号,是是按标配给我,我说老板来杯什么呢?来杯咖啡,他是不是给我标配,也不给我搭配,也不给给我搭份,也不会给我小份,一般都按标准那份来说的对不对,那我们写函数也是一样的,参数这个东西你可以按照用户指定的来进行操作,那用户如果不指定的话,那是不是按照标配就可以,就跟大家什么呀,就跟大家买上网买衣服一样,你如果说是我要特大号,给你特大号了,如果你不说,商家会告诉你,我给你发均码的,是不是就这一个道理,在函数中也有这个道理啊,也有这个道理,这只涉及到什么呢?叫做参数的默认值。
05:19
啊,这个注意事项给大家复制一份放这边好吧,所以下面我们要讲的是关于什么呢?关于参数的默认值。那啥叫默认值啊,就是标配啊,就是标配或者叫做默认的一个值啊,在这里边我们给大家写什么呢?给大家写一个这个输出行不行,写一个定义一个函数好吧。啊叫做函参数的默认值啊,参数的默认值,然后在这里干什么?是定义个函数。定义一个函数。函数好,第一个什么函数呢?咱就定义一个买电脑的函数行不行DBY。
06:01
Computer computer computer啊买电脑行不行,By computer,咱俩名字你可以自己定义啊,你就拜一个PC也可以啊,这样可能更好理解一点,是不是拜一个PC,买一个个人电脑行不行?好,买电脑的情况下,我们在里边输出这个电脑的配置是不是,然后呢,CPU。是什么样的呢?不知道,所以我们在这里边加上一个参数,CPU行参,让你写上CU是什么样子的行不行,然后干什么事呢?然后再加上,比如说你买电脑还得收内存呗,是不是,所以print电脑的内存是多少啊,注意符号一定要,因为状态下输入内存是内存啊,是多大的呢?也不知道加号,我们写上me more内存的缩写啊,Memory内存,然后呢,我还有什么呢?还有这个叫做显卡是不行显卡啊print弹框显卡是什么样的大小啊显卡显卡怎么说啊显卡。
07:00
是什么样的呢?OK,加号我们写上一个,我还真不知道显卡英文单词呢啊,应该是video card啊VI video VI啊video card啊显卡行不行,显卡那这个时候呢,在上面写一个显卡好了,我就写三个就可以了,多了也麻烦,是不是好这个时候大家看啊,如果我调用函数买电脑,是不是咱办一个PC啊BY办一个PC,我要一个什么呢?I7,然后呢,7700的,7700K的CPU吧,然后呢,我要内存条要什么呢?要什么呢?16G的,什么叫,然后呢,显卡呢,我要什么呢?幺零啊八零啊1080TD行不行?好1080TD,那么这种情况下,我们调用函数之后买到的电脑就是我们指定的这个效果啊,点错了,上面这个没注释啊,因为上面这个是不是榴莲让我取消了,好写上一个榴莲。因为做错的是给大家取消掉了啊,没关系,加上去吧。
08:02
好榴莲。为了不影响大家的后面的学习,我把前面这个注释一遍行不行?好吧,我们用多行注释来注释一下前面的内容,以免影响后面代码的输出啊好了,注释一下到这块的结束,好来接着来看啊,右键运行一遍,你看我买了电脑。是不是CPU是I77700,显卡16G啊不是不不是内存是16G,显卡是1080TD对不对,那如果说用户他是一个小白,并不知道我们的什么呀,型号这个明显是传入时差了吧,是不是这是一个什么呀,老鸟去买电脑啊传入。食餐,那如果说是一个小白去买电脑,我调用函数,他并不知道CPU有什么样类型,不知道内存有什么样的,他就说我想买一台电脑,那这个时候怎么办呢?来调用函数YPC。如果说小白什么都不知道,直接来买电脑的话,按照我们之前说的食参必须按照行参的个数传参数,那么程序一定会报错,因为你什么呀,CPU啊,内存啊,还有显卡呀,是不是都没有给我值啊,那怎么办?那小白还不如买电脑了,所以当一个小白去买电脑时候,他就跟老板说我要买一个电脑,然后老板是不是就给他一个默认的官方配置啊,是不是,那官方配置其实就是我们默认值的一个设置,怎么样设置呢?也非常简单,在我们什么呢行参的后面加个本号。
09:28
也就行参本身可以设置一个值的,因为行参是不是咱说是变量嘛,可以设置一个值的,比如说默认是一个I5的CPU,行不行,默认是I5的CPU,然后呢,内存默认是四个G的。四个G的显卡默认是什么979970之类的好吧,970之类的,970之类的好,那么这个时候大家再看我调用函数不传入参数的情况下,程序不会再报错了,它不但没有报错,而且还输出了我购买的电脑的是吧,设备的型号啊,是不是配置CPU是I5内存四个G显卡是970看见了吗?也就是说我在这里边不传入13啊的情况下。
10:12
不传入食参程序能不能用,能用,但是不传入食参的情况下,它使用的是行参的默认值,看见了吗?所以默认值什么情况下有用啊,就是你没有传参数的情况下,它就会用默认值了,大家心里有会说那我要是传了参数了,那你就想想你去电脑去买电脑。你是个老鸟,你说老板我要I7多少的,然后内内46G的是不是显卡我要多大的,他肯定按照你要求配置啊,所以如果有默认值同时传入了十参,那么最终结果按照你传入的实参来设定,看见没有,是不是按照你的参数I7,然后16G1080它来设定了,所以如果说是有默认值,而且你传入十参,他们一定使用的是什么呀,十参值啊。
11:03
OK,其实呃,这个也不难理解,如果当做变量层次来看的话,那么原来是不是变量负了一次值啊,那我这是不是第二次赋值把前面的值给覆盖掉了嘛?变量重新赋值是不是覆盖原来的值啊,是不是?OK,这就是关于函数的默认值的设定,大家了解了吗?当然关于默认值的什么呀,默认值的特征也需要大家来了解一下啊,那关于参数的默认值的注意事项,哪些注意事项呢?第一个注意事项就是什么呢?如果还注意啊叫做什么呢?如果函数有默认值,但是没有传入实参。则使用默认值。第二。如果函数有默认值传入了实参,则使用十参值啊,本质上咱也说了,它其实就是变量重新赋值嘛,变量的重新赋值。
12:06
当然还有一条,还有一条,还有下什么东西呢?如果说函数的参数有了默认值,我们就可以干什么事呢?就可以抛开一条限制,什么限制呢?还记不得我们之前讲参数的时候必须要求什么呀,按照个数进行传值是不是啊,所以这里边可以打破,因为我有默认值的话,我是可以不按那个方式来传的,所以在里边第三条啊,第三条具有默认值的参数,参数啊,参数可以不传入时参也不会报错,也不会报错,但是它只是这条,按位置么,按个数取消了,按位置没有取消,很多说这是啥意思啊,没明白,看好了,我在这里边假设只想买一个什么呢?只想买一个内存是16G的。别的我就标配就可以了,好,他说那怎么调用啊来。
13:00
调用函数啊。调用函数啊,我就是只传入一个十参啊,传入一个十参,大家明显知道有个三参个数嘛,是不是传入一个十参,那这种情况下我调用函数YPC这个没什么好说的啊BYY啊YPC很多说那我就买个16G的怎么办?我直接写一个16G能行吗?答案是不行,还记不记得我们说了,它的条件只是原来的第一二个条件可以不用管了,不用按数量传了,但是位置依然位置传参这个东西依然不变的,所以你在这写个16G的话,它实际上把16传给了第一个CPU的值,右键运行一遍,你会发现它就传给CPU,看到没有CPU16G,这是不是就不太合理了,是不是,所以大家需要注意这方面的问题啊,需要注意这方面的问题啊,也就是说它并没有改变位置啊,位置依然是第一个传第一个,第二个传第二个,很多时候那怎么办呢?那这种情况下你只能把第一个参数给它加上去了。
14:00
当然后面还有另外一种方式,我们一会再讲好不好,那大家写一个I5,把标配的写进去就没有事了,当然这并不是解决方案啊,我们有更好的解决方案在后面讲到,你看这样是不是I5的CPU 16g内存,970的默认显卡了,对不对,好了。这样一来的话,我们关于默认值的介绍基本上就完了,基本上就完了,但是也需要注意啊,我们真正开发过程当中可能存在一种情况,就是有的参数有默认值,有的星参就没有默认值,那这种情况该怎么摆放呢?大家记住一条原则就可以了啊。如果同时存在第四个。如果同时存在,如果同时同时存在有默认值和没有默认值的型参,有一个必须要记住原则,没有默认值的一定放在前面,没有默认值的行参放在有默认值的默认值的行参之前,原因是什么呢?原因很简单,你没有默认值的放前面,比如说我在前面再加个行不行,再加一个屏幕啊C加一个屏幕没有默认值,它那这样一来的话,我调用的时候,如果开始就写了一个来,我在这里边最开始。
15:19
就写了一个屏幕啊,比如说我调用了BYPC啊,我会删掉啊,这个只是给大家看一下BYPC啊,BYPC我只传一个屏幕啊,120赫兹的,是不是120赫兹的,那么这个时候它按照位置一定会传给屏幕,然后后面是不是使墨就可以了,程序也不会报错,是不是程序也不会报错,你看是不是也不会报错,当然你要是把这个屏幕放到最后,那就不好办了,为什么呀?因为前面三个默认值,CPU会接触到这个值。所以会非常麻烦啊,这是一个简单的一个技巧啊,简单的一个技巧,好了,关于这方面给大家介绍到这里边儿就搞定了,这就是该有参数的默认值,好,接下来看另外一部分内容啊,我们的参数现在只是讲了一部分,还有很多信息需要大家来了解。
16:04
那么我们来了解另外一个问题,什么问题呢?如果说一个函数的参数非常多,我们该怎么解决?比如说我们在里边新建一个文件啊,卖。麦小写啊,麦下划线扣的四下线零四文件。然后呢,确定一下,我们在这里边定义一个函数。这个函数呢?是一个创建人物角色的函数,行不行,Df correct correct。角色的说啊,创建人物吧,Create一个create一个person吧,PN么create person,创建一个人物啊创建人物大家大家都知道,我们创建一个游戏人物的时候呢,他一般会有一些装备在身上,对不对,比如身身上穿着什么呀,脚上戴着什么呀,我们就输出一下行不行,比如说我们选上头上戴着。是不是应该是一个帽子,是不是好,头上戴着应该帽子吧,好我们加上一个什么呀,因为到时候用户给的船,所以我们写一个帽子的一个缩写行不行,那第一个船一个帽子在这里边,好然后呢,头上戴着一个东西,然后呢,然后脖子上还是挂着个项链之类的,是不是来我们写上啊叫脖子上挂着。
17:17
脖子上叫脖,脖子上挂着一个链啊,来加上一个项链行不行啊,因为这些单词写英文的话对我难度有点大啊,所以我们就写题了,项链,然后呢,接下来啊,一身上穿着什么样的衣服是不是?好,Print套括号,因为装备嘛,中间有个衣服吧,身上穿着什么样的衣服啊,穿着加上我们的衣服好,那没关系,我也传进来写行,他传进来衣服,然后呢,再接下来啊,除了衣服之外什么呢?脚上也得穿着鞋吧,好。手上吧,手上拿着武器,是不是手上拿着什么样的武器?呃,加害武器,好让我们传写一个行参,准备接收一下结果武器,然后呢,还得脚上穿着什么样的鞋对不对?Print括号写上脚上。
18:14
脚上。穿着什么样的鞋子啊,加上我们的鞋子好搞定。那这样一来的话,我们的一个函数就写完了,大家会发现这个函数就是输出一大堆装备了是不是,然后在里边形态还是挺多的啊,来调用函数。这个给大家写一下de好吧,定义一个人物角色,一个人物角色。人物角色人物。并且设置装备啊,并且设置装备好没有问题,我们在里边调用函数给大家看一下啊。调用函数,好,那我们写上create person啊,调用函数的时候传呗,第一个是帽子,比如说我们写上一个什么呢?呃,钢盔啊钢盔或者三级头吧,三级头。
19:03
然后呢,逗号。然后呢,脖子上挂着什么呢?挂的是钻石项链。钻石项链OK,也没问题,然后呢,呃,身上穿着什么样的衣服,我们穿着这个,呃,开裆裤。然后呢,别开完酷啊,应该叫做呃锁子甲吧,行不行?叫锁子甲这边写个名字,然后逗号,然后呢,手上拿着什么呢?金丝大环刀啊,金丝写错了,叫金丝大环刀行不行?然后呢,脚上穿着什么呢?草鞋啊草鞋好了搞定,我们写完了这个函数,并且传入了参数,而且刚好五,看到没有,上面五个星三,下面五个13,运行一遍程序大家会发现没有问题啊,看见没有,玉叔输出头上戴着三级头,脖子上挂着钻石项链,身上穿着锁子甲,手上拿着大环刀,脚上穿着草鞋,这是在理想情况下的调用啊,理想情况。
20:03
很多说什么叫理想情况,简单说这个你没传错,但是大家知道啊,一个函数参数有无限个,那万一不是五个而是50个呢?你能按照顺序一个一个的写吗?是不是一会就眼花了,是不是万一眼花了就会出现很尴尬的情况,什么情况呢?给大家解释一下,比如说调用函数。出现了问题啊。调用函数,比如说出现顺序错误。顺序错误,那就会有什么样搞笑的事情发生呢?我们来看一下,把这个复制一下拿下来,然后呢,我们人为的制作一下错误好不好,来把这个三级头放到最后。这样的话顺序就不是,是不是就乱了,是不是因为它只能按照位置传呀,那我们的什么呀,我们的这个出来项链传了第一个,羧甲传给了第二个,然后呢,大黄刀抽的第三个,这次输出的结果差函数本身不会报什么,这个语法错误啊,但是逻辑出问题了,你看好了,现在是这样的,头上戴着钻石项链,脖子上挂着锁子甲,身上穿着金丝大坏刀,手上拿着草鞋,脚上穿着三级头,你想想这个形象还能打仗吗?是不是这就出现了什么呢?逻辑错误,简单说就是我们传输的时候是不是顺序不对呀。
21:18
二氧化的顺序不对,所以为了防止出现顺序错误,我们Python当中引入了新的参数,这道什么参数呢?关键字参数。调用函数啊。调用函数这里边是使用关键字参数,很多学们说啥叫关键字参数啊,写一下你就明白了,调用函数的时候依然不变啊,还是函数名,但是在传值的时候,我不在乎它的顺序啊,你看好了,我把这个东西拿过来。复制一下放在这里边,我不在乎它的顺序,你随意打乱都没关系啊,你随便怎么打乱我不在乎啊,你随意打乱。好,这么打乱够乱的了吧?好,你看运行的时候肯定是乱套的啊,这不用想是不是肯定是乱套的,那为了防止这种错误发生,我们可以在传递食参的情况下,注意前面指定行参名称,比如说我们一看钻战项链,那肯定是项链啊,是不是?一看这次大货刀那肯定是武器啊,所以武器是不是,然后我穿仙甲,这肯定是衣服吧,衣服等于它,然后我穿D草鞋,肯定是鞋子呀,是不是,然后等于它,我穿三级头是不是应该是帽子,帽子等于它,OK,你看好了,当我在食参前面,然后呢,用等号和它的行参连接起来之后,这种格式的参数。
22:42
就叫做关键字参数,说的更直白一点,什么叫关键参数?指定行参的食参使用方式啊,就叫关键字参数,能听懂这句话吗?啊?所以这是关键字参数的概念啊,关键字参数。
23:01
关键字参数,什么叫关键字参数呢?它就是指定行参接收的。指定行参的食参吧的传递,参传递,参数格式的传递。D呢,传没有那个D呢,啊传递没怎么递没了。啊,传递参数的格式就是关键字参数,而且需要注意它关键字参数指的是什么呀。特指食餐啊,特指食餐,特指食餐,因为食餐才能指定行参嘛,哪有行参指定行参的对不对?所以这个需要注意,有了这种方式之后,你就不用担心出现错误问题了,右肩运行一遍看见没有,头上戴着三级头,脖子挂着钻项链,身上穿着锁子甲,手上拿着一丝大弯刀,脚上穿着草鞋,是完全正确的逻辑对不对?所以这也体现出关键字参数的作用啊,它的作用也体现出来了,什么作用呢?就是为了防止,为了防止多参数的传递错误啊,多个参数的传递叫顺序传,传递顺序出现错误啊,传递顺序出现错误。
24:23
有了这个方式之后呢,我们是不是再也不用担心参数多了,参数再多,我只要只见行参也不会乱看见了吗?那这个时候其实有了关键字参数,我们默认值这一块的话,也不用说非得把默认值放前面,你放后面其实也有办法来解决的。好了,那关于关键字参数,同志们理解了吗?这就是我们关键字参数啊,关键字参数其实在后期用的还是比较的多,好了,那关于默认值和关键字参数就为大介绍到这里边儿,一会我们将为大家带来新的内容,夜视参数的内容什么东西呢?叫做收集参数与关键字收集参数。
我来说两句