版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容导读函数和模块是Python中代码组合和复用的两大核心机制。其中函数是一段可重复调用的代码块,主要用于封装特定功能,模块是一个包含Python代码的.py文件,主要用于将相关函数、类、变量等组织在一起。本章将对函数和模块的知识及应用方法进行介绍。目录Contents5.1函数的定义和调用5.2函数的参数传递5.3变量作用域5.4函数的返回值5.5函数的递归调用5.6模块的导入和分类5.7模块搜索路径5.8拓展练习5.1.1函数的定义在Python中,函数定义的语法如下:def函数名(参数列表)->返回类型注释:"""函数文档字符串(可选)"""
函数体代码
return返回值#可选5.1.2函数的调用定义函数后,需要进行调用才能使函数行使其功能。对于上面定义的greet函数,我们可以使用以下方式进行调用:defgreet(name):print(f"Hello,{name}!")greet("Li")执行上述代码,会输出Hello,Li!5.1.2函数的调用【例5-1】定义一个函数,求两个数的差并返回功能描述:通过定义一个函数subtract,计算两个数的差值并返回。defsubtract(a,b):"""返回两个数的差(a-b)"""returna-bresult=subtract(10,2)print(result)目录Contents5.1函数的定义和调用5.2函数的参数传递关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源5.3变量作用域5.4函数的返回值5.5函数的递归调用5.6模块的导入和分类5.7模块搜索路径5.8拓展练习5.2.1参数传递机制1.不可变类型(如整数、字符串、元组)作为参数对于不可变类型,当传递这些类型的值时,函数内部对这些值的任何修改都不会影响原始值,因为不可变类型的值在赋值时实际上是创建了新的对象。defchange_value(num):num=num+1print("Insidefunction:",num)
original_value=21change_value(original_value)print("Outsidefunction:",original_value)执行上述的代码,结果如下。Insidefunction:22Outsidefunction:215.2.1参数传递机制2.可变类型(如列表、字典)作为参数对于可变类型,情况就不同了。因为你传递的是一个指向实际对象的引用,所以函数内部对这些对象的修改会影响到原始对象。defmodify_list(lst):lst.append(51)print("Insidefunction:",lst)
original_list=[3,8,11]modify_list(original_list)print("Outsidefunction:",original_list)运行以上代码,结果如下。Insidefunction:[3,8,11,51]Outsidefunction:[3,8,11,51]5.2.1参数传递机制3.传递引用本身的副本重要的是要理解,尽管我们传递的是引用的拷贝,但这个拷贝仍然指向原始对象。然而,如果我们尝试重新赋值这个引用,它不会影响到外部的原始引用。defreassign_list(lst):lst=[64,52,37]print("Insidefunction:",lst)
original_list=[7,5,13]reassign_list(original_list)print("Outsidefunction:",original_list)运行以上代码,结果如下。Insidefunction:[64,52,37]Outsidefunction:[7,5,13]5.2.2参数传递类型Python函数中参数传递的方式有很多种,主要有位置参数、关键字参数、默认值参数、*包裹位置参数、**包裹关键字参数等等。1. 位置参数这是最常见的参数类型,函数调用时根据函数定义的形参位置传递实参,将形参和实参顺序关联。【例5-2】输出某人最喜欢的水果(位置参数)功能描述:通过位置参数实现输出某人最喜欢的水果。deffavorite_fruit(name,fruit):"""输出某人最喜欢的水果"""print(f"{name}最喜欢的水果是{fruit}")#通过位置参数调用函数favorite_fruit("许慎","橙子")#输出:许慎最喜欢的水果是橙子favorite_fruit("嘉嘉","西瓜")#输出:嘉嘉最喜欢的水果是西瓜5.2.2参数传递类型2.关键字参数关键字参数允许显式地指定参数名称来传递值,并允许参数的顺序与函数定义中的顺序不同,这增加了代码的可读性。【例5-3】输出某人最喜欢的水果(关键字参数)功能描述:通过关键字参数实现输出某人最喜欢的水果。deffavorite_fruit(name,fruit):"""输出某人最喜欢的水果"""print(f"{name}最喜欢的水果是{fruit}")#通过关键字参数调用函数favorite_fruit(name="许慎",fruit="橙子")favorite_fruit(fruit="西瓜",name="嘉嘉")5.2.2参数传递类型3.默认值参数在函数定义中,可以为参数指定默认值。如果在函数调用时没有提供这些参数的值,就会使用默认值。【例5-4】输出某人最喜欢的水果(默认值参数)功能描述:通过默认值参数实现输出某人最喜欢的水果。deffavorite_fruit(name,fruit="西瓜"):"""输出某人最喜欢的水果(若未指定水果,默认喜欢西瓜)"""print(f"{name}最喜欢的水果是{fruit}")#调用示例favorite_fruit("许慎")favorite_fruit("嘉嘉")5.2.2参数传递类型4. 包裹位置参数当想要传递一个可变数量的位置参数给一个函数时,可以使用*操作符来“包裹”这些参数。在函数内部,这些参数被当作一个元组来处理。【例5-5】求任意多个数的和功能描述:通过包裹位置参数实现求任意多个数的和。defsum_numbers(*args):returnsum(args)total=sum_numbers(3,5,8,7)#args为(3,5,8,7)print(total)total=sum_numbers(11,7)#args为(11,7)print(total)5.2.2参数传递类型5.包裹关键字参数类似地,如果想要传递一个可变数量的关键字参数,可以使用**操作符来“包裹”这些参数。在函数内部,这些参数被当作一个字典来处理。【例5-6】收集并打印用户信息功能描述:通过包裹关键字参数实现收集并打印用户信息。defshowinfo(**args):forkey,valueinargs.items():print(f"{key}={value}")showinfo(id='0010',name='李杰',age=23,grade='大四')5.2.2参数传递类型6.解包裹位置参数如果在调用函数时已经有一个列表或元组,并且想要将这些元素作为单独的位置参数传递给函数,可以使用*操作符来“解包裹”它们。【例5-7】解包位置参数并计算数字之和功能描述:通过解包位置参数实现计算数字之和。defaddnum(a,b,c):returna+b+ctuple1=(3,8,16)print(addnum(*tuple1))list1=[11,17,33]print(addnum(*list1))5.2.2参数传递类型7.解包裹关键字参数如果有一个字典,其中包含了想要作为关键字参数传递给函数的键值对,可以使用**操作符来“解包裹”这个字典。【例5-8】解包关键字参数并计算数字之和功能描述:通过解包关键字参数实现计算数字之和。defaddnum(a,b,c):returna+b+cdict1={"a":11,"b":24,"c":37}print(addnum(**dict1))目录Contents5.1函数的定义和调用5.2函数的参数传递关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源5.3变量作用域5.4函数的返回值5.5函数的递归调用5.6模块的导入和分类5.7模块搜索路径5.8拓展练习5.3.1局部变量局部变量是在函数或类的方法内部定义的变量(函数参数也属于局部变量),这些变量仅在定义它的函数或方法内部可见,即它们的作用域是局部的。defmy_function():local_var="Iamlocal"#这是一个局部变量
print(local_var)
my_function()#输出:Iamlocalprint(local_var)#NameError:name'local_var'isnotdefined5.3.1局部变量运行上述代码,结果如下。IamlocalTraceback(mostrecentcalllast):File"F:/5-4.py",line6,in<module>print(local_var)NameError:name'local_var'isnotdefined5.3.2全局变量全局变量是在函数或方法外部定义的变量,这些变量在整个程序中都是可见的,即它们的作用域是全局的。使用全局变量的示例如下。global_var="Iamglobal"#这是一个全局变量defmy_function():print(global_var)#可以在函数内部访问全局变量my_function()print(global_var)运行上述代码,结果如下。IamglobalIamglobal5.3.2全局变量在函数内部,如果想修改全局变量的值,需要使用global关键字来声明该变量是全局的。否则,Python会将其视为一个新的局部变量。global_var="Iamglobal"defmy_function():globalglobal_var#声明要修改的是全局变量
global_var="Iwasmodifiedinsidethefunction"my_function()print(global_var)#输出:Iwasmodifiedinsidethefunction运行上述代码,结果如下。Iwasmodifiedinsidethefunction5.3.2全局变量当列表、字典等数据类型作为全局变量时,在函数内部可以对全局变量进行修改,不需要使用global关键字进行说明。stu_dict={"name":"李亚","id":20250010,"grade":"大四",}#定义全局变量stu_dictdefchange_grade():stu_dict["grade"]="大一"#在函数中修改全局变量的值change_grade()#调用函数print(stu_dict)运行结果如下。{'name':'李亚','id':20250010,'grade':'大一'}5.3.3关键字nonlocalnonlocal是一个用于处理嵌套函数中变量作用域的关键字,它允许内层函数修改外层(非全局)函数的变量,突破了局部变量的显示。defouter_func():print("outer_func()函数开始")definner_func():print("inner_func()函数开始")print("inner_func()函数结束")inner_func()print("outer_func()函数结束")outer_func()5.3.3关键字nonlocal运行结果如下。outer_func()函数开始inner_func()函数开始inner_func()函数结束outer_func()函数结束目录Contents5.1函数的定义和调用5.2函数的参数传递关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源5.3变量作用域5.4函数的返回值5.5函数的递归调用5.6模块的导入和分类5.7模块搜索路径5.8拓展练习5.4函数的返回值函数的返回值是指函数执行完毕后向调用者返回的数据,可以是空值、一个值或者多个值。返回值一般通过return语句实现,如果定义函数时没有return语句,或者只有return语句而没有返回数据,则认为函数返回值为None,即空值。【例5-9】函数没有返回值功能描述:函数返回值为None。defnon_value():print("该函数没有返回值")result=non_value()print(result)5.4函数的返回值【例5-10】函数只有一个返回值功能描述:函数只有一个返回值。defmultiply(a,b):returna*bresult=multiply(4,9)print(result)5.4函数的返回值【例5-11】函数有多个返回值功能描述:函数有多个返回值。defcal_digit(number):#计算百位数字:整除100得到百位数
hundreds=number//100#计算十位数字:先整除10去掉个位,再对10取余得到十位数
tens=number//10%10#计算个位数字:直接对10取余得到个位数
ones=number%10#返回包含三个数字的元组
returnhundreds,tens,ones5.4函数的返回值#以元组形式接收返回值result=cal_digit(356)print(result)#输出:(3,5,6)#解包返回值并分别赋值给三个变量x,y,z=cal_digit(356)print(x,y,z)#输出:356目录Contents5.1函数的定义和调用5.2函数的参数传递关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源5.3变量作用域5.4函数的返回值5.5函数的递归调用5.6模块的导入和分类5.7模块搜索路径5.8拓展练习5.5函数的递归调用递归是指函数通过直接或间接调用自身来解决问题,该函数称为递归函数。递归的目的是将大型复杂的问题转换为一个与之相似的但规模较小或者更为简单的问题。递归函数必须满足以下条件:(1)基本情况(BaseCase)(2)递归步骤(RecursiveStep)【例5-12】求n的阶乘功能描述:分别利用循环和递归求n的阶乘。5.5函数的递归调用deffactorial_iterative(n):result=1foriinrange(1,n+1):result*=ireturnresultdeffactorial_recursive(n):#基本情况:n=0或1时返回1ifn==0orn==1:return1#递归步骤:n!=n×(n-1)!else:5.5函数的递归调用returnn*factorial_recursive(n-1)#示例print(factorial_recursive(6))print(factorial_iterative(6))目录Contents5.1函数的定义和调用5.2函数的参数传递关注微信公众号DSSF007,回复关键字“清华电脑学堂”获取更多资源5.3变量作用域5.4函数的返回值5.5函数的递归调用5.6模块的导入和分类5.7模块搜索路径5.8拓展练习5.6.1模块的导入导入模块有两种方法,下面进行具体介绍。1.import模块名采用“import模块名”导入模块时,使用模块中的变量或者函数时,语法格式如下。5.6.1模块的导入Python中的内置模块random主要用于生成随机数,其中的常用函数如表5.6.1模块的导入2.from模块名import…在使用import语句导入模块时,每执行一条import语句都会创建一个新的命名空间(namespace),并且在该命名空间中执行与.py文件相关的所有语句。在执行时,需要在变量、函数名前加上“模块名”作为前缀。如果不想在每次导入模块时都创建一个新的命名空间,则可以使用“from模块名import…”将具体的定义导入当前的命名空间。(1)from模块名import*(2)from模块名import变量,函数5.6.1模块的导入Python内置模块math中定义了很多和数学相关的函数,假如现在你只想使用此模块中的sqrt()函数求一个数的平方根,则可以如下使用导入语句。#导入random模块importrandom#调用random模块中的randint()函数输出一个[2,20]之间的随机整数print(random.randint(2,20))#输出一个[2,19)之间步长为3的随机整数print(random.randrange(2,20,3))运行结果如下。2115.6.2模块的分类根据来源和用途,可以将模块分为不同的类型,如内置模块、标准库模块等。1.内置模块(Built-inModules)这些模块是Python解释器的一部分,提供了一些基本的和常用的功能。例如:sys(与Python解释器交互)、os(与操作系统交互)、math(数学函数)等。2.标准库模块(StandardLibraryModules)这些模块是Python官方提供的,并且随着Python一起安装。它们提供了广泛的函数和类,用于各种常见的编程任务。5.6.2模块的分类3.第三方库(Third-partyLibraries)这些模块不是Python官方提供的,而是由其他开发者或组织创建的。它们通常提供了特定的功能或工具,用于解决特定的问题或领域。例如:NumPy(数值计算)、Pandas(数据处理和分析)、Django(Web开发框架)等。4.自定义模块(CustomModules)这些模块是用户自己编写的Python文件,通常包含一些特定的函数、类或数据。自定义模块可以用于组织代码、重用代码或提供特定的功能。自定义模块可以通过import语句导入到其他Python脚
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026万科面试题目及答案
- 2026物流企业小组面试题及答案
- 2026消费调研面试题及答案
- (2026年)光伏电站转让合同协议书
- 2025-2026学年河北省衡水市冀州市四下数学期中达标测试试题含答案
- 2025-2026学年河北省张家口市阳原县数学三年级下学期期末监测模拟试题含解析
- 绿色采购制度ESG建设困境与供应链优化-基于绿色采购企业案例的实证分析
- 2026-2027学年潮州市高三下学期联考物理试题(含答案解析)
- 2026-2027学年漳州市高三第二次模拟考试物理试卷(含答案解析)
- 跨境智算中心电算协同中跨国算力负载与绿电曲线智能匹配-基于国际算力-绿电匹配算法标准与智能调度优化协议规范分析
- 第01讲空间向量及其运算【秋季讲义】(人教A版2019选择性必修第一册)(原卷版+解析)
- 2026年长江存储校招测试题及答案
- 2026江苏南通市海门区招聘区镇(街道)专职安全巡查员第二批49人考试备考题库及答案详解
- 梯度压力袜用于静脉血栓栓塞症防治专家共识
- 工程与社会教学课件469
- 居家老人助浴服务安全作业指引手册
- 2026年危险化学品生产单位安全生产管理人员安全生产模拟考试题库及答案
- 高标准农田建设技术工作手册
- 火灾应急疏散避险技能培训
- 贡山政协志编写工作方案
- 魏家凉皮考勤制度
评论
0/150
提交评论