3.4 Python自定义函数
目录
1. 函数基础知识
2. 函数的定义(声明)和调用
3. 函数参数传递
4. 函数的返回值
5. lambda函数
随着学习的日渐深入,编写的代码将会越来越复杂,所以我们需要找一种方法对这些复杂的代码进行分解、重新组织、封装,以便更好地理解代码、重复使用某些代码段。
在编程语言中,函数就能很好的实现这个目的。
函数基础知识
函数的概念
函数是一段具有特定功能的、可重用的程序代码段,用函数名来表示并通过函数名完成功能调用。
函数也可以看作是一段具有名字的子程序,要提前定义,然后在需要的地方调用执行,以避免在每个执行的地方重复编写这段子程序。
每次使用函数可以提供不同的参数作为输入,以实现对不同数据的处理,函数执行后,要反馈相应的处理结果。
函数的功能
函数是模块化程序设计的基本构成单位,使用函数具有如下优点:
- 实现结构化程序设计。通过把程序分割为不同的功能模块,可以实现自顶向下的结构化程序设计。
- 减少程序的复杂度。简化程序的结构,提高程序的可阅读性。
- 实现代码的复用。一次定义多次调用,实现代码的可重用性。
- 提高代码的质量。实现分割后子任务的代码相对简单,易于开发、调试、修改和维护。
- 协作开发。大型项目分割成不同的子任务后,团队可以分工合作,在同时协作开发。
Python函数分类
在Python语言中,函数可以分为三类:
1.自定义函数
本章的主要学习的内容。
2.内置函数
Python提前定义好的函数,拿来直接使用,不需要导入。在前两章学习数值数据类型和序列数据类型时已多次接触并学习。需要了解确定内置函数的参数类型、个数等信息。
3.库函数
包括标准库函数和第三方库函数。Python安装后自带的库称为标准库,例如math、random等。Python社区提供了许多其他高质量的库,如numpy、jieba、pillow等,需要单独安装,被称为第三方库。库函数需要通过import语句导入,然后才可以使用其中的函数。
内置函数
内置函数知识在之前的知识中讲授过。
内置函数是python里自带的可直接使用的函数。截止python3.8.2,共有73个内置函数,可以使用命令:print(dir(__builtins__))
展示。
函数的定义(声明)和调用
函数的定义
Python语言定义一个函数使用def保留字,语法形式如下:
def <函数名>(参数1, 参数2, ...):
函数体
return <返回值或者表达式>
Python函数的定义由关键字def开始,后面加上函数名和括号,括号里是函数的参数。函数名要符合标识符规则,命名规则要求字母小写,可以使用下划线增加可阅读性。
函数参数必须放置在函数名后的括号内,可以有0个、1个或更多个参数,相邻参数之间用逗号隔开,表示传递给该函数的值或变量引用。定义函数时的参数称之为形参,意为形式上的参数,非实际参数。
右括号结束后是冒号(表示接下来的语句块为函数体),最后是函数体内容,用缩进表达从属关系。函数体是函数执行的具体代码块。
return是Python的保留关键字,后面跟随的值就是函数将要返回的值,简称“返回值”。
返回值可以是一个数值或多个数值,也可以为一个表达式。
执行return语句后函数结束。一个函数可能有多条return语句,只要执行到其中一条return语句,函数就会结束。
函数的调用
函数调用格式:
<被调用函数名>(实参1,实参2, ...)
说明:
1.被调用函数名必须是当前程序中可用的函数对象。可以是内置函数、经import导入的库函数,或者是经def自定义的函数。
2.函数的定义位置应当在调用该函数的代码之前。
3.被调用函数名右侧的成对小括号不可缺失,内部用逗号间隔排列实参,必须与函数定义的形参列表一一对应。
4.所谓实参,即实际参数,为函数调用时传递到函数的实际参数。
5.如果调用的函数有返回值,可以直接赋予某一变量(或某一组变量),可以在表达式中直接使用,也可以作为另一函数的参数。如果函数没有返回值,则可以单独作为表达式语句使用。
程序调用一个函数需要执行以下四个步骤:
(1)调用程序在调用处暂停执行;
(2)在调用时将实参传递给函数的形参;
(3)执行函数体语句;
(4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行。
函数参数传递
函数声明时小括号中用逗号间隔的参数,称为形式参数,简称形参
函数调用时小括号中用逗号间隔的参数,有确定值,称为实际参数,简称实参
实际参数值默认按位置顺序依次传递给形式参数,如果参数个数不匹配,程序会产生错误。
定义函数时声明的形式参数,等同于函数体中的局部变量,在函数体中的任何位置都可以使用。
函数的定义示例:
声明函数时,可以为一些参数指定默认值。调用该函数时,如果没有传入对应的实参,则函数使用声明时指定的默认参数值。
带有默认参数的函数定义语法如下:
def 函数名(… , 参数名=默认值):
在定义带有默认参数的函数时,默认参数只能出现在所有参数的最右端,并且任何一个默认参数的右侧都不能再定义非默认参数。
函数示例:基于期中成绩和期末成绩,按照指定的权重计算总评成绩
Python函数的参数传递还有位置参数、命名参数、可变参数、强制命名参数等方法,同学们可查找资料自行学习。
函数的返回值
自定义函数体中使用return语句返回值,同时跳出函数调用。
return是保留关键字,后面跟随的值就是函数将要返回的值,简称“返回值”。返回值可以是一个数值或多个数值,也可以为一个表达式。
一个函数可以有多条return语句,只要执行到其中一条return语句,函数调用就会结束。
函数可以没有return语句,即无返回值,语句自然执行结束,函数调用即结束。
return语句可以同时返回多个值,使用逗号间隔,这些值将被收集到一个元组中返回。
程序案例:使用函数生成并返回随机列表
编制一个函数,生成由n个随机整数构成的列表,然后编写测试代码,生成并输出列表各元素值。
程序案例:使用函数计算不确定的若干个数中的最大值并返回
程序案例:使用函数判断一个整数是否为素数
编制判断一个整数是否为素数的函数,然后编写测试代码,输出1-99中的素数。
函数体内部有多条返回路径;i从2开始循环,只要有i能被判断整数整除,则跳出循环,i的平方大于判断整数时停止循环。
lambda函数
Python有两种自定义函数,一种是def定义的函数,另一种是lambda函数,也就是匿名函数,Python编程中,大家更习惯将其称为表达式。
lambda是Python的保留关键字,用于定义匿名函数,又称lambda函数。
lambda是一种简便的、在同一行中定义函数的方法。
匿名函数并非没有名字,而是将函数名作为函数结果返回。
lambda函数的定义格式为:
<函数名> = lambda <参数列表> : <表达式>
以上的定义格式等价于:
def <函数名>(<参数列表>):
return <表达式>
lambda函数特征
(1)使用lambda可以定义没有名字的函数。
(2)lambda函数有输入和输出。输入是传入的参数列表,输出是根据表达式计算得到的值。
(3)lambda函数一般情况下功能都比较简单。单行的表达式决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能简单,甚至不需要专门的名字来说明。