




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章函数主讲人:***13-10月-23Python数据分析与数据挖掘目录contents函数概述0102函数的定义03参数传递04函数参数设置匿名函数0506递归函数3.1函数概述013.1.1模块和包Python程序是由函数(Function)、模块(Module)和包(Package)组成。其中,模块是处理某一类问题的变量、函数和类的集合,包是由一系列模块组成的集合。模块是一个Python文件,以.py结尾,模块中能定义函数、类和变量,模块里也能包含可执行的代码,运用模块能够有逻辑地组织Python代码段。常用的模块导入方式:importmodule1(模块名)frommodule1import*(*表示导入该模块中所有函数及变量等)frommodule1importname1(表示导入模块中的一个指定的部分)包是一个分层次的文件目录结构,它定义了一个由模块及子包和子包下的子包等组成的Python的应用环境。简单来说,包就是文件夹,但该文件夹下必须存在__init__.py文件,该文件的内容可以为空。__init__.py用于标识当前文件夹是一个包。3.1.1模块和包3.1.2函数如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数。函数是Python为了代码效率的最大化,减少冗余而提供的最基本的程序结构。函数是一段代码,通过名字来进行调用,它能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值。3.2函数的定义023.2函数的定义函数定义的格式:def函数名():
函数体注意:函数定义后,如果不经调用,函数将不会被执行Python中自定义函数创建的方法如下,使用关键字def定义函数,其后紧接函数名,括号内包含了将要在函数体中使用的形式参数(简称:形参,调用函数时的为实参;函数可以有参数,也可以没有,但必须保留括号),以冒号结束。然后另起一行编写函数体,函数体的缩进为4个空格或者一个制表符。[例3-1]函数的定义举例。3.2函数的定义[例3-2]用函数实现fabonaci序列。3.2函数的定义3.3参数传递03Python中函数参数的传递,可以分为实参为不可变对象的传递和实参为可变对象的传递。字符串、元组、数值等类型是不可更改的对象,而列表和字典等则是可以修改的对象。若实参为不可变对象时,即使函数体中修改了形参,实参的值在函数调用返回时仍然保持不变;如果函数调用时,参数为可变对象的传递,若函数体中修改了形参,则实参的值会随之发生改变。3.3.1实参变量指向不可变变量实参变量可以指向不可变的对象,如整型。不可变对象是指对象所指向的内存中的值不能被改变,当改变这个变量的时候,原来指向的内存中的值不变,变量不再指向原来的值,而是开辟一块新的内存,变量指向新的内存。[例3-3]实参变量指向不可变对象实例。3.3.1实参变量指向不可变对象分析:在Python中,类型属于对象,变量是没有类型的,变量只是指向了对象。本例函数调用时,在参数传递后,实参变量x和形参变量a都指向对象3(整型)。在函数change()内,对a赋新值4,即a+1后,由于不可变对象的值不能变化,所以为4分配新的内存单元,同时使a指向这个对象。函数调用返回时,由于变量x和a指向了不同的对象,而x所指向的不可变对象内存地址一直没变,所以输出的x的值也不变。实参变量可以指向可变对象,如列表。可变对象是指对象的值可以改变,当更改这个变量的时候,还是指向原来的内存地址,只是在原来的内存地址进行值的修改,并没有开辟新的内存。3.3.2实参变量指向可变变量[例3-4]实参变量指向可变对象实例。3.3.2实参变量指向可变变量分析:本例函数调用时,在参数传递后,实参变量x和形参变量a都指向同一个列表(list)对象[1,2]。由于列表对象本身是可以改变的,因此在change函数里,向列表中加入一个元素,不会重新创建对象,而是直接在原对象中添加了新的元素。调用结束后,变量x和a仍然指向同一对象,改变a指向对象的值也就改变了x的指向对象的值。3.4函数参数设置043.4.1函数参数类型Python中的函数参数主要有以下四种:位置参数:调用函数时,根据函数定义的参数位置来传递参数,实参的个数和顺序必须和形参保持一致,否则会抛出异常。默认参数:在定义函数时,为部分形参设置了默认值,调用函数时可传或不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)。关键字参数:函数调用时,可以通过“键-值”形式指定参数,即传参时把定义函数时的参数名和对应的值一起传入函数中,此时可不考虑传入参数的顺序。可变参数:主要包括任意数量的可变位置参数和任意数量的关键字可变参数,*args参数传入时存储在元组中,**kwargs参数传入时存储在字典内。。[例3-5]没有参数的函数。3.4.1函数参数类型注意:__name__可以获取函数的名称,__doc__可以获取函数的注释信息。[例3-6]用带位置参数的函数,判断是否是素数。。3.4.2位置参数3.4.3默认参数[例3-7]在定义函数时,设置参数的默认值。[例3-8]计算椭球的表面积和体积,调用时修改了默认参数的值。3.4.3默认参数3.4.3默认参数注意:默认参数一般要放到参数列表的最后修改3.4.2参数设置默认值重要说明:默认值只计算一次。当默认值是可变对象(如列表、字典或大多数类的实例)时,这会有所不同。以下函数将在后续调用中累积传递给它的参数值,默认值在定义范围内的函数定义点进行计算,如下例:请分析方法一和方法二的不同之处。[例3-9]默认值在定义范围内的函数定义点进行计算实例。方法一方法二3.4.3默认参数[例3-10]默认值对后续调用的影响实例。如果不希望在后续调用之间共享默认值,则可以这样编写函数:如果希望函数调用时,不用固定参数的顺序,可以在调用的同时指定形参和实参,这些参数又称为关键字参数。使用关键字参数是指,在函数调用时,可以明确的为形参指定实参,可以不用固定参数的顺序。3.4.4关键字参数[例3-11]使用kwarg=value形式的关键字实例。(见下页)3.4.5可变参数在Python函数中,还有一种可变参数,即传入函数的参数个数是可变的。可变参数可以分为*args和**kwargs两种形式,若函数定义时,二者同时存在,一定需要将*args放在**kwargs之前。可变参数被组成元组在函数定义时,在形参args前加一个*号,则*args参数收集所有未匹配的位置参数组成一个元组(tuple)对象,形参args指向此元组(tuple)对象。在函数调用时,*args参数用于解包元组(tuple)对象的每个元素,作为一个一个的位置参数传入到函数中。[例3-13]可变长度参数实例。3.4.5可变参数3.4.5可变参数2. 可变参数组成字典在函数定义时,在形参kwargs前加两个**号,则**kwargs参数收集所有未匹配的位置参数组成一个字典(dict)对象,形参kwargs指向此字典(dict)对象。在函数调用时,*kwargs参数用于解包字典(dict)对象的每个元素,作为一个一个的关键字参数传入到函数中。[例3-13]可变参数实例,传入的参数组装为一个字典。3.5匿名函数053.5.匿名函数Python允许使用lambda语句创建匿名函数(无具体的名称)。lambda函数的语法:lambda[arg1[,arg2,.....argn]]:expression注:lambda函数能接收任何数量的参数但只能返回一个表达式,
匿名函数不能直接调用print,因为lambda需要一个表达式。[例3-14]匿名函数实例。[例3-15]匿名函数实例。3.6递归函数063.6递归函数如果一个函数在执行过程中,又调用了函数本身,则称为递归函数。注意:递归必须有一个明确的结束条件;每次进入更深一层递归时,问题规模相比上次递归都应有所减少;函数递归的深度不能太大,否则容易引起内存崩溃。[例3-16]用递归函数实现返回Fibonacci序列前n个数。3.7本章实践例题本章实践例题[例3-17]无参函数和有参函数的定义实例。本章实践例题[例3-18]函数的定义与调用实例。本章实践例题[例3-19]定义计算平面上两点间距离的函数distance,计算三角形周长,点在横坐标和纵坐标上的位置分别用x和y表示。本章实践例题[例3-20]输入一个数字,用递归函数求出该数字的各位数之和。本章实践例题[例3-21]设置函数参数值的实例。本章实践例题[例3-22]可变参数的函数实例。本章实践例题[例3-23]键盘输入n个数组成列表(输入-1结束),编写函数calc(输入参数为该列表),求该列表的总和及均值。本章实践例题[例3-24]使用函数,判断输入字符串是否为回文串。本章实践例题[例3-25]使用函数,根据中奖概率模拟中奖次数。小结本章主要介绍了Python语言中的函数,并结合实例讲解了函数的定义方法,函数中参数的传递方法,函数中参数的设置,以及匿名函数、递归函数等内容。需重点掌握的内容包括:函数的定义方法、函数参数的设置和匿名函数的使用。小结本章习题1.定义函数triangle(a,b,c),可以根据用户输入的三边,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中介房租租赁合同范例
- Cu基催化材料的制备及其催化氧化N-杂环化合物的研究
- 钣金加工项目融资报告(范文模板)
- 农民木屋出售合同范本
- 2025年中国营养杯市场调查研究报告
- 2025年中国磨钻头砂轮市场调查研究报告
- 2025年中国电感镍锌软磁铁氧体市场调查研究报告
- 冷库安装购买合同范例
- 2025年中国润颜抗皱修护霜市场调查研究报告
- 农村绿化施工合同范例
- 最新固体制空调净化系统设计确认方案
- 《汽车理论》复习提纲
- 利用勾股定理作图计算(课堂PPT)
- 金合极思软件快捷键
- 对大型火力发电厂生产准备工作的几点认识
- 园林绿化监理月报001
- 浅议如何当好税务分局长
- 交通建设工程工程量清单计价规范(第1部分公路工程)-解析
- 山西曲沃(或经洪洞县大槐树)迁徙苏北鲁南曹氏宗系分支
- 干部管理访谈提纲
- 材料小样确认单
评论
0/150
提交评论