Python语言程序设计电子课件 项目四函数的应用 - 新能源汽车销售统计_第1页
Python语言程序设计电子课件 项目四函数的应用 - 新能源汽车销售统计_第2页
Python语言程序设计电子课件 项目四函数的应用 - 新能源汽车销售统计_第3页
Python语言程序设计电子课件 项目四函数的应用 - 新能源汽车销售统计_第4页
Python语言程序设计电子课件 项目四函数的应用 - 新能源汽车销售统计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目四:函数的应用—新能源汽车销售统计▍项目导读💡核心思想:函数是程序的基本功能单元,实现代码复用与逻辑分离。系统学习Python函数并应用于真实销售统计场景。🌍行业背景:全球能源转型加速,新能源汽车产业爆发式增长,对销售数据的智能化分析提出了更高要求。🎓学习价值:掌握函数式编程核心技能,培养系统化解决工程问题的能力,为投身绿色出行产业奠定基础。▍项目任务清单任务4.1·代码封装掌握函数定义与调用的语法,将基础逻辑封装为独立功能模块。任务4.2·信息传递灵活运用函数的参数机制,实现销售数据与统计函数间的高效交互。任务4.3·变量管理深入理解变量的命名空间和作用域,规范销售统计数据的定义与使用。任务4.4·模块化开发创建自定义模块与包,实现代码逻辑的分离,提升项目的可维护性。本项目学习目标知识目标●阐述函数定义、调用、参数类型与传递机制。●描述变量作用域、命名空间及模块与包的组织方法。●说明内置、标准库与自定义函数的区别。能力目标●能定义并调用函数完成销售数据的计算与统计,解决实际问题。●能运用模块化思想构建结构清晰、可维护且可重用的程序代码。素养目标●培养工程化思维与规范化、文档化的专业编程习惯。●树立以技术服务国家战略性新兴产业发展的责任感与使命感。任务4.1:运用函数的定义与调用完成代码封装核心概念:函数是程序的核心构建块🔍定义:封装特定功能的独立代码模块,可重复调用。🧩模块化设计:将复杂系统分解为多个功能模块,显著提升代码的复用性、可读性和可维护性。📚Python函数分类1.预定义函数(Built-in/Library)•内置函数:Python自带开箱即用,如print(),len(),input()

•标准库函数:需导入标准库使用,如math.sqrt(),random.randint()

•第三方库函数:需额外安装后使用,如pandas.read_csv()2.用户自定义函数(User-defined)•由开发者根据业务需求自行编写,用于封装特定的业务逻辑,实现功能定制化。4.1.1函数定义-语法结构标准语法格式(Python)def函数名([形式参数列表]):"""函数说明文档字符串"""函数体代码块[return[表达式]]def关键字函数定义的起始标识符,告诉Python接下来定义一个函数。函数名遵循Python标识符命名规则,见名知意,便于代码维护。形式参数(形参)括号内的变量声明,用于接收函数调用时传入的外部数据。文档字符串用三引号包裹,对函数功能、参数和返回值进行说明。函数体代码块实现函数核心功能的代码,必须保持统一的缩进格式。return语句可选语句,用于结束函数执行并向调用者返回结果。函数定义规范与注意事项语法结构完整性•以def关键字开头,后接函数名和圆括号()。•函数定义行末尾的冒号:必不可少,这是块结构的标志。•函数体内所有语句必须保持一致的缩进,通常为4个空格。文档字符串重要性•位于函数体首行,用三引号'''...'''包裹,支持多行书写。•清晰描述函数功能、参数含义、返回值类型及使用示例。•其他开发者可通过help(函数名)快速查看函数用法。返回语句的可选性•return语句用于结束函数执行并将结果返回给调用方。•不带表达式的`return`或无`return`语句,默认返回None。•仅执行动作而不产生结果的函数,可省略`return`以简化代码。案例分析:课程综合成绩计算函数函数功能定义该函数名为calculate_course_grade,核心目标是根据学生的三项关键指标,自动化计算并输出最终的课程综合成绩,将成绩计算的逻辑封装在一个可复用的模块中。核心逻辑拆解1.参数接收:支持传入作业成绩列表、期末考试分数、课堂参与度三个变量。

2.加权计算:按照不同权重(作业40%、考试50%、参与度10%)进行加权求和。

3.结果返回:对计算结果进行保留一位小数的四舍五入后,使用return语句返回最终成绩。calculate_grade.py4.1.2函数调用:激活函数的桥梁01基本原则先定义,后调用这是编写程序必须遵守的规则。

若顺序颠倒,程序将抛出错误:

NameError02标准语法格式函数名([实际参数列表])就像按下按钮,

激活预先定义好的功能逻辑。03关键语法要素函数名:必须与定义时完全一致,注意严格区分大小写。圆括号():调用操作的必要符号,无论是否有参数,都不可省略。实际参数(实参):传递给函数处理的具体数据值,数量和类型需与定义匹配。案例分析:学生考勤记录系统功能定义本程序模拟了一个基础的学生考勤系统。其核心目标是:接收学生的个人信息、课程信息以及考勤状态作为输入,将这些信息与当前系统时间整合,生成一份结构化的考勤记录,并返回该记录以便后续的使用或存储。Python实现代码#1.定义考勤记录函数defrecord_attendance(sid,c_code,status):#获取当前时间戳importdatetimenow=datetime.datetime.now().strftime("%Y-%m-%d%H:%M")returnf"[{now}]{sid}|{c_code}|{status}"#2.调用函数并输出结果res=record_attendance("2025001","CS101","Present")print(res)逻辑拆解01封装过程:

将“生成记录”的操作封装为函数,便于复用。02参数传递:

通过形参列表(sid,c_code等),实现外部数据向函数内部的动态输入。03结果返回:

函数处理完成后,使用return将生成的字符串结果回传给调用者。函数返回值的基本特性返回对象类型多样性•可以返回任意Python对象(数字、字符串、列表、字典等)。•甚至可以返回函数本身或类的实例对象。`return`语句的执行效果•函数内部一旦遇到`return`语句,会立即终止当前函数的执行。•将程序的控制权和返回结果一并交还给调用者。多值返回的元组封装•函数试图返回多个值时,Python会自动将这些值打包为一个元组。•调用方可以通过解包(Unpacking)语法方便地接收并分别赋值。课堂训练4.1:新能源汽车销量统计系统任务背景假设你是数据分析师,请统计2025年第一季度(1月-3月)各新能源汽车车型的销售情况,分析市场表现。编程实现要求1.定义函数calculate_monthly_sales():按月份汇总并输出各车型销量。

2.定义函数calculate_quarter_total():计算第一季度总销量。

3.定义函数calculate_average_sales():计算三个月的平均销量。

4.主程序调用以上函数,完整展示统计结果。思考时刻:

为什么要把代码拆分成多个函数?如何将一个复杂的统计任务分解为这些独立的功能模块?任务4.2:运用函数的参数完成销售信息传递💡核心概念:参数传递是函数与外部数据交互的核心机制形式参数(形参)在函数定义时声明的参数,

它是函数对外暴露的“接口”,

用于接收外部传入的数据。实际参数(实参)在调用函数时传递的具体数值或变量,

是真实传递给函数进行处理的“原材料”。参数传递机制在Python中,参数传递采用“传递对象引用”的方式,保证数据在函数内外的高效流转与交互。参数类型(1):位置参数💡核心定义与特点📝定义:Python中最基础、最常用的参数传递形式。函数调用时,传入的实参与函数定义时的形参,完全通过从左到右的“位置顺序”建立一一对应的映射关系。🎯特点:调用时,实参的数量必须严格等于形参数量,且传入顺序必须与形参顺序保持一致,缺一不可。避坑指南:一旦参数位置错位,数据含义会发生根本性错误,程序逻辑将偏离预期。💻代码示例演示#1.定义函数:形参按顺序排列

defregister_student(name,student_id,major):

print(f"姓名:{name},学号:{student_id},专业:{major}")#2.调用函数:实参按位置传递给形参

register_student("张三","2025001","计算机科学")参数类型(2):默认值参数核心定义在函数定义时为形参指定默认值。调用函数时若未向该参数传入实参,则函数自动使用其预设的默认值;若传入实参,则使用传入的值。语法格式deffunction_name(param1,param2=default_val):重要原则:右置原则默认值参数必须定义在所有非默认值(普通)参数的右侧。这是为了避免解释器在解析参数时产生歧义,保证传参逻辑清晰。❌错误:deffn(a=1,b):...✅正确:deffn(a,b=1):...代码实战示例defschedule(course,teacher,credit=2):print(f"课程:{course},教师:{teacher},学分:{credit}")schedule("Python编程","李老师")#省略学分,默认2分schedule("数据结构","王老师",3)#传入实参,使用3分参数类型(3):关键参数核心定义在函数调用时,通过显式指定“参数名=实参值”的形式传递数据。这种方式打破了“按位置传递”的严格限制,让传参逻辑更直观。主要特点1.可读性显著提升一眼就能明确每个值对应的参数含义,降低代码维护成本。2.位置不再受限参数顺序可以任意调整,无需严格匹配函数定义的参数列表顺序。代码案例#1.函数定义defborrow(bk_title,uid):print(bk_title,uid)#2.关键参数调用(顺序随意)borrow(uid="2025001",bk_title="Python编程")参数类型(4):可变长度参数args|打包为「元组」(Tuple)用于接收任意数量的「位置参数」,并自动将这些参数按顺序打包成一个不可变的元组进行处理。defcalculate_statistics(scores):#接收所有传入的数值参数kwargs|打包为「字典」(Dict)用于接收任意数量的「关键字参数」(key=value形式),并将其自动打包成一个键值对字典。defcollect_info(student_data):#接收姓名、年龄等字段核心应用场景在开发工具函数、通用接口或框架代码时,若无法预先确定用户会传入多少个参数,使用`*args`和`**kwargs`可以极大地提升函数的灵活性和复用性,避免为不同参数数量编写大量重复代码。4.2.2参数传递机制:传递对象引用核心原则:“传递对象引用”Python既非传统意义上的“值传递”,也非纯粹的“引用传递”,而是将对象的引用(内存地址)传递给函数参数。理解这一机制的关键在于区分对象本身是“可变”还是“不可变”。不可变对象(Immutable)•典型类型:整数(int)、字符串(str)、元组(tuple)•修改行为:在函数内尝试修改形参时,实际上会创建一个新的对象,形参指向新对象的内存地址。•最终结果:外部的原始实参对象不会受到任何影响。可变对象(Mutable)•典型类型:列表(list)、字典(dict)、集合(set)•修改行为:形参和实参指向内存中同一个对象,函数内对形参的操作直接作用于该对象本身。•最终结果:外部的原始实参会被同步修改。课堂训练4.2:新能源汽车销售信息登记系统任务背景假设你是某新能源汽车门店的数据管理员,需要编写程序来高效记录并分析每辆车的销售信息,实现数据处理自动化。关键信息维度•车辆基本信息:车型、颜色、续航里程等

•销售信息:成交价格、销售日期、客户姓名

•附加信息:赠送配件、保险服务等编程任务要求1.定义函数,接收数据并计算总销量和平均单价。

2.定义函数,整合数据生成格式化的月度销售报告。

3.调用上述函数,输出报告及简短总结。💡深度思考如何设计函数的参数,使其既能灵活处理车辆、销售这类固定必传信息,又能兼容赠送配件这类可选附加信息?

提示:回忆一下“默认参数”和“可变参数”的用法。任务4.3:变量的“身份”与“地盘”命名空间(Namespace)▍定义:一个将变量名映射到对象的系统,像一本“变量名-对象”的花名册。它明确了变量名字和它背后数据实体之间的一一对应关系。▍作用:解决代码中“变量叫什么,指向什么”的核心问题,避免在同一个上下文中出现命名冲突,保证名字的唯一性。作用域(Scope)▍定义:变量在代码中生效的“地理范围”,也就是变量在程序中的可访问性和生命周期边界。▍作用:解决“在哪里能访问这个变量”的问题,限制变量的作用范围,提高代码的安全性,同时也控制了内存资源的释放时机。命名空间的三种类型与查找顺序内置命名空间(Built-in)Python启动时自动创建,包含所有内置函数与类型,如print、len、str等。全局命名空间(Global)每个.py模块文件拥有一个,包含函数外部定义的变量、导入的模块及函数定义。局部命名空间(Local)函数被调用时动态创建的临时空间,包含内部变量与参数,函数结束后即销毁。🔍变量查找优先级:LEGB规则LLocal(局部)当前执行代码所在的

函数/方法内部EEnclosing(嵌套外层)闭包场景下,外部嵌套

函数的命名空间GGlobal(全局)当前.py模块文件

级别的命名空间BBuilt-in(内置)Python解释器预定义

的内建命名空间💡核心逻辑:查找过程是“单向不可逆”的。一旦在某一层级找到目标变量,查找过程立即停止;若直到最后一层都未找到,则抛出NameError异常。变量的作用域:局部与全局局部变量(LocalVariable)•定义位置:在函数内部进行定义和赋值。•作用范围:生命周期和作用域仅限于该函数内部,外部无法访问。•生命周期:函数执行结束后,会被系统自动回收,随即消亡。全局变量(GlobalVariable)•定义位置:在所有函数外部定义,独立于函数体之外。•作用范围:作用域涵盖整个代码模块或文件,生命周期贯穿程序始终。•访问规则:函数内部可直接读取,但直接赋值会创建同名的“局部变量”覆盖它。`global`与`nonlocal`关键字`global`关键字核心用途:在函数内部显式声明要修改的是全局作用域(GlobalScope)中的变量,而非创建同名的局部变量。#定义全局变量

school_motto="厚德强技"

defchange_motto():

globalschool_motto#声明修改全局变量

school_motto="创新求实"#修改生效

change_motto()

print(school_motto)#输出"创新求实"`nonlocal`关键字核心用途:在嵌套函数的内层函数中,声明要修改的是其外层函数的局部变量(闭包变量),而非全局或新建变量。defouter():

x=10#外层函数的局部变量

definner():

nonlocalx#声明修改外层变量

x=20

inner()

print(x)#输出20(变量已被修改)

outer()#执行函数任务4.4:运用自定义模块与包完成代码块分离痛点:代码“臃肿”难维护随着功能不断增加,所有代码堆砌在单个文件中,逻辑纠缠不清,修改一处容易引发多处错误,排查和迭代效率低下。模块(Module)单个.py文件,封装相关的函数、类和变量,实现功能独立。包(Package)包含__init__.py的目录,像文件夹一样组织管理多个模块。📂结构清晰🔄复用性高🤝团队协作🛠️易于维护💡核心思路:像搭乐高一样编程将复杂的系统拆解为一个个独立、可复用的“积木块”(模块),再把这些积木块分门别类收纳好(包)。最终通过简单的组合,就能快速构建出功能强大且结构稳固的程序大厦。创建与使用自定义模块01创建模块自定义模块本质上就是一个包含Python定义和语句的文件。只需创建一个.py后缀的文件即可。student_info.py#在文件中写入代码逻辑02整体导入importmodule_name导入整个模块对象使用方法:module_name.

function_name()需通过模块名访问其中的属性或函数,避免命名冲突。03按需导入frommoduleimport

func_name使用方法:function_name()直接调用函数,代码更简洁。适合仅需模块中特定功能时使用。04别名导入frommoduleimport

funcasalias使用方法:alias()为模块或函数起一个简短的“别名”,既方便书写,又能避免命名冲突。创建与使用包01/创建包1.创建目录:建立一个新文件夹,作为包的根目录,例如`school_management`。2.核心文件:在该目录下新建一个空文件,命名为`__init__.py`。这是标识目录为Python包的关键。3.添加模块:放入功能代码文件,如`student.py`、`course.py`,或继续添加子目录(子包)。02/导入模块frompkg.mod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论