Python3基础教程第6章课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Python3基础教程第6章课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python3 基础教程 课件
- 资源描述:
-
1、Python3基础教程第2版 慕课版第6章 函数与模块本章主要内容:函数变量的作用域模块包6.1 函数本节主要内容:定义函数 调用函数 函数的参数 函数嵌套定义 lambda函数 递归函数 函数列表6.1.1 定义函数 def语句用于定义函数,其基本格式如下。def函数名(参数表):函数语句return返回值 参数和返回值都可省略,示例代码如下。def hello():#定义函数.print(Python你好).hello()#调用函数Python你好 hello()函数没有参数和返回值,它调用print()函数输出一个字符串。为函数指定参数时,参数之间用逗号分隔。下面的例子为函数定义两个参数
2、,并返回两个参数的和。def add(a,b):#定义函数.return a+b.add(1,2)#调用函数36.1.2 调用函数 调用函数的基本格式如下。函数名(参数表)在Python中,所有的语句都是解释执行的,不存在如C/C+中的编译过程。def也是一条可执行语句,它完成函数的定义。Python中函数的调用必须出现在函数的定义之后。在Python中,函数也是对象(function对象)。def语句在执行时会创建一个函数对象。函数名是一个变量,它引用def语句创建的函数对象。可将函数名赋值给变量,使变量引用同一个函数 def add(a,b):#定义函数.return a+b.add#直接
3、用函数名,可返回函数对象的内存地址 add(10,20)#调用函数30 x=add#将函数名赋值给变量 x(1,2)#通过变量调用函数36.1.3 函数的参数在函数定义的参数表中的参数称为形式参数,简称形参。调用函数时,参数表中提供的参数称为实际参数,简称实参。实参可以是常量、表达式或变量。实参是常量或表达式时,直接将常量或表达式计算结果传递给形参。在Python中,变量保存的是对象的引用,实参为变量时,参数传递会将实参对对象的引用赋值给形参。1参数的多态性多态是面向对象的一个特点,指不同对象执行同一个行为可能会得到不同的结果。同一个函数,传递的实际参数类型不同时,可获得不同的结果,体现了多态
4、性。def add(a,b):.return a+b#两个参数执行加法运算.add(1,2)#执行数字加法3 add(abc,def)#执行字符串连接abcdef add(1,2),(3,4)#执行元组合并(1,2,3,4)add(1,2,3,4)#执行列表合并1,2,3,42参数赋值传递 调用函数时会按参数的先后顺序,依次将实参传递给形参。例如,调用add(1,2)时,1传递给a,2传递给b。Python允许以形参赋值的方式,将实参传递给指定形参。def add(a,b):.return a+b.add(a=ab,b=cd)#通过赋值来传递参数abcd add(b=ab,a=cd)#通过赋值
5、来传递参数cdab 采用参数赋值传递时,因为指明了形参名称,所以参数的先后顺序已无关紧要。参数赋值传递的方式称为关键字传递。3参数传递与共享引用 def f(x):.x=100.a=10 f(a)a10从结果可以看出,将实参a传递给形参x后,在函数中重新赋值x,并不会影响到实参a。这是因为Python中的赋值是建立变量到对象的引用。重新赋值时,意味着形参引用了新的对象。4传递可变对象的引用当实参引用的是可变对象时,如列表、字典等,若在函数中修改形参,通过共享引用,实参也获得修改后的对象示例代码如下。def f(a):.a0=abc#修改列表第一个值.x=1,2 f(x)#调用函数,传递列表对象
6、的引用 x#变量x引用的列表对象在函数中被修改abc,2 如果不希望函数中的修改影响函数外的数据,应注意避免传递可变对象的引用。如果要避免列表在函数中被修改,可使用列表的拷贝作为实参 示例代码如下。def f(a):.a0=abc#修改列表第一个值.x=1,2 f(x:)#传递列表的拷贝 x#结果显示原列表不变1,2还可以在函数内对列表进行拷贝,调用函数时实参仍使用变量,示例代码如下。def f(a):.a=a:#拷贝列表.a0=abc#修改列表的拷贝.x=1,2 f(x)#调用函数 x#结果显示原列表不变1,25有默认值的可选参数 在定义函数时,可以为参数设置默认值。调用函数时如果未提供实参
7、,则形参取默认值,示例代码如下。def add(a,b=-100):#参数b默认值为-100.return a+b.add(1,2)#传递指定参数3 add(1)#形参b取默认值-99 应注意,带默认值的参数为可选参数,在定义函数时,应放在参数表的末尾。6接受任意个数的参数 在定义函数时,如果在参数名前面使用星号“*”,表示形参是一个元组,可接受任意个数的参数。调用函数时,可以不为带星号的形参提供数据 示例代码如下。def add(a,*b):.s=a.for x in b:#用循环迭代元组b中的对象.s+=x#累加.return s#返回累加结果.add(1)#不为带星号的形参提供数据,此时
8、形参b为空元组1 add(1,2)#求两个数的和,此时形参b为元组(2,)3 add(1,2,3)#求3个数的和,此时形参b为元组(2,3)6 add(1,2,3,4,5)#求5个数的和,此时形参b为元组(2,3,4,5)157必须通过赋值传递的参数Python允许使用必须通过赋值传递的参数。在定义函数时,带星号参数之后的参数必须通过赋值传递示例代码如下。def add(a,*b,c):.s=a+c.for x in b:.s+=x.return s.add(1,2,3)#形参c未使用赋值传递,出错Traceback(most recent call last):File,line 1,in
9、TypeError:add()missing 1 required keyword-only argument:c add(1,2,c=3)#形参c使用赋值传递6 add(1,c=3)#带星号参数可以省略4 在定义函数时,也可单独使用星号,其后的参数必须通过赋值传递 示例代码如下。def f(a,*,b,c):#参数b和c必需通过赋值传递.return a+b+c.f(1,b=2,c=3)66.1.4 函数嵌套定义 Python允许在函数内部定义函数,示例代码如下。def add(a,b):.def getsum(x):#在函数内部定义的函数,将字符串转换为Unicode码求和.s=0.for
10、 n in x:.s+=ord(n).return s.return getsum(a)+getsum(b)#调用内部定义的函数getsum.add(12,34)#调用函数202 注意,内部函数只能在函数内部使用。6.1.5 lambda函数lambda函数也称表达式函数,用于定义匿名函数。可将lambda函数赋值给变量,通过变量调用函数。lambda函数定义的基本格式如下。lambda参数表:表达式示例代码如下。add=lambda a,b:a+b#定义表达式函数,赋值给变量 add(1,2)#函数调用格式不变3 add(ab,ad)abadlambda函数非常适合定义简单的函数与def不同
11、,lambda的函数体只能是一个表达式可在表达式中调用其他的函数,但不能使用其他的语句示例代码如下。add=lambda a,b:ord(a)+ord(b)#在lambda表达式中调用其他的函数 add(1,2)996.1.6 递归函数 递归函数是指在函数体内调用函数本身。例如,下面的函数fac()实现计算阶乘。def fac(n):#定义函数.if n=0:#递归调用的终止条件.return 1.else:.return n*fac(n-1)#递归调用函数本身.fac(5)120 注意,递归函数必须在函数体中设置递归调用的终止条件。如果没有设置递归调用终止条件,程序会在超过Python允许的
12、最大递归调用深度后,产生RecursionError异常(递归调用错误)。6.1.7 函数列表因为函数是一种对象,所以可将其作为列表元素使用,然后通过列表索引来调用函数示例代码如下。d=lambda a,b:a+b,lambda a,b:a*b#使用lambda函数建立列表 d0(1,3)#调用第一个函数4 d1(1,3)#调用第二个函数3 也可使用def定义的函数来创建列表,示例代码如下。def add(a,b):#定义求和函数.return a+b.def fac(n):#定义求阶乘函数.if n=0:.return 1.else:.return n*fac(n-1)d=add,fac#建
13、立函数列表 d0(1,2)#调用求和函数3 d1(5)#调用求阶乘函数120 d=(add,fac)#建立包含函数列表的元组对象 d0(2,3)#调用求和函数5 d1(5)#调用求阶乘函数120Python还允许使用字典来建立函数映射,示例如下。d=求和:add,求阶乘:fac#用函数add和fac建立函数映射 d求和(1,2)#调用求和函数3 d求阶乘(5)#调用求阶乘函数1206.2 变量的作用域变量的作用域是变量的可使用范围,也称为变量的命名空间。在第一次给变量赋值时,Python创建变量,变量创建的位置决定了变量的作用域。本节主要内容:作用域分类 global语句 nonlocal语句
14、6.2.1 作用域分类 Python中变量的作用域可分为4种:内置作用域、文件作用域、函数嵌套作用域和本地作用域,如图所示 本地作用域:没有内部函数时,函数体为本地作用域。函数内通过赋值创建的变量、函数参数都属于本地作用域。函数嵌套作用域:包含内部函数时,函数体为函数嵌套作用域。文件作用域:程序文件(也称模块文件)的内部为文件作用域。内置作用域:Python运行时的环境为内置作用域,它包含了Python的各种预定义变量和函数。内置作用域和文件作用域可称为全局作用域。根据作用域的范围大小,作用域外部的变量和函数可以在作用域内使用;相反,作用域内的变量和函数不能在作用域外使用。根据作用域范围,通常
15、将变量名分为两种:全局变量和本地变量。在内置作用域和文件作用域中定义的变量和函数都属于全局变量。在函数嵌套作用域和本地作用域内定义的变量和函数都属于本地变量,本地变量也可称为局部变量。考察下面的代码:#文件作用域a=10#a是全局变量def add(b):#参数b是函数add内的本地变量 c=a+b#c是函数add内的本地变量,a是函数外部的全局变量 return cprint(add(5)#调用函数 该程序在运行过程中,会创建4个变量:a、b、c和add,a和add是文件作用域内的全局变量,b和c是函数add内部的本地变量。另外该程序还用到了print这个内置函数,它是内置作用域中的全局变量
16、。作用域外的变量与作用域内的变量名称相同时,以“本地”优先原则,此时外部的变量被屏蔽称为作用域隔离原则。a=10#赋值,创建全局变量a def show():.a=100#赋值,创建本地变量a.print(in show():a=,a)#输出本地变量a.show()in show():a=100 a#输出全局变量a106.2.2 global语句 在函数内部给变量赋值时,默认情况下该变量为本地变量。为了在函数内部给全局变量赋值,Python提供了global语句,用于在函数内部声明全局变量 示例代码如下。def show():.global a#声明a是全局变量.print(a=,a)#输出全
17、局变量a.a=100#给全局变量a赋值.print(a=,a)a=10 show()a=10a=100 a1006.2.3 nonlocal语句 作用域隔离原则同样适用于嵌套函数。在嵌套函数内使用与外层函数同名的变量时,若该变量在嵌套函数内没有被赋值,则该变量就是外层函数的本地变量 示例代码如下。def test():.a=10#创建test函数的本地变量a.def show():.print(in show(),a=,a)#使用test函数的本地变量a.show().print(in test(),a=,a)#使用test函数的本地变量a.test()in show(),a=10in tes
18、t(),a=10 修改上面的代码,在嵌套函数show()内为a赋值,代码如下。def test():.a=10#创建test函数的本地变量a.def show():.a=100#创建show函数的本地变量a.print(in show(),a=,a)#使用show函数的本地变量a.show().print(in test(),a=,a)#使用test函数的本地变量a.test()in show(),a=100in test(),a=10 如果要在嵌套函数内部为外层函数的本地变量赋值,Python提供了nonlocal语句。nonlocal语句与global语句类似,它声明变量是外层函数的本地变
19、量,示例代码如下。def test():.a=10#创建test函数的本地变量a.def show():.nonlocal a#声明a是test函数的本地变量.a=100#为test函数的本地变量a赋值.print(in show(),a=,a)#使用test函数的本地变量a.show().print(in test(),a=,a)#使用test函数的本地变量a.test()in show(),a=100in test(),a=1006.3 模块模块是一个包含变量、函数或类的程序文件。模块中也可包含其他的各种Python语句。本节主要内容:导入模块 导入时执行模块 用import还是from
20、重新载入模块 模块搜索路径 嵌套导入模块 查看模块对象属性 _name_属性和命令行参数 隐藏模块变量6.3.1 导入模块模块需要先导入,然后才能使用其中的变量、函数或者类等。可使用import或from语句导入模块,基本格式如下。import 模块名称import 模块名称 as新名称from 模块名称 import导入对象名称from 模块名称 import导入对象名称 as新名称from 模块名称 import*1import语句 import语句用于导入整个模块,可用as为导入的模块指定一个新名称。导入模块后,使用“模块名称.对象名称”格式来引用模块中的对象。import math#导
21、入模块 math.fabs(-5)#调用模块中的函数5.0 math.e#使用模块中的常量2.718281828459045 fabs(-5)#试图直接使用模块中的函数,出错Traceback(most recent call last):File,line 1,in NameError:name fabs is not defined import math as m#导入模块并指定新名称 m.fabs(-5)#通过新名称调用模块函数5.0 m.e#通过新名称使用模块常量2.7182818284590452from语句 from语句用于导入模块中的指定对象,导入的对象可直接使用,不需要使用模
22、块名称作为限定符,示例代码如下。from math import fabs#从模块导入指定函数 fabs(-5)5.0 from math import e#从模块导入指定常量 e2.718281828459045 from math import fabs as f1#导入时指定新名称 f1(-10)10.03from import*语句使用星号时,可导入模块顶层的所有全局变量和函数示例代码如下。from math import*#导入模块顶层的全局变量和函数 fabs(-5)#直接使用导入的函数5.0 e#直接使用导入的常量2.7182818284590456.3.2 导入时执行模块imp
展开阅读全文