版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章函数《Python程序开发案例教程(第2版))》学习目标/Target掌握函数的定义和调用,能够在程序中定义和调用函数掌握参数的传递方式,能够通过多种方式向函数内部传递数据熟悉变量作用域,能够区分程序中的全局变量和局部变量学习目标/Target掌握递归函数的使用,能够运用递归函数解决阶乘的问题掌握匿名函数的使用,能够运用匿名函数简化简单函数的定义熟悉常用的内置函数,能够使用chr()函数返回单个Unicode字符的码值章节概述/Summary在开发程序时有些功能的逻辑十分相似或完全相同,只要使用这个功能,就需要在相应的位置执行相似或者重复的代码块。如果一个代码块存在问题,那么所有的代码块都要同步修改。这不仅会让程序存在大量重复的代码块,而且增加了代码的维护成本。函数的出现便解决了这些问题,它会将相似或重复的代码封装成特定功能的代码块,实现代码模块化,使整个程序的结构变得清晰。本章将对函数相关的知识进行详细讲解。目录/Contents01函数的定义与调用02函数的参数传递03变量作用域04函数的特殊形式05常用的内置函数函数的定义与调用6.1
先定一个小目标!掌握函数的定义,能够在程序中定义函数6.1.1函数的定义与调用函数的定义6.1.1函数的定义与调用在Python中,函数是一种组织好的、可重复使用的代码段,用于实现特定的功能或操作。函数可以被视为有名字的一段代码,这段代码是提前定义好以实现特定的功能,当程序的某个地方需要使用这个功能时,就可以通过名字调用这个函数。函数的定义6.1.1函数的定义与调用函数主要分为两种,分别是内置函数和自定义函数,内置函数指的是Python标准库提供的函数,比如print()、input()等,这些函数已经预先定义好,能够直接在程序中使用;自定义函数指的是用户自己编写的函数。无论是哪种函数,它们的定义和调用方式都是一样的。函数的定义Python中使用关键字def定义函数,其语法格式如下:def函数名([参数列表]):["""文档字符串"""]
函数体[return语句]标记函数的开始接收传入函数中的数据函数的唯一标识说明函数功能的字符串函数功能的具体代码标志函数的结束defshow_weather():print("*"*13)print("日期:4月8日")print("温度:14~28℃")print("空气状况:良")print("*"*13)定义函数的语法格式定义函数的示例6.1.1函数的定义与调用为了增加函数的灵活性,使上述函数能够显示更多日期的天气状况,这里可以为函数加入参数列表,通过改变参数的值来适应不同的需求。将函数名称修改为modify_weather,在函数名称的括号里面加入参数列表,具体代码如下。defmodify_weather(today,temp,air_quality):print("*"*13)print(f"日期:{today}")print(f"温度:{temp}")print(f"空气状况:{air_quality}")print("*"*13)6.1.1函数的定义与调用函数的定义
先定一个小目标!6.1.2函数的调用掌握函数的调用,能够在程序中调用函数函数的调用6.1.2函数的调用函数在定义完成后不会立刻执行,直到被程序调用时才会执行。函数名([参数列表])语法格式modify_weather('7月5日','23~40℃','优')
先定一个小目标!根据任务分析实现实例1:计算器6.1.3实例1:计算器在手机、电脑和平板电脑等设备中加入了计算器工具,计算器是一种执行数学运算的工具,可以大大简化数字计算的过程,它不仅能执行基本的算术运算,比如加减乘除,还能处理更复杂的计算,如指数、对数、三角函数等。本实例要求编写计算器程序,实现计算器的四则运算功能。6.1.3实例1:计算器定义用于实现计算器功能的函数,并接收两个参数。在定义的函数内接收要使用的运算符号。判断用户输入的运算符号,并执行相应的计算功能。定义两个变量接收要计算的数字。调用定义的函数,并将要计算的数字作为参数传入。实现思路6.1.3实例1:计算器在Chapter06项目中创建01_calc.py文件。在01_calc.py中编写代码。运行01_calc.py文件。实现步骤6.1.3实例1:计算器函数的参数传递6.2
先定一个小目标!掌握参数的传递方式,能够通过位置参数传递的方式向函数内部传递数据6.2.1位置参数传递位置参数传递调用函数时,解释器默认会将函数的实参按照位置顺序依次传递给形式参数,即将第1个实参传递给第1个形参,将第2个实参传递给第2个形参,以此类推。需要注意的是,实参必须和定义函数时形参的数量和位置保持一致,否则解释器运行会出现异常信息,或者错误匹配实参与形参。6.2.1位置参数传递定义一个计算两数之商的函数division(),具体代码如下。defdivision(num_one,num_two):print(num_one)print(num_two)print(num_one/num_two)division(6,2)#6被传递给形参num_one,2被传递给形参num_two
6.2.1位置参数传递位置参数传递
先定一个小目标!掌握参数的传递方式,能够通过关键字参数传递的方式向函数内部传递数据6.2.2关键字参数传递关键字参数传递如果函数定义中有多个参数,记住每个参数的位置及其含义并不是一件容易的事,此时可以采用关键字参数进行传递。关键字参数传递指的是函数调用时通过“形参=实参”的格式将实参与形参相关联,根据形参的名称进行参数传递。6.2.2关键字参数传递假设当前有一个函数info(),该函数包含3个形参,具体代码如下。definfo(name,age,address):print(f'姓名:{name}')print(f'年龄:{age}')print(f'地址:{address}')#"小婷"被传递给形参name,23被传递给形参age,"山东"被传递给形参addressinfo(name="小婷",age=23,address="山东")6.2.2关键字参数传递关键字参数传递
先定一个小目标!掌握参数的传递方式,能够通过默认参数传递的方式向函数内部传递数据6.2.3默认参数传递默认参数传递定义函数时可以指定形参的默认值,调用函数时可以选择是否给带有默认值的形参传值。若没有给带有默认值的形参传值,直接使用参数的默认值;若给带有默认值的形参传值,则使用实参的值覆盖默认值。6.2.3默认参数传递定义一个有参数ip与port的函数connect(),为形参port指定默认值3306,示例代码如下。defconnect(ip,port=3306):print(f"连接地址为:{ip}")print(f"连接端口号为:{port}")print("连接成功")connect('127.0.0.1') #第一种,形参port使用默认值3306connect(ip='127.0.0.1',port=8080) #第二种,形参使用传入值80806.2.3默认参数传递默认参数传递
先定一个小目标!掌握参数的传递方式,能够通过参数打包传递的方式向函数内部传递数据6.2.4参数打包传递参数打包传递参数打包传递是指将多个实参打包成一个元组或字典,然后将元组或字典传递给函数的形参,这样做可以一次性传递多个实参,而不需要再逐个传递。如果想打包传递参数,则可以在定义函数时添加以符号“*”或“**”标识的形参*args和**kwargs,如果形参的前面加上符号“*”,那么它可以接收以元组形式打包的多个实参;如果形参的前面加上符号“**”,那么它可以接收以字典形式打包的多个实参。6.2.4参数打包传递6.2.4参数打包传递参数打包传递参数*args参数**kwargsdeftest(*args):print(args)#多个实参会在打包后被传递给形参test(11,22,33,44,55)定义一个形参为*args的函数。deftest(**kwargs):print(kwargs)#调用test()函数时传入多个关联了形参的实参test(a=11,b=22,c=33,d=44,e=55)定义一个形参为**kwargs的函数。参数打包传递值得一提的是,args和kwargs只是在函数定义中约定俗称的名称,可以使用其他名称,但符号“*”或“**”是必需的。另外,若函数定义的参数列表中同时包含带默认值的形参、带符号“*”或“**”的形参与其他形参,则需要将带符号“*”或“**”的形参放在末尾。6.2.4参数打包传递
先定一个小目标!掌握参数的传递方式,能够通过参数解包传递的方式向函数内部传递数据6.2.5参数解包传递参数解包传递如果函数在调用时接收的实参是元组,那么可以使用“*”将元组拆分成多个值,并将每个值按照位置参数传递的方式赋值给形参;如果函数在调用时接收的实参是字典,那么可以使用“**”将字典拆分成多个键值对,并将每个值按照关键字参数传递的方式赋值给与键名称对应的形参。6.2.5参数解包传递使用“*”对该元组执行解包使用“**”对该字典执行解包deftest(a,b,c,d,e):print(a,b,c,d,e)nums=(11,22,33,44,55)#使用“*”对该元组执行解包操作test(*nums)定义一个形参为*args的函数。deftest(a,b,c,d,e):print(a,b,c,d,e)nums={"a":11,"b":22,"c":33,"d":44,"e":55}#使用“**”对该字典执行解包test(**nums)定义一个形参为**kwargs的函数。6.2.5参数解包传递参数解包传递
先定一个小目标!根据任务分析实现实例2:商品折扣计算6.2.6实例2:商品折扣计算为了提高店铺的成交量,某店铺在经营五周年期间推出了优惠活动,具体活动要求如下:(1)购买满300元打九折。(2)用户办理会员卡可继续享受额外折扣九五折。(3)用户扫描二维码加入店铺粉丝群可继续享受任意一种折扣方式:①百分比折扣(percentage),具体折扣值为九八折;②固定金额折扣(amount),具体折扣值为10元。假设小明在这家店铺购买了329元的商品,他同时办理了会员卡并加入了粉丝群,选择了额外的百分比折扣。本实例要求编写程序,使用函数计算商品的折扣价格,并根据店员输入的商品价格、折扣率、额外折扣率、额外折扣类型和值计算折扣后的价格。6.2.6实例2:商品折扣计算使用列表保存价格信息。定义空列表用于保存用户选购商品的价格。接收输入的最大价格和最小价格。从价格列表中获取每个商品价格。判断商品价格区间。将商品价格进行排序。实现思路6.2.6实例2:商品折扣计算在Chapter06项目中创建06_discount.py文件。在06_discount.py中编写代码。运行06_discount.py文件。实现步骤6.2.6实例2:商品折扣计算变量作用域6.3
先定一个小目标!熟悉变量作用域,能够区分程序中的局部变量6.3.1局部变量局部变量局部变量是在函数内定义的变量,只在定义它的函数内生效。例如,在函数use_var()中定义一个局部变量name,分别在函数内部与函数外部访问局部变量name,示例代码如下。defuse_var():name='欲穷千里目,更上一层楼'#局部变量print(name)#在函数内部访问局部变量use_var()print(name)#在函数外部访问局部变量6.3.1局部变量程序在调用函数use_var()时,成功输出了局部变量name的值;程序在函数use_var()后访问局部变量name,出现错误信息,说明局部变量不能在函数外部使用。由此可知,局部变量只在函数内部有效。
先定一个小目标!熟悉变量作用域,能够区分程序中的局部变量6.3.2全局变量全局变量全局变量是在函数外部定义的变量,它在程序中任何位置都可以被访问。例如,定义一个全局变量count,分别在函数use_var()内部与函数use_var()外部访问全局变量count,示例代码如下。count=10#全局变量defuse_var():print(count)#在函数内部访问全局变量use_var()print(count)#在函数外部访问局部变量6.3.2全局变量全局变量函数中只能访问全局变量,但不能修改全局变量。若要在函数内部修改全局变量的值,需先在函数内使用关键字global进行声明,具体格式为“global全局变量名”。在use_var()函数中先使用关键字global声明全局变量,再修改全局变量的值,示例代码如下。count=10defuse_var():globalcount#声明全局变量count+=10#修改全局变量print(count)use_var()6.3.2全局变量
先定一个小目标!根据任务分析实现实例3:学生信息管理系统6.3.3实例3:学生信息管理系统学生信息管理系统是用于管理学生信息的管理软件,它具备学生信息的查找、修改、增加和删除功能,利用该系统可实现学生信息管理的电子化,提高信息管理效率。学生信息管理系统的功能菜单如图所示。6.3.3实例3:学生信息管理系统学生信息管理系统包含5个功能,每个功能都对应一个序号,用户可以选择序号执行相应的操作,具体如下。(1)添加学生信息:用户按照系统提示依次输入学生的姓名、性别和手机号,输入完成后会收到系统提示“添加成功!”的信息。(2)删除学生信息:用户按照系统提示输入学生对应序号,输入完成后会收到系统提示“删除成功!”的信息。(3)修改学生信息:用户按照系统提示先输入待修改学生的序号,再依次输入修改后的学生姓名、性别和手机号。若学生信息管理系统中还没有添加过学生信息,提示“学生信息表为空”。(4)显示所有学生信息:系统按照固定格式输出所有学生信息。(5)退出系统:退出学生信息管理系统。本实例要求编写程序,运用函数的知识实现具有上述功能的学生信息管理系统。6.3.3实例3:学生信息管理系统使用列表保存价格信息。定义空列表用于保存用户选购商品的价格。接收输入的最大价格和最小价格。从价格列表中获取每个商品价格。判断商品价格区间。将商品价格进行排序。实现思路6.3.3实例3:学生信息管理系统在Chapter06项目中创建03_stu_manage.py文件。在03_stu_manage.py中编写代码。运行03_stu_manage.py文件。实现步骤6.3.3实例3:学生信息管理系统函数的特殊形式6.4
先定一个小目标!掌握匿名函数的使用,能够运用匿名函数简化简单函数的定义6.4.1匿名函数匿名函数6.4.1匿名函数匿名函数顾名思义指的是没有名称的函数,它的函数体只能是单个表达式。Python中使用关键字lambda定义匿名函数。lambda[arg1[,arg2,.....argn]]:expression语法格式[arg1[,arg2,.....argn]]:表示匿名函数的参数。expression:是一个表达式。匿名函数6.4.1匿名函数VS普通函数普通函数需要使用函数名进行标识普通函数的函数体中可以有多条语句普通函数可以实现比较复杂的功能普通函数可以被其它程序使用匿名函数不需要使用函数名进行标识匿名函数的函数体只能是一个表达式匿名函数只能实现比较单一的功能匿名函数不能被其它程序使用匿名函数area=lambdaa,h:(a*h)*0.5print(area(3,4))为了方便使用匿名函数,应使用变量记录这个函数,此时变量名可以作为匿名函数的临时名称来调用函数,示例代码如下。匿名函数6.4.1匿名函数
先定一个小目标!根据任务分析实现实例4:商品销量排序6.4.2实例4:商品销量排序某电商平台统计了近一周内华为手机的销量情况,具体如表所示。6.4.2实例4:商品销量排序名称价格/元销量华为P604887.0210华为Mate40EPro4699.090华为nova10青春版1698.0102华为P50Pro3897.088华为畅享999.0152本实例要求编写程序,使用字典保存每部手机的基本信息,使用列表保存所有手机的基本信息,使用匿名函数定义排序规则,实现按销量对所有手机信息进行降序排序的功能。使用列表保存价格信息。定义空列表用于保存用户选购商品的价格。接收输入的最大价格和最小价格。从价格列表中获取每个商品价格。判断商品价格区间。将商品价格进行排序。实现思路6.4.2实例4:商品销量排序在Chapter06项目中创建04_sales_ranking.py文件。在04_sales_ranking.py中编写代码。运行04_sales_ranking.py文件。实现步骤6.4.2实例4:商品销量排序
先定一个小目标!掌握匿名函数的使用,能够运用匿名函数简化简单函数的定义6.4.3递归函数递归函数6.4.3递归函数递归是一个函数过程在定义或说明中直接或间接调用自身的一种方法,它通常把一个大型的复杂问题层层转化为一个与原问题相似,但规模较小的问题进行求解。如果一个函数中调用了函数本身,这个函数就是递归函数。递归函数6.4.3递归函数一、递归公式递归公式是递归求解过程中的归纳项,用于处理原问题以及与原问题规律相同的子问题。二、边界条件边界条件即终止条件,用于终止递归。递归函数6.4.3递归函数deffactorial(num):ifnum==1:return1else:returnnum*factorial(num-1)求阶乘的递归函数阶乘递归过程
先定一个小目标!根据任务分析实现实例5:失之毫厘,谬以千里6.4.5实例5:失之毫厘,谬以千里6.4.5实例5:失之毫厘,谬以千里下面以计算1.0和1.1的100次方为例,带领大家亲身感受到小错误的严重性。
我们无论是在生活还是在工作中,都应该对早期发现的小错误引起重视,绝不能放任不管,我们只有保持缜密、严谨的态度,不断地迭代,才能收获预期的结果。本实例要求编写程序,通过计算1.0和1.1的100次方的差来验证“失之毫厘,谬以千里”的道理。使用列表保存价格信息。定义空列表用于保存用户选购商品的价格。接收输入的最大价格和最小价格。从价格列表中获取每个商品价格。判断商品价格区间。将商品价格进行排序。实现思路6.4.5实例5:失之毫厘,谬以千里在Chapter06项目中创建05_recursion.py文件。在05_recursion.py中编写代码。运行05_recursion.py文件。实现步骤6.4.5实例5:失之毫厘,谬以千里常用的内置函数6.5
先定一个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商贸物流园建设可行性研究报告
- 人民医院改扩建建设项目可行性研究报告
- 《卖油翁故事情节》课件
- 《网络管理技术》课件
- 教学楼日常保洁服务合同
- 化工项目招投标部操作流程揭秘
- 装修公司卫生间卫生标准
- 全天候响应承诺书
- 旅游安全市场管理办法
- 太阳能发电工程劳务合同范本
- 全球健康智慧树知到答案章节测试2023年浙江大学
- 足球比赛结果预测模型
- 新疆维吾尔自治区2021定额建筑及装饰工程计算规则
- 遵守政治品德、职业道德、社会公德和家庭美德情况五篇
- 大酒店风险分级管控和隐患排查治理双重体系建设实施方案
- 四大名著《西游记》语文课件PPT
- 魏双林19年下三年级生命与健康考查方案
- GB/T 41818-2022信息技术大数据面向分析的数据存储与检索技术要求
- GB/T 24676-2009振动深松挖掘机
- GB/T 16474-2011变形铝及铝合金牌号表示方法
- GB/T 11376-2020金属及其他无机覆盖层金属的磷化膜
评论
0/150
提交评论