内容正文:
好,同学们,我们这节课讲的是函数的概念及作用,函数的定义方法,以及函数的参数及参数的一个传递变量作用域。函数这个东西的话,它在整个我们考试的过程中,一般考选择题、填空题或者是程序。就是设计分析题里面的,还有我们的程序设计题,涉及的面是比较广的。但是我们目前考察函数的话,主要是以如何分装函数调用函数来去考察的。你比如说我们这里面的这个参数的调用及传递,这个一般不会考大题目前来说的话,基本上没考过,就只考一些选择题、填空题之类的去考察的。然后我们来现在来讲一下,首先第一个是概念,我们首先来看一个题目,比如说我们要如果判断这个16能否被三整除,那这个题目的话相对来说比较简单,我们直接使用这个if进行一个条件判断就行了。好,如果我们遇到了四个值,16、27、53、78这4个值去判断一次能否被三整除。如果你这样写的话,这个代码量是不是变得很多?那这时候我们就急需要有一个东西能把它分装起来,专门用于判断它能否被三整除。好,我们就诞生了我们的这个函数。这里面的话我们也有一个优化的方法,就是把它放到列表里面去,把你要判断的四个元素放到列表里面去。再去便利的同时再去判断这个能否为30组。这个优化的这个方法是可以的,没有什么问题,但是我们还是不够使用。因为我们后续比如说我们一直要去使用它,能够被三整除,那我们就需要有一个模块,就把它分装在一个盒子里面。当我们去想要用它的时候,就调用它就行了。那我们就诞生出了我们的这个函数。好,这样的话我们来看一下。首先我们看一下这个函数,这里面我先不仔不具体讲,反正就告诉大家的是这个函数的功能,就是它判断N能否被我们的M整除,就这么一个功能。我们这样的话,把我们所要判断的这个四个元素放到列表里面去,依次去遍历我们这个列表,然后去判断这个I能否被四整除,I能否被六整除。这样的话我们就做出了一个功能强大且可反复重复利用的一个函数,那这个函数我们该怎么去用它,怎么去定义呢?我们来看一下,这就是我们的函数的概念。首先这个概念的话,一般考选择题或者填空题的居多,就是这样的两个题型。这里面红色部分大家要记一下,就是实现特定功能的代码段。其中这三个字一般空出来的比较多,就是函数是指通过专门的代码组织用来实现特定功能的代码段。它具有相对独立性,可供其他代码重复调用,这就是它的一个优点,能够重复调用。那我们前面所学过的或者说我们一直使用的有哪些呢?比如说我们的打印print函数,比如说我们求列表长度的len函数,比如说我们要删除列表对象或者说某一些变量,那我们就使用DR这些都是人家分装好的,以及我们求序列中的最大值max这些都是我们别人非常好的函数,我们直接调用就行了,非常的方便。好,我们来看看函数的作用,这个的话我建议大家也要记一记,为什么呢?因为这个东西往往会考一些选择题。首先从代码角度,借助函数的代码逻辑可以得到优化,便于阅读。很多人看到这句话可能会有一点误解,就是觉得我们函数是不是能够提高代码的效率?其实注意我们的函数是不能提高代码的执行效率的,这个是这一句话是错误的。我们这个代码函数它只是把这个代码做了一个分装,让让我们这个阅读起来更加便捷方便,它并不能提高代码的行效率。第二点,我们从程序员的角度来看的话,借助函数可以提高代码的编写效率和我们的这个质量。这里面指的是编写效率,指的是我们写代码的时候更加快速便捷,并不是说也是也并没有说提高代码的执行效率,便于测试和更新。从团队协作来看的话,合作合理共享我们的函数可以提高团队效率,函数其实这个东西就像我刚才说的,你把它封装好之后,打包在一个盒子里面,也可以供所有人去使用。这样的话大家都可以去分装一个功能放在盒子里面,我们每个人都可以去使用这个盒子。这样的话我们开发的效率是不是就大大提高了,对不对?然后接下来我们来看它的一个定义方法。首先我们DF关键字这个是不能少的,然后再是我们的这个函数名,我们这个函数名大家也要注意,同样遵循我们的变量的命名规则。我们在这里面顺便带大家去复习一下我们的变量的命名规则。第一点只能包含字母、数字、下划线,还有中文,当然了中文一般我们很少见,就pens 3之后是支持中文的,但我们很少有人说用中文去作为变量名,对不对?好了,第二点不能以数字开头。第三点,英文字母区分大小写。这第三点主要就是说如果说一个大写一个小写,那肯定是两个不同的变量。还有第四点就是不要使用我们系统的内置函数名、模块名。这个我们后面会有一个查询的方法给大家看一下,以及我们的系统关键字也不能作为我们的函数名。好,然后这里面是我们的这个参数,大家可以看一下这个用中括号括起来的表示可选项,也就是说这个参数是可选的这是我们的这个函数题,就是我们要执行某些功能,就放在这个函数体里面。然后就是我们的这个return返回值,这也是一样,它也是可选项。如果你指定的这个返回值,它就会按照你指定的返回值返回。如果你不指定这个return返回值,它会默认返回我们的这个law。好,那我们来看一下咱们这个函数的刚才说的哪些是不能作为我们的内置的函数名呢?这里面的话都是一些我们常见的,很多都是常见的,所以大家不需要特意去记,你只要差不多。比如说我们要定一个函数名,你不要问ln你也不要问max你也不要问my这些等等都是我们常见的一些。这个函数的话,你肯定不能用,是不是?如果你用的话也不会报错,但是就是导致了你这个。比如说我们举个例子,比如说我用这个棱函数定义的一个函数,那么你用这个定义完之后,你说你想再去用这个棱函数去求我们这个列表的长度,那他就没办法求了,为什么呢?因为你已经改变了我们这个棱的一个变量的指向。其实我们这个函数名就是一个变量,它指向的就是你分装好的这个函数。人家以前这个棱是指向的它分装好的求列表长度的这个函数,而你现在又给它重新定义了一个,那你看一下。这样的话就肯定不行,对不对?所以说我们一般不会去使用常用函数或者内置函数名作为我们的这个内置函数作为我们的函数名,也不能使用关键字。如果你使用关键字来,同学们我们使用关键字的话就报错了,这个就不存在什么。像这种问题,它直接就是语法错误,直接就是语法错误。因为我们是不能够使用这个关键字作为我们的这个函数名的,这个大家要知道。好,然后接下来我们来接着去讲我们的这个知识点是吧?所以说大家看看就行,这个稍微也可以记一下,为什么呢?因为我考试考过几次,就是说让你去如何查询我们内置的函数名、模块名。那我们就可以使用我们的这个杠DRR,杠杠BULTIES就这样的一个函数去查就可以了,就是这个方法。好,然后我们来举个例子,第一个例子就是我们定一个hello的函数,这个函数它是没有参数的,也没有返回值,这里面只有一个打印hello boy,那我们就直接调用这个函数,调用函数的时候注意一定不能丢了这个括号,这个括号是不能丢的,无论它有没有参数,这个括号都不能丢。因为你要知道,如果函数它把括号去掉,他这个东西就是一个B站名,对不对?好,那这样的话我们输出的结果就是hello boy。我们再来一个就是有这个参数的这样的一个函数。如果有参数,那我们在调用这个函数的时候就得传入这个参数。比如说我们这里面定了一个hello一这样的一个函数,这里面有一个类目这样的一个参数,我们打印这个name,然后在我们调用hello一的时候,就得把这个参数给它传进去,结果再用打印hello小明。好,我们再来一个就是既有参数又有返回值的来看一下。这个的话这个函数它是没有参数的,它有返回值。我们来看一下,首先我们定那个hello 2的函数,这里面有一个字符串hello boy,然后把这个字符串给它返回出去。记住当我们这个函数里面有return的时候,我们外围叫room printer。当我们这里面没有return的时候,你就直接调用我们的这个函调,我们这个hello 2的函数就行了。就没有返回值,有返回值的函数你就得用print把它这个值给它打印出来。那我们调用这个hello 2的时候,把它再去打印出来,最后打印出hello boy。我们这里面其实也可以直接这么写,同学们我们可以直接这么写更方便。就是我们调用这个hello 2的函数,然后直接把它这个值给它打印出来就行了。好,然后再看第四个例子,就是既有参数又有返回值。那这里面的话,我们定了一个hello 3的函数,这里面有一个name参数。我我我们在这拼接一下一个字符串,最后把这个拼接的字符串给它打印。给它返回出来。我们在调用这个hello 3的函数的时候,把我们的这个小明的参数传进去。这样的话我们在最终再打印出来这个值就是hello小明。然后我们接下来再举一个例子,就定义一个函数乘法表。这个函数功能就是输出N以内的这个乘法口口诀表。这个我们该怎么做?我们首先在做这个题目之前,我们得自己先写一个我们的这样的一个计时乘法表。我们前面其实在学for循环的时候也教大家去写过的。我们来写一个,首先就是for are in red,假设我是打印99乘法表,那就是1到10。佛界因为我们的这个range下,我们的一到A加一之间,然后print下,我们在这里面构造一下我们的这个输出样式。好,这里面是我们的什么?拿来看一下。首先第一个参数,当我们的行为三的时候,这个三是固定的。所以这个I是在这个位置,而我们的J在这个位置,是I乘以个J就行了。好,我们输出的时候不要换行,你这个对齐我们的这个杠T是我们的水平制表服务。最后打印完一行之后就换行,我们来输出一下。好的,大家看一下这个我们的学习乘法表就输出了。如果我们要输入88乘法表,那我们是不是只需要把这个改成我们的这个九就行了来。大家看你看是不是打印出了88乘法表。如果我们打印66乘法表,只要把它改成七就行了。那我们就明白了。也就是说比如说六六乘法表就6加1 88乘法乘法表就是8加1,是不是?那我们就可以把这个提炼出来作为一个变量。比如说我们就六就是为N好吧,这个B站名为N然后我们定一个函数乘法表。好,定一个函数乘法表之后,把我们的打印这个乘法表的代码给它缩进一下,放到我们的函数题里面去。同样的,我们刚才提炼出来这个变量N可以作为一个参数,放到我们这个乘法表里面去就行了。那这样的话,我们让用户从。键盘输这个。N请输入。打印尺码表的。的函数。打印机。函吗?好,那我们再开始调用一下我们的这个乘法表,把我们的这个N放进去就行了。比如说我们要打印的是五五乘法表,那这样的话打印的是5乘法表,我们要如果打印的是六六乘法表,就是六六乘法表了。那这个题目我们就已经做完了。好,这个就是我们的这个题目,这个参考答案。当然了,我写的跟这个参考答案不一样。他用的是我们的这个格式化输出的方式来去打的,去打印的,是没有什么问题的,都可以。再看我们的这个函数的参数,函数的调用及参数传递。首先我们要告诉大家的是,今天这个知识点讲的,就是我们那个参数的这块的话主要是考察选择题、填空题,不会去考察大家的什么程序设计题,顶多会考我们的这个分,就是程序分析题。程序分析题的话就是给你一段代码,让你去阅读它,然后最终输出结果,就是这样的一个东西。好,我们来看一下第一个位置参数。在进行调用参数函数时,传递的参数必须与函数定义的参数一一对应。这里面有一个关键的词就是一一对应。就是如果说他在描述的时候说是一定,那么你就要想到的是我们的位置参数。好,首先我们来给大家看一下什么叫位置参数。在调用函数时传递的参数必须与函数定义的参数形成一定,这个也是我们调用函数的时候是默认的参数调用方式。我们来看一下这个例子,我们定了一个函hello这样的一个函数里面有两个参数,一个类目一个H然后我们来再打印,我们这里面做一个格式化输出。大家好,我叫我的名字叫,给个画画,我的年龄画画,edge多少岁?这样的话我们在调用这个函数的时候,就是输入传递这两个参数进去就行了。那么这里面有两个参数,你就必须得传两个参数。我们把这代码复制过来给大家再去细说一下。这里面复制过来不行,我们自己写一个。定一个我们的hello站这个函数这里面的话是我们的两个参数,一个name,一个age,我们在里面做一个格式化输出。我的名字。我的年纪。好,然后就是我们的H那这里面的话,我们定好了这个函数之后,这里面有两个位置参数,就必须得传入两个参数。倘若你传入一个,我们来看一下,比如说我就查这个张3,那这个就报错了,我们来看一下。报类型错误。这里面其实也讲了,就是missing one缺少了一个要求的位置参数。所以大家也要会去看我们的这个报错信息,那我们得再传一个,比如说传个18就行了。好,这样的话就可以了。也就是说我们的位置参数,它的参数个数一致,参数类型其实也要保持相对兼容性。如果你第二个参数的话传别的,那你虽然说不会报错,但是这句话是不是就是失去了原有的意思,是不是?对于有一些特定情况,你如果传入的参数不对,它也会报错的。比如说假设我这里面的话再给大家写一个。我们定一个test。好,这里面我们有一个AB首先是A加等于1BA加等于1,然后B点APP判断一下我们的这个,比如说哪个我们的这个B判断一下我们的A。好,那么大家想一想,说明这个A就是一个普通的一个参数,而B显然是一个我们列表。因为只有列表才有这个判断功能。那我们在调用函数的时候,你就不能在这里面瞎传,你就必须得传入一个列表。你如果传入的不是列表,那就是错的,对不对?所以就是说我们有的时候就是我们的这个位置参数它的要求比较高。它讲究的是参数个数、参数类型都要保持相对兼容,一一对应,这就是我们的位置参数。好,接下来我们来讲一下我们的默认参数。当然大家也知道如果我们定了两个参数就要传两个,我们定义三个就要传三个。这个显然对于我们一些普通用户来说的话非常的不友好。那这样的有没有一个函数,就是说参数的话我们想传几个就传几个,而不是说那么固定的那我们今天讲的就是我们的这个默认参数,什么叫默认参数呢?就是我们这个参数它出厂就带一个值,就这意思。比如说我们定一个get hoppy这样的一个函数,这里面的name和hobby分别都自带了一个它的值。自带了一个值之后有什么好处?就是我们如果传参,那么就用你传入的参数。比如说我们这里面get hobby小丸,那么它就把小丸付给这个name的。那么这个hobby是不是没有接收到这个用户传入的参数,这个值是不是我们就用他自己的这个编程。好,比如说我们在这儿第一个我们给了happy,很显然因为这里面我们什么都没传,那么他就用他自己的小明和编程,那就是小明喜欢编程。好,那我如果传入一个小王之后,就是小王喜欢编程。如果我常用小完数学,那就是打印出小王喜欢数学。大家有没有发现,有了这个默认参数之后,它的这个调用函数是不是变得更加的便捷?其实我们在这个之前在学习函数中也有好多都是啊默认自带默认参数的。我们给大家举个例子,比如说我们那个split函数,这个就是一个典型的带默认参数的那如果你不传入参数,它默认是以空格来切割的,对不对?如果你传入一个参数,比如说传入一个W那么它就按照你这个W来进行切割,是不是?所以说很多都是带这个默认参数值的,这样的话好处是使得我们这个函数变得更加实用性。在这里面我们还要注意一点,就是我们的默认参数必须要放在位置参数的最右端。我们来给大家举例子。我们直接就是写一个代码。首先我们定一个hello这样的一个函数,这里面的话我们是name,我们给假设我们这name是一个位置参数,那么age是我们的什么?关我们的默认参数。好,那么我们这里面打印一个。我的名字。我的。年纪好。这里面的话我们定义好了这个age是一个默认参数之后,如果你那有人讲,那能不能把这个A减放到这个前面去呢?我们来看一下,来看看行不行,我们直接运行一下先调用的时候,调用一下,别说我传入一个南山进去。大家看到了吧?这个是报错了,所以他报什么错呢?就是long what argument follows default argument。也就是说没有默认参数的这个没有默认值的参数跟在了这个默认值参数的后面,其实是错的。他其实想要表达的意思就是说,我们这个位置参数是要放在我们的这个默认参数的右端。一定要记住,如果你这个是age是默认参数,而我们的name是为的参数,那么它只能放在我们的这个前面,只能看到前面去,这一点大家注意,这个一般会考选择题或者选择题就是你有ABCD给你这个说法,然后你判断它的对错。好,所以大家一定要把这句话给它记住。好,再接下来我们来看一下我们的这个关键字参数。关键字参数它是相对于调用函数而言的,我们比如说要如果定义好一个函数之后,我们来给大家举个例子,什么叫关键词?比如说我们定一个函数,这里面的话是内蒙age,然后再是啊就是再来一个hobby。好,那么定义好之后,这里面有三个位置参数,我们再做一个打印。我们把这个上面拿过来。再加一个我的爱好。好,那么这个的话我们在调用这个函数的时候,是不是应该直接调用的时候传入三个。比如说第一个你得传入战3,第二个你得传入年龄,第三个你得传入爱好。比如说跑步。这个的话大家有没有发现可以是可以,但是变得太死板了。L我想就想先给age这个变量这个参数传值,再给这个hobby传值,再给这个name传值,难道不可以吗?可以,那这样的话我们就引入了我们的关键字参数。比如说我们想先给这个AJ传参,我们再给我们的这个货币传参。然后再给我们的这个链接传上。这样也是可以的。好。大家来看一下。效果也是一样的。那么有了这个关键字参数之后,它使得我们在调用函数的时候传入参数变得更加灵活,就不会非要根据原来的位置。所以说我们这个位就是关键字参数,它的一个特点就是无需考虑参数定义中它这个位置顺序。就是说你使用关键字参数就可以不用考虑这个位置顺序了。但其实这个东西在我们平时考察中也考的不多,它主要也是以理论题的形式出现的这里面我们要注意的一点就是我们的关键字参数也要也要放在我们的这个位置参数的右端来。什么意思?就比如说我们这里面的A键,比如说你这个name,你不想给他使用我们的这个位置参数,那么你就不能这样,你不能这样干。这样的话,比如说我这样写那是错的,你只能把这个参数放到我们的关键字参数的前面去,那这样的话就行了。这样的话他就会把张三赋给我们的内蒙,这个你可以顺序可以返都可以。你看一下,比如说我想把张三赋给我们的name,把hob,把这个跑步付给浩比,把这个十八赋给A姐,都是没有问题的。但是就是不能把这个关键字参数放在我们的这个位置参数的左侧,它是错的,只能放在这个右侧,这一点大家需要注意。好,接下来我们来讲一下我们的这个不定量参数。这个不定量参数如果在参数的前面加一个心,那么我们又叫做元组。不定量参数这个的话在我们是这个程序分析题里面考察的比较多,就是考察大家会不会使用我们的不定常参数,就原子不定常参数。比如说我们举个例子,我们就不看它这个课件上面例子,我们自己举个例子。比如说我愿意定一个函数还是一样。第一个是我们的那个name age,是新hobbies。好,我们一样也是先做一个自我介绍。然后我们在这儿做一个判断,判断下这个hobby。如果这个内容有的话,我们把这个hobby给它打印出来。这样的话我们在调用这个hello的时候,我们来试一下。比如说第一个传入张三,然后再是我们的什么,然后再是18岁。大家看到就是如果我查了两个参数的时候,这个是没有接收到接收不到任何值的。接收不到任何值这个条件就不满,就不会打印出来。来我们来运行一下是吧?好,如果我们再传入他的一个兴趣爱好,比如说我们在这里面传入一些。跑步、唱歌。好,这时候他会把后面这些参数全部打包给了这个hobbies,分装成了什么元组。我们来看一下这是不是个元组,这样的话你就可以自己做一个自定义输出就可以了。就是想要告诉大家的是新hobbies就是在参数的前面加一个心,就是会将这个多余的参数分装成了一个元组。这个大家会一般会考察这种类型的题目,我们给大家可以做一道题目。好,比如说我们来做一个A乘以一个B加上一个我们的sum c我们就这么一个题目。好,我们在调用这个函数的时候,我们来看一下。好,首先二赋给我们的A三赋给我们的B这样的话A乘B就是我们的2乘3是6。再是sum c因为我们刚才讲的这个多余的参数会被分装成元组,而我们的上可以对这个元组进行一个求和。也就是说4加5加6是不应该15,15再加上一个我们前面的这个六是二十一,对不对?所以最终的结果就是二一就考察类似这样的一个题目,所以大家会做这种类型的题目就行了。我们后面讲的这两个参数主要是考察的是理论方向的,不会说让大家去应用到这个程序设计里面的。好,然后再看最后一个,这个参数它是一个字典不定量参数,它考察的也仅仅是理论,不会考察这个程序设计题,甚至连我们这个程序分析题考察的都非常少。它是怎么定义的?就是传递任意数量的键值对的参数,大家可以看一下这里面怎么传的。比如说我们在这个参数的前面加一个星星,这样的话这个other就是我们的这个置顶不定的参数。那么我们在调用这个函数的时候,传入的是这种键等于值的形式。那么它就会把它分装成我们的什么字典,我们来给大家也演示一下,我们就把下面这个代码删掉,我们来在这再加一个,比如说是星星others。这样的话我们在这儿做个判断,如果others有的话,我们就把这个打印出来。好在这里面的话,我们再传入一个,比如说我的身高。体重。好,这样的话大家可以看到这里面传的是键等于值的形式的参数进去。好,那么它就会把这项这样的一个参数分装成我们那个字体是吧?分装成我们的字体就这么个东西,所以大家只要了解一下这个字典不定的参数,就是将我们的这个键等于值形式的参数分装成我们的什么字典。这个一般考察的不会说太难,就是一些理论题。然后接下来我们来讲一下我们的这个变量的作用域。讲变量作用域,我们要首先了解这两个概念。首先什么叫局部变量,什么叫全局变量?其实从这个字面意思也比较好理解。局部肯定是应用在某一个固定的小小的范围里面。比如说它是定义在我们的函数内部,只供我们函数内部使用的叫局部变量它的生命周期也比较短,我们在调用函数的时候它存在,当我们离开函数的时候,它就会被我们这个pass on的就这个回收掉了。那么全局变量大家一定要记住,它是顶格写的,没有任何缩进,直接顶格。写什么叫顶格写?我们给大家举个例子,就比如说我们的A为一,定一个test括号。那这里面的话就是我们的这个A就是我们的什么全局变量。那我们这里面再定一个B为一,那这个B显然就是一个我们的什么局部变量。这个全局变量没有任何缩进,直接要顶格写。好,接下来我们讲一下这个示例。比如说我们这里面的话,A就是我们的这个全局变量定义在函数之外,它可以供所有人去使用的,而我们的这个DA为这里面的A,它是虽然跟这个全局变量的A长得一样,但它俩是不是同一个东西?它们都不是同一个空间里面的东西,只是说命名一样,互不干扰。这个下里面那个AVL它是在函数里面去去使用的那我们就调用这个函数之后,再打印一下我们的这个A显然这个A还是为我们的一,因为在这个函数内部这个A为二是一个局部变量。好,那么如果说我们想要去修改外面的这个全局变量,在函数内部如何去修改我们的这个全局变量呢?这时候我们就要声明一个global,这个大家要知道,就是global a这样的话,我们这个A就是我们的这个全局变量。全局变量之后,我们再把二赋给我们的A我们这个全局变量就被改掉了。比如说我们在这调用一下我们的test,我们打一下我们的这个A这样的话我们的全局变量就被改成二了。这个是一般也会去考这个程序设计题,以及我们的这个选择题、填空题。尤其这个global这个单词,大家一定要把它记住,这个单词不能写错了。就是考试的时候他会问你,我们要声明全局变量,就是什么关键字,那就是用global。好,再看我们的这个例子,在这个例子里面也是一样,我们类目张三是一个全局变量,我们打印这个类目的时候肯定还是张3。当我们在调用这个圈子内容的时候,这里面是声明了全局变量内蒙。这样的话又把内蒙改成李4,那我们再去打印这个变量的时候,他就变成李四了。所以说这个里面还我们在讲到这个局部变量,还有全局变量的时候,大家要想到我们的这个global关键字就行了。还有一个就是我们的全局变量,它的作用域范围是整个模块,我们在里面加一个。整个模块。有人会问什么叫模块?模块的话指的就是后缀名为点PY的文件,就叫模块化。就是我们比如说我现在定义的这样的一个文件,你可以理解为它就是一个模块。那我如果定义的这个A这个全局变量就可以在整个模块中通用的,是可以被任何函数去使用的。好,那么我们今天函数的这个定义就是一些概念就讲到这儿。我们下节课给大家去讲我们的例题,加深一下大家对这个函数的理解和掌握。好。
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。