Python语言实用教程第5章-函数与模块课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Python语言实用教程第5章-函数与模块课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 语言 实用教程 函数 模块 课件
- 资源描述:
-
1、 高级语言为降低编程的难度,通常将一个复杂的大问题分解成一系列更简单的小问题,然后将小问题继续划分成更小的问题,当问题细化为足够简单时,就可以通过编写函数、类等来分而治之了。Python语言的源程序往往由多个函数或类等组成,通过对函数或模块地调用实现特定的程序功能。Python语言不仅提供了极为丰富的系统函数与模块,还允许用户建立自已的函数与模块。学习重点和难点:函数和参数 变量作用域 函数的嵌套与递归 模块与包 学习本章后才可以真正开展模块化程序设计,编写功能程序的手段与方法将更多样更灵活。5.1 函数函数5.2 参数类型参数类型5.3 变量作用域变量作用域5.4 函数嵌套与递归函数嵌套与递
2、归5.5 模块模块5.6 命名空间命名空间5.7 包包5.8 应用实例应用实例 函数是组织好的,可重复使用的,用来函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重函数能提高应用的模块性,和代码的重复利用率。前面已经知道复利用率。前面已经知道Python提供了许多提供了许多内建函数,比如内建函数,比如print()。除此外,还可以自。除此外,还可以自己创建函数,这被叫做用户自定义函数。己创建函数,这被叫做用户自定义函数。5.1.1 函数定义与调用函数定义与调用5.1.2 形参与实参形参与实参1、定义一个函数定义一
3、个函数你可以定义一个由自己想要功能的函数,以下是简单的规则:1)函数代码块以def关键词开头,后接函数标识符名称和圆括号()。2)任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。3)函数的第一行语句可以选择性地使用文档字符串,用于存放函数说明。4)函数内容以冒号起始,并且统一缩进。Return表达式结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。可以将函数作为一个值赋值给指定变量。语法:语法:def def 函数名函数名(参数参数1,1,参数参数2,.,2,.,参数参数n):n):函数函数_ _文档字符串文档字符串 函数体(语句块)函数体
4、(语句块)return return 表达式表达式 2 2、函数调用、函数调用 定义一个函数只给了函数一个名称,指定了函数里包含的参数和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数来调用执行,也可以直接从Python提示符执行。如下例子定义并调用了printme()函数:def printme(string):#函数定义 打印任何传入的字符串 print(string)#下面实现2次函数调用 printme(我要调用用户自定义函数!);#我要调用用户自定义函数!printme(再次调用同一函数);#再次调用该函数 1、传值和传址的区别传值和传址的区别 传值就是传入一个参数的值,
5、传址就是传入一个参数的地址,也就是内存的地址(相当于指针)。它们的区别是如果函数里面对传入的参数重新赋值,函数外的全局变量是否相应改变,用传值传入的参数是不会改变的,用传址传入就会改变。2、Python中的参数传递(传址和传值)中的参数传递(传址和传值)Python是不允许程序员选择采用传值还是传址的。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传址的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值相当于传址。如果函数收到的是一个不可变对象(比如数字、字符串或者元组)的引用(其实也是对象地址!),就不能直接修改原始对象
6、相当于传值。所以Python的传值和传址是根据传入参数的类型来选择的。传值的参数类型:数字,字符串,元组(Immutable)等。传址的参数类型:列表,字典(Mutable)等调用函数时可使用的正式参数类型有:调用函数时可使用的正式参数类型有:1 1)必备参数;)必备参数;2 2)命名参数;)命名参数;3 3)缺省参数;)缺省参数;4 4)不定长参数。)不定长参数。下面分别来介绍。下面分别来介绍。5.2.1 必备参数必备参数5.2.2 命名参数命名参数5.2.3 默认值参数默认值参数5.2.4 可变长参数可变长参数5.2.5 匿名函数匿名函数5.2.6 几个特殊函数几个特殊函数5.2.7 re
7、turn return语句语句 必备参数须以正确的顺序传入函数。必备参数须以正确的顺序传入函数。调用时的数量必须和声调用时的数量必须和声明时的一样。明时的一样。调用调用printme()printme()函数,你必须传入函数,你必须传入2 2个参数,个参数,不然会出现语法不然会出现语法错误:错误:#可写函数说明可写函数说明def def printmeprintme(string,string2):(string,string2):打印任何传入的字符串打印任何传入的字符串 print(string+string2)print(string+string2)#调用调用printmeprintme
8、函数函数printmeprintme(How,are you!)#How are you!(How,are you!)#How are you!bars=(How,are you!);bars=(How,are you!);printmeprintme(*bars)#How are you!bars)#How are you!命名参数(或关键字参数)和函数调用关系紧密,调命名参数(或关键字参数)和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为数或者乱序传参,因为Python解释器能够用参数名匹配参
9、解释器能够用参数名匹配参数值。用命名参数调用数值。用命名参数调用printmeprintme()()函数:函数:以上函数调用输出结果:以上函数调用输出结果:def printme(string):打印任何传入的字符串 print(string)printme(string=My string)#调用printme函数 调用函数时,默认值(或缺省值)参数的值如调用函数时,默认值(或缺省值)参数的值如果没有传入,则被认为是默认值。下例会打印默认果没有传入,则被认为是默认值。下例会打印默认的的age,如果,如果age没有被传入:没有被传入:def def printinfoprintinfo(nam
10、e,age=35):#(name,age=35):#打印任何传入的字符串打印任何传入的字符串 print(Name:,name,Age,age)print(Name:,name,Age,age)#调用调用printinfoprintinfo函数函数printinfoprintinfo(age=50,name=(age=50,name=mikimiki)#Name:)#Name:mikimiki,Age 50,Age 50printinfoprintinfo(name=(name=mikimiki)#Name:)#Name:mikimiki,Age 35,Age 35 可能需要一个函数能处理比当
11、初声明时更多的参数。这些参可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,这些参数被包装进一个元组或一个字典。在数叫做不定长参数,这些参数被包装进一个元组或一个字典。在这些可变个数的参数之前,可以有零到多个普通的参数。基本语这些可变个数的参数之前,可以有零到多个普通的参数。基本语法如下:法如下:有星号(有星号(*)或()或(*)的变量名会以元组或字典形式存放所)的变量名会以元组或字典形式存放所有未命名的变量参数。有未命名的变量参数。*var_args_tuplevar_args_tuple在函数里当元组用,适在函数里当元组用,适合于不确定参数个数的时候,合于不确定参数个数
12、的时候,*var_args_dictvar_args_dict在函数里当字典在函数里当字典用,用于必须接收类似用,用于必须接收类似argarg=valval形式的不确定参数个数的时候。形式的不确定参数个数的时候。例如:例如:def printinfo(arg1,*vartuple):打印任何传入的参数 print(输出:);print(arg1)for var in vartuple:print(var)printinfo(10)#10#调用printinfo 函数printinfo(70,60,50)#70 60 50#分3行输出的 用用lambdalambda关键词能创建小型匿名函数。这种
13、函数省略了用关键词能创建小型匿名函数。这种函数省略了用defdef声声明函数的标准要求。明函数的标准要求。1 1)LambdaLambda函数能接收任何数量的参数但只能返回一个表达式的函数能接收任何数量的参数但只能返回一个表达式的值,同时只能包含命令或多个表达式。值,同时只能包含命令或多个表达式。2 2)匿名函数不能直接调用)匿名函数不能直接调用printprint,因为,因为lambdalambda需要一个表达式。需要一个表达式。3 3)lambdalambda函数拥有自己的名字空间,且不能访问自有参数列表函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。之外或全局名
14、字空间里的参数。4 4)虽然)虽然lambdalambda函数看起来只能写一行,却不等同于函数看起来只能写一行,却不等同于C C或或C+C+的内的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。lambda函数的语法函数的语法只包含只包含一个语句:一个语句:lambda arg1,arg2,.argn:expression例如:例如:sum=lambda arg1,arg2:arg1+arg2#调用调用sum函数函数 print(Value of total:,sum(10,20)#输出结果:输出结果:print(Va
15、lue of total:,sum(20,20)#输出结果:输出结果:再例如:再例如:lamb=lambda x:x,lambda x:x*2,lambda x:x*3,lambda x:x*4 for i in lamb:print(i(3),end=)#输出结果:输出结果:Python是支持多种范型的语言,可以进行所是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数:谓函数式编程,其突出体现在有这么几个函数:map、reduce、filter,具体使用详见书本,具体使用详见书本。return语句退出函数,其语法格式为:语句退出函数,其语法格式为:return 表达式表
16、达式 选择性地向调用方返回一个表达式。不带参数值的选择性地向调用方返回一个表达式。不带参数值的return语句返回语句返回None。之前的例子都没有示范如何返回数值,下例说明如何返之前的例子都没有示范如何返回数值,下例说明如何返回数值:回数值:def sum(arg1,arg2):#返回2个参数的和 total=arg1+arg2 print(Inside the function:,total)#Inside the function:30 return totaltotal=sum(10,20);#调用sum函数print(Outside the function:,total)#Outs
17、ide the function:30 注意:注意:返回的表达式可以是任意返回的表达式可以是任意Python允许的表达式允许的表达式,譬如可以是:譬如可以是:x1,x2,.xn、(x1,x2,.xn)x1,x2,.xn 或或x1,x2,.xn等多种形式,其中等多种形式,其中n=1。例如:。例如:def divide(a,b):q=a/b;r=a-q*b return q,r#这里这里 return q,r;return(q,r);return q,r;程序效果相同程序效果相同 x,y=divide(11,6)#可以明细接收print(x,y)#1 5xy=divide(11,6)#也可以整体接
18、收到一个变量中print(xy)#(1,5)一个程序的所有的变量并不是在哪个位置一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是都可以访问的。访问权限决定于这个变量是在哪里赋值的。变量的作用域决定了在哪一在哪里赋值的。变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:两种最基本的变量作用域如下:1 1)全局变量)全局变量 2 2)局部变量)局部变量5.3.1 局部变量局部变量5.3.2 全局变量全局变量 定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥定义在函数内部的变量拥有一个局部
19、作用域,定义在函数外的拥有全局作用域。有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都被个程序范围内访问。调用函数时,所有在函数内声明的变量名称都被加入到作用域中。如下实例:加入到作用域中。如下实例:total=0;#这是个全局变量这是个全局变量def sum(arg1,arg2):#返回2个参数的和 total=arg1+arg2;#total在这里是局部变量在这里是局部变量.print(Inside the function local total:,to
20、tal)#Inside the function local total:30 return total;sum(10,20);#调用sum函数print(Outside the function global total:,total)#Outside the function global total:0 在在python中,全局变量一般有两种定义与使用方式:中,全局变量一般有两种定义与使用方式:第第1 1种:是在一个单独的模块中定义好全局变量,然后种:是在一个单独的模块中定义好全局变量,然后在需要使用的全局模块中将定义的全局变量模块导入。在需要使用的全局模块中将定义的全局变量模块导入。g
21、lobal_list.py中的内容:GLOBAL_A=hello GLOBAL_B=worldtest.py中的内容:import global_list def tt():print(global_list.GLOBAL_A)if _name_=_main_:tt()#输出:第第2 2种:直接在当前的模块中定义好,然后直种:直接在当前的模块中定义好,然后直接在本模块中通过接在本模块中通过global声明,然后使用。声明,然后使用。global声明格式:声明格式:global var1,var2,.,varn。示例如下示例如下:SOLR_URL=http:/xxxx.orgdef tt():g
22、lobal SOLR_URL SOLR_URL=SOLR_URL+#aaif _name_=_main_:tt();print(SOLR_URL)#输出:如果一个函数在内部调用函数自身,这如果一个函数在内部调用函数自身,这个函数就是个函数就是递归函数递归函数。模块让你能够有逻辑地组织你的模块让你能够有逻辑地组织你的Python代码段。代码段。把相关的代码分配到一个模块里能让你的代码更好用把相关的代码分配到一个模块里能让你的代码更好用、更易懂。、更易懂。模块也是模块也是Python对象,具有随机的名字属性用来对象,具有随机的名字属性用来绑定或引用。简单地说,绑定或引用。简单地说,模块就是一个保存
23、了模块就是一个保存了PythonPython代码的文件代码的文件,其后缀名是,其后缀名是.py。模块能定义函数、类。模块能定义函数、类和变量。模块里也能包含可执行的代码。模块可以被和变量。模块里也能包含可执行的代码。模块可以被别的程序引入,以使用该模块中的函数等功能。这也别的程序引入,以使用该模块中的函数等功能。这也是使用是使用Python标准库的方法。标准库的方法。例如,一个叫做例如,一个叫做modulename的模块里的的模块里的Python代码一般都能在一个叫代码一般都能在一个叫modulename.py的的文件中找到。下例是个简单的模块文件中找到。下例是个简单的模块support.py
24、。def print_func(para):print(Hello:,para)下面是一个使用下面是一个使用Python标准库中模块的例子。标准库中模块的例子。import sys#Filename:using_sys.pyprint(命令行参数如下:)for i in sys.argv:print(i)print(The PYTHONPATH is,sys.path,n)5.5.1 导入模块导入模块5.5.2 标准库模块介绍标准库模块介绍 1、import 语句语句 想使用Python源文件,只需在另一个源文件里执行import语句,语法如下:import module1,module2,.
25、moduleN 当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块support.py,需要把命令放在脚本的顶端:import support#导入模块#现在可以调用模块里包含的函数了 support.print_func(Zara)#注意:这种导入模式,函数前注意:这种导入模式,函数前需要加需要加“模块名模块名.”输出结果:Hello:Zara 一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。2、fromimport 语句语句 Python的from语句让你从模块中
展开阅读全文