本章要点:4.1函数概述4.2函数的声明和调用4.3参数的传递4.4函数的返回值4.5变量的作用域4.6递归函数4.7内置函数的使用4.8综合应用:turtle模块绘制复杂的图形第4章函数和代码复用
4.1函数概述函数的功能(1)实现结构化程序设计。通过把程序分割为不同的功能模块,可以实现自顶向下的结构化设计(2)减少程序的复杂度。简化程序的结构,提高程序的可阅读性(3)实现代码的复用。一次定义多次调用,实现代码的可重用性(4)提高代码的质量。实现分割后子任务的代码相对简单,易于开发、调试、修改和维护(5)协作开发。大型项目分割成不同的子任务后,团队多人可以分工合作,同时进行协作开发(6)实现特殊功能。递归函数可以实现许多复杂的算法函数的基本概念函数用于在程序中分离不同的任务函数允许程序的控制在调用代码和函数代码之间切换
Python函数分类内置函数。Python语言内置了若干常用的函数,例如abs()、len()等等,在程序中可以直接使用标准库函数。Python语言安装程序同时会安装若干标准库,例如math、random等等。通过import语句,可以导入标准库,然后使用其中定义的函数第三方库函数。Python社区提供了许多其他高质量的库,如Python图像库等等。下载安装这些库后,通过import语句,可以导入库,然后使用其中定义的函数用户自定义函数。本章将详细讨论函数的定义和调用方4.2函数的声明和调用(1)defmy_average(a,b):return(a+b)/2defprint_star(n):print((**n).center(50))#打印n个星号,两边填充#空格,总宽度50【例4.2】函数创建示例2:定义打印n个星号的无返回值的函数【例4.1】函数创建示例1:定义返回两个数平均值的函数def·函数名([形参列表]):····函数体
函数的声明和调用(2)【例4.3】函数创建示例3:定义计算并返回第n阶调和数(1+1/2+1/3+…+1/n)的函数defharmonic(n):#计算n阶调和数(1+1/2+1/3+…+1/n)total=0.0foriinrange(1,n+1):total+=1.0/ireturntotal
函数的调用(1)【例4.4】函数的调用示例1(triangle.py):先定义一个打印n个星号的无返回值的函数print_star(n),然后从命令行第一个参数中获取所需打印的三角形的行数lines,并循环调用print_star()函数输出由星号构成的等腰三角形,每行打印1、3、5、...2*lines-1个星号importsysdefprint_star(n):print((**n).center(50))#打印n个星号,两边填充空格,总宽度50lines=int(sys.argv[1])#三角形行数foriinrange(1,2*lines,2):#每行打印1、3、5、...、2*lines-1个星号print_star(i)函数名([形参列表]);
函数的调用(2)【例4.5】函数的调用示例2先一个定义计算并返回第n阶调和数(1+1/2+1/3+…+1/n)的函数,输出前n个调和数importsysdefharmonic(n):#计算n阶调和数(1+1/2+1/3+…+1/n)total=0.0foriinrange(1,n+1):total+=1.0/ireturntotaln=int(sys.argv[1])#从命令行第一个参数中获取调和数阶数foriinrange(1,n+1):#输出前n个调和数的值print(harmonic(i))
函数的副作用函数的副作用读取键盘输入、产生输出、改变系统的状态等函数print_star(n)的副作用是向标准输出写入若干星号纯函数(purefunction)接收一个或多个参数,通过计算,返回一个值
Lamda表达式和匿名函数f=lambdax,y:x+ytype(f)#输出:classfunctionf(12,34)#计算两数之和。输出:46sorted([(Bob,75),(Adam,92),(Lisa,88)])#默认按元组第一个元素排序[(Adam,92),(Bob