Python程序设计第6章Python函数定义与使用Python程序设计6.1函数的理解与定义6.2参数传递与返回值6.3作用域6.4递归Python程序设计函数定义函数调用函数的理解与定义函数的理解与定义函数的定义求取包含10个斐波那契数函数的理解与定义函数的定义如何让代码按照用户指定的最终要求取得序列的长度?或许还可以让程序更加抽象函数的理解与定义函数的定义函数是一段具有特定功能的、可重用的语句组,用函数名来表示并通过函数名进行完成功能调用。函数是一种功能的抽象,一般函数表达特定功能两个作用:降低编程难度和代码复用函数的理解与定义函数的定义Python定义一个函数使用def保留字,语法形式如下:def函数名(参数列表):函数体return返回值列表函数的理解与定义函数的定义deffibs(nums):fibs=[0,1]foriinrange(num-2):fibs.append(fibs[-2]+fibs[-1])returnfibs函数名参数返回值函数的理解与定义函数的定义给函数编写文档函数的理解与定义函数的调用程序调用一个函数需要执行以下四个步骤:(1)调用程序在调用处暂停执行;(2)在调用时将实参复制给函数的形参;(3)执行函数体语句;(4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行。函数的理解与定义函数的调用nums=8Python程序设计6.1函数的理解与定义6.2参数传递与返回值6.3作用域6.4递归Python程序设计参数传递返回值参数传递与返回值参数传递与返回值参数传递形参与实参在def语句中,位于函数名后面的变量通常称为形参。调用函数时提供的值称为实参参数传递与返回值参数传递函数可以有参数,也可以没有,但必须保留括号参数传递与返回值参数传递函数定义时可以为某些参数指定默认值,构成可选参数参数传递与返回值参数传递位置参数和关键字参数在结合使用位置参数和关键字参数时,必须先指定所有位置参数参数传递与返回值参数传递函数定义时可以设计可变数量参数,既不确定参数总数量参数传递与返回值参数传递函数定义时可以设计可变数量参数,既不确定参数总数量defprintParams(*params):print(params)defprintParams2(**params):print(params)参数传递与返回值返回值函数可以返回0个或多个结果-return保留字用来传递返回值-函数可以有返回值,也可以没有-可以有return,也可以没有-return可以传递0个返回值,也可以传递任意多个返回值参数传递与返回值返回值Python程序设计6.1函数的理解与定义6.2参数传递与返回值6.3作用域6.4递归作用域局部变量和全局变量一个程序中的变量包括两类:全局变量和局部变量。•全局变量指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效。•局部变量指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在。作用域局部变量和全局变量当函数执行完退出后,其内部变量将被释放。规则1:局部变量和全局变量是不同变量作用域局部变量和全局变量函数func()内部使用了变量n,并且将变量参数b赋值给变量n作用域局部变量和全局变量如果希望让func()函数将n当作全局变量,需要在变量n使用前显式声明该变量为全局变量,代码如下。作用域局部变量和全局变量规则2:局部变量为组合数据类型且未创建新变量,等同于全局变量作用域局部变量和全局变量规则2:局部变量为组合数据类型且未创建新变量,等同于全局变量作用域局部变量和全局变量总结:-基本数据类型,无论是否重名,局部变量与全局变量不同-可以通过global保留字在函数内部声明全局变量-组合数据类型,如果局部变量未真实创建,则是全局变量lambdalambda函数python使用lambda来创建匿名函数,不再使用def语句这样标准的形式定义一个函数。-lambda只是一个表达式,函数体比def简单很多。-lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。-lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。lambdalambda函数lambdalambda函数f=lambdax,y:x+yf(10,15)25f=lambda:lambda函数print(f())lambda函数lambdalambda函数map(lambdax:x**2,[1,2,3,4,5])#使用lambda[1,4,9,16,25]#提供了两个列表,对相同位置的列表数据进行相加map(lambdax,y:x+y,[1,3,5,7,9],[2,4,6,8,10])[3,7,11,15,19]print(‘’.join(map(lambdax:chr((ord(x)+3-ord(‘A’))%26+ord(‘A’))if‘A’=x=‘Z’elsex,input(pleaseinputstr1:))))Python程序设计6.1函数的理解与定义6.2参数传递与返回值6.3作用域6.4递归Python程序设计函数递归的理解函数递归的调用过程函数递归实例解析递归递归递归的定义函数作为一种代码封装,可以被其他程序调用,当然,也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。递归在数学和计算机应用上非常强大,能够非常简洁的解决重要问题。递归递归的定义数学上有个经典的递归例子叫阶乘,阶乘通常定义为:n!=n(n-1)(n-2)…..(1)这个关系给出了另一种方式表达阶乘的方式n!=1n=0n(n-1)!otherwise递归函数递归的调用过程递归函数递归的调用过程阶乘的例子揭示了递归的2个关键特征:(1)基线条件:存在一个或多个基例,基例不需要再次递归,它是确定的表达式;(2)递归条件:包含一个或多个调用,所有递归链要以一个或多个基例结尾。递归函数递归的调用过程递归递归实例解析字符串反转将字符串s反转后输出s[::-1]defrvs(s):ifs==:returnselse:returnrvs(s[1:])+s[0]递归递归实例解析斐波那契数列F(n)=F(n-1)+F(n-2)deffibs(n):ifn==0orn==1:return1else:returnfibs(n-1)+fibs(n-2)递归递归实例解析二分查找1.如果序列索引最大值与最小值相等,判断是否为要查找的数值。2.如果上下限不同,判断数值在上下限平均值的哪一侧,再做查找。递归函数式编程函数式编程(英语:functionalprogramming)或称函数程序设计,又称泛函编程,是一种编程范型它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象函数编程语言最重要的基础是λ演算,而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)递归函数式编程函数式编程关心数据的映射,命令式编程关心解决问题的步骤函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念递归函数式编程Python提供了一些有助于进行函数式编程的函数map、filter、reduce递归函数式编程mapmap()函数语法:map(function,iterable,...)递归函数式编程filterfilter()函数语法:filter(function,iterable)[1,3,5,7,9]递归函数式编程reducereduce()函数语法:reduce(function,iterable[,initializer])谢谢大家