版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1云南财经大学信息学院
Python数据分析及应用第四章函数目录
4.1函数的定义与调用4.1.1函数的定义
4.1.2函数的调用
4.2参数与返回值4.2.1默认参数4.2.2关键字参数4.2.3可变长参数4.2.4返回值4.3变量的作用域4.3.1局部变量4.3.2全局变量4.4递归(1)知识目标:掌握函数的定义及调用,掌握定义函数时,如何设置参数和返回值,掌握局部变量和全局变量的使用,学会应用递归函数来解决问题。
(2)技能目标:函数是编程中非常重要的组成部分,学会应用函数实现特定功能、提高代码复用率、增强程序的可读性和可维护性。
(3)素质目标:通过学习函数的定义与使用,掌握如何使用Python解决实际问题,同时培养逻辑思维和编程能力,为未来的学习和职业发展奠定坚实基础。3学习目标
函数的概念最早起源于数学领域,用于描述数学关系中的输入与输出。随着计算机科学的发展,函数的概念也被引入到了计算机编程中。编程函数用于将一组相关的指令封装在一起,形成一个可以重复使用的代码块。通过函数,程序员可以更高效地编写和维护代码,从而提高代码的可读性和可维护性。在Python中,使用函数可以加强代码的复用性、减少代码冗余,从而提高程序编写的效率。
本章主要介绍了函数的概念、函数的分类及定义、函数的调用、返回值、函数的参数、变量的作用域及函数递归的使用方法等。
4本章导读54.1函数的定义与调用
在程序设计里,函数是用来实现特定功能的可重复使用的代码段,是用于构建更大、更复杂程序的部件。在Python中,使用函数可以加强代码的复用性、减少代码冗余,从而提高程序编写的效率。
函数必须先创建(定义)才可以使用,用户通过调用函数名来完成相应代码段的功能,无需关心具体实现的细节,只需传递参数,得到函数运行的最终结果即可。相同的函数可以在一个或多个程序里多次调用。举个例子,譬如:利用净水器对自来水进行深度处理,假设把净水器比作是一个函数,该函数把一步一步的对水进行过滤处理的过程封装了起来,用户无需关心具体的处理过程,只需要传递参数(自来水),然后让净水器自动运行,最终就可获得处理结果(净化后的水)。
4.1函数的定义与调用4.1.1函数的定义Python中的函数分为:内置函数、自定义函数和匿名函数。1.内置函数是系统中预先定义好的一些常用函数和方法,这些函数不需要引用库,直接使用即可。如:数学运算类的函数(sum()、eval())、IO操作类的函数(input()、print())、标准库中的函数(datetime库中的today()、now())等。Python的内置函数如表4-1所示。4.1函数的定义与调用表4-1Python的内置函数表abs()delattr()hash()memoryview()set()all()dict()help()min()setattr()any()dir()hex()next()slice()ascii()divmod()id()object()sorted()bin()enumerate()input()oct()staticmethod()bool()eval()int()open()str()bytes()exec()isinstance()ord()sum()bytearray()filter()issubclass()pow()super()complex()float()iter()print()tuple()callable()format()len()property()type()chr()frozenset()list()range()vars()classmethod()getattr()locals()repr()zip()compile()globals()map()reversed()__import__()
hasattr()max()round()
4.1函数的定义与调用2.自定义函数是由用户自己定义的。定义一个函数要使用def语句,语法格式如下:def函数名(参数1,参数2,...,参数n):
函数体(语句块)
return值def:英文单词define的简写,是定义函数的关键词。
函数名:函数的名称,必须符合Python中的命名要求,一般用小写字母和单下画线、数字等组合,如:my_sum、func1等。函数名后的:(冒号)必不可少。
参数:参数写在函数名后的圆括号里,为函数体提供数据,参数个数不限,可以是0个,1个或多个。
函数体:进行一系列逻辑计算的语句块,相对于def缩进四个空格。
返回值:函数执行完毕后返回给调用者的数据。返回值没有类型及个数限制,若有返回值,则使用return结束函数并返回值,否则不带return表达式相当于返回None。Python函数有两种类型参数,一种是函数定义里的形参,一种是调用函数时传入的实参。接下来通过一个简单的例子,深入理解函数。4.1函数的定义与调用实例4-2编写程序比较2个数的大小,输出2个数的最大值。(有参函数)defmax(num1,num2):
ifnum1>num2:max=num1
elsemax=num2
returnmaxmax1=max(2,15)print("最大值是:",max1)该程序输出结果如下:最大值是:15
在函数定义阶段括号内有参数,称为有参函数,调用时必须传入实际参数。如果函数体代码需要依赖外部传入的值,必须定义为有参函数。4.1函数的定义与调用3.匿名函数
lambda函数也称匿名函数,即没有函数名的函数。lambda只是一个单行的表达式,函数体比def简单很多,其语法结构如下:
lambda参数1,参数2,,...参数N:表达式
单行表达式决定了lambda函数只能完成非常简单的功能。实例4-3lambda函数示例f=lambdax,y:x*yf(2,3)6
函数输入参数x和y,输出值是积x*y,并将输出值赋给变量f,变量f成为具有乘法功能的函数。
4.1.2函数的调用
函数在定义的阶段不会立即执行,而是等函数被程序调用时才执行。对实例4-2的程序执行流程分析如下:
1.程序运行时,首先跳过def块定义的函数代码,而从主程序的第一行,也就是图中第5行标注的max1=max(2,15)这行开始运行,即调用函数max。2.程序在调用处暂停(图中第5行)执行,然后跳转到def定义的函数体的第一行,并将实参2传递给形参num1,实参15传递给形参num2,即num1=2,num2=15。4.1函数的定义与调用4.1函数的定义与调用
3.继续执行完函数体中的所有语句,计算出max=15,再跳回到程序暂停处(图中第5行)继续执行,将数值15作为函数返回值,即max(2,15)=15,得到max1=15。4.继续执行完主程序中的所有语句,输出max1。Python函数必须先定义后调用,函数一旦定义后就可以反复调用,从而避免代码冗余。4.2参数与返回值
4.2.1默认参数
定义函数时,如果给参数设置了默认值,当调用该函数时没有传递对应的实参,就会使用这个默认值。示例如下:实例4-4默认参数示例>>>defadd(a,b=1):returna+b>>>add(2)3>>>add(2,3)54.2参数与返回值
4.2.2关键字参数
实参默认情况下是按位置从左至右顺序传递给函数,而关键字参数通过“键-值”形式加以指定,允许通过变量名进行匹配,而不是通过位置,从而让函数更加清晰。例如:实例4-5关键字参数示例>>>deffunc(a,b,c): print(a,b,c)>>>func(1,2,3)#顺序传递,1传给a,2传给b,3传给c1,2,3>>>func(c=3,a=1,b=2)#关键字参数1,2,3采用关键字参数后,参数通过变量名进行传递,参数的位置可以任意调整。4.2参数与返回值
实例4-1无参函数deffunc():
print("Pythonisinteresting!")func()该程序输出结果如下:Pythonisinteresting!
在函数定义阶段括号内没有参数,称为无参函数,调用时也无需传入参数。如果函数体的代码逻辑不需要依赖外部传入的值,必须定义为无参函数。
这个函数的作用就是打印出一句话,但是没有return,相当于返回的值是None。4.2参数与返回值
4.2.3可变长参数
可变长参数就是向一个函数传递不定个数的参数。例如,我们要定义一个函数用于计算咖啡店每单的销售额,由于每单的咖啡品种及数量都不一样,因此传入的参数个数也就不同,这个时候后就可以使用可变长参数来定义函数。
可变长参数,一种在参数前加一个星号(*),数据结构为元组;另一种在参数前加两个星号(**),数据结构为字典。示例如下:实例4-6可变长参数示例1>>>deff1(a,*args):
print(a,args)>>>f1(1,2,3,4)1(2,3,4)1按照位置传递给a;2、3、4被当做元组类型数据传递给args。4.2参数与返回值
实例4-7可变长参数示例2>>>deftest(**kwargs):
print(kwargs)
print(type(kwargs))
forkey,valueinkwargs.items():
print("{}={}".format(key,value))>>>test(name='jerry',age=18,address='kunming')该程序输出结果为:{'age':18,'name':'jerry','address':'kunming'}<class'dict'>age=18name=jerryaddress=kunmingkwargs是一个字典,传入的参数以键值对的形式存放到字典里。参数定义的顺序必须是:必选参数–>默认参数–>可变长参数。4.2参数与返回值
4.2.4返回值
return语句用于结束函数,并将结果及控制权返回给调用者。执行到return语句时,会退出函数,return之后的语句不再执行。
在实际编程环境中,一些函数没有return语句,只需要干活,不需要返回值(返回None),譬如,实例4-1定义的函数就只干活(打印语句)。但在大部分情况下,函数的运行结果需要用在其它运算中,所以函数必须返回一个结果,而不是只局限于把结果打印出来。接下来,通过几个微实例进行分析。1.无返回值的函数实例4-8无返回值的函数示例1>>>deftest1():
print(“Iamrunningatest”)>>>a=test1()>>>print(a)该程序输出结果为:IamrunningatestNone
上面这个函数没有return语句,返回给变量a的是None(无返回值),None没什么利用价值,所以无需用一个变量来存储。通常采用以下的方式进行调用。4.2参数与返回值
实例4-9无返回值的函数示例2>>>deftest1():
print(“Iamrunningatest”)>>>test1() 该程序输出结果为:Iamrunningatest2.有返回值的函数实例4-10有返回值的函数示例>>>defsquare_sum(a,b):c=a**2+b**2
returnc>>>s=square_sum(1,2)>>>print(s)该程序输出结果为:54.2.4返回值
3.返回多个值
return也可以返回多个值,多个值以元组类型返回。实例4-11返回多个值的函数示例>>>deftest2():return1,2,3,4,5,6>>>a=test2()>>>print(a)该程序输出结果为:(1,2,3,4,5,6)4.3变量的作用域
作用域就是一个变量的可用范围,由变量名被赋值的位置所决定,根据作用域的不同可将变量分为两类:局部变量和全局变量。4.3.1局部变量
局部变量是指定义在函数内部的变量,其作用域是局部的,只能被函数内部引用,在函数外无效。例如:实例4-12变量示例1>>>deffunc():a=123#a是局部变量print(a)>>>func()1234.3变量的作用域
局部变量只能在函数内部使用,一旦函数运行退出后,局部作用域被销毁,局部变量就不存在了,超出函数体的范围引用就会出错,例如:实例4-13变量示例2>>>deffunc():a=123>>>func()>>>print(a)此时,会得到一个错误提示:NameError:name'a'isnotdefined4.3变量的作用域4.3.2全局变量全局变量一般定义在所有函数体之外,其作用域是全局的,在程序整个运行过程中都有效。
若在函数体内定义全局变量(将内部作用域修改为全局作用域的变量),必须在定义的时候加上关键词global。例如:实例4-14变量示例3>>>s=0#全局变量>>>defadd(a,b):
s=a+b#此处的s为局部变量print(s)>>>add(1,2)>>>print(s)运行结果为:
304.3变量的作用域
从以上结果得知,add()函数将s当作局部变量,add()运行退出后,释放s,而函数体外的全局变量s的值仍然为0,没有被更改。如果在add()函数内的变量s前加上关键词global,则运行结果会发生改变。示例如下:
实例4-15变量示例4s=0#全局变量>>>defadd(a,b)
globals#s定义为全局变量
s=a+b
print(s)>>>add(1,2)>>>print(s)运行结果为:
34.3变量的作用域
函数内的s加上关键字global后,变成了全局作用域的变量,add(1,2)函数运行后随即改变了全局变量s的值。全局变量在函数内部不经过声明也可以被引用,例如:实例4-16变量示例5>>>x,y=1,2#x,y均为全局变量>>>deffunc():
globalz#z定义为全局变量
z=x*y#引用全局变量x和y
returnz>>>func()运行结果为:24.3变量的作用域
通过以上几个实例的学习,我们对变量的作用域总结如下:1)一个函数内的局部变量不能被其它函数引用。2)局部变量不能被全局作用域中的代码引用。3)局部作用域内可以访问全局变量。
此外,虽然全局变量和局部变量可以使用相同的变量名,也就是同名的不同变量,不过这种做法容易造成程序出错,所以通常建议局部变量和全局变量使用不同的名字。4.4递归
递归指的是函数直接或间接地调用自身以进行循环的方式。使用递归关键在于将问题分解为更为简单的子问题,递归不能无限制的调用本身,否则会耗尽资源,最终必须以一个或多个基本实例(非递归状况)结束。
斐波那契数列又称黄金分割数列,是最典型的一个递归例子,由数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,……。该数列的第0项是0,第1项是第一个1,从第二项以后的每一项都等于前两项之和。斐波纳契数列通常按照递推方法定义如下:
F(n)=F(n-1)+F(n-2)
我们可以用递归函数来实现斐波那契数列的计算。4.4递归实例4-8根据用户输入的整数n,计算输出斐波那契数列的第n个数。#fibo.pydeffibo(n):ifn==0:return0elif
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人教A版八年级历史下册阶段测试试卷含答案
- 2025年浙教版选择性必修1历史下册月考试卷含答案
- 2025年度医疗健康产业融资担保合同范文4篇
- 二零二五年度绿色农产品生产基地承包合同范本4篇
- 二零二五年度美甲培训学校校企合作合同4篇
- 二零二五年度货物买卖合同标的商品的规格和质量要求2篇
- 二零二五年度农业合作社股权收益权互换合同4篇
- 二零二五年机械设备买卖合同5篇
- 二零二五年度木制家具组装清包服务合同3篇
- 二零二五年度充电桩充电技术研发与产业化合同4篇
- 《电力用直流电源系统蓄电池组远程充放电技术规范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化运维服务信息化运维方案
- 汽车修理厂员工守则
- 六年级上册数学应用题100题
- 个人代卖协议
- 公安交通管理行政处罚决定书式样
- 10.《运动技能学习与控制》李强
- 冀教版数学七年级下册综合训练100题含答案
- 1神经外科分级护理制度
- 场馆恶劣天气处置应急预案
评论
0/150
提交评论