书签 分享 收藏 举报 版权申诉 / 65
上传文档赚钱

类型Python语言实用教程第5章-函数与模块课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3515345
  • 上传时间:2022-09-10
  • 格式:PPT
  • 页数:65
  • 大小:1.23MB
  • 【下载声明】
    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语句让你从模块中

    26、导入一个指定的部分到当前命名空间中。语法如下:from modname import name1,name2,.nameN 例如,要导入模块fib的fibonacci函数,使用如下语句:from fib import fibonacci 这个声明不会把整个fib模块导入到当前的命名空间中,它只会将fib里的fibonacci函数单个引入到执行这个声明的模块的全局符号表。这种导入模式,直接使用导入的函数名等项目名称,不需要这种导入模式,直接使用导入的函数名等项目名称,不需要加加“模块名模块名.”。3、fromimport*语句语句 把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用

    27、如下声明:from mod_name import*这提供一个简单方法来导入一个模块中的所有项目。然而这种声明不该被过多使用。这种导入模式,同样直接使用导入的函数名等这种导入模式,同样直接使用导入的函数名等项目名称,不需要加项目名称,不需要加“模块名模块名.”。4、定位模块、定位模块 当你导入一个模块,Python解析器对模块位置的搜索顺序是:1)当前目录。2)如果不在当前目录,Python则搜索在shell变量PYTH ONPATH下的每个目录。在Windows系统,典型的PYTHONPATH如下:set PYTHONPATH=c:Python20lib;在UNIX系统,典型的PYTHONP

    28、ATH如下:set PYTHONPATH=/usr/local/lib/Python 3)如果都找不到,Python会查看默认路径。UNIX下,默认路径一般为/usr/local/lib/Python/模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录、PYTHONPATH和由安装过程决定的默认目录。在交互式解释器中,输入以下代码:import sys sys.path 可输出模块搜索路径。注意:注意:在当前目录下若存在与要引入模块同名的文件,就会把要引入的模块屏蔽掉。了解了搜索路径的概念,就可以在脚本中修改sys.path来引入一些不在搜索路径中的模块。现在,在解

    29、释器的当前目录或者sys.path中的一个目录里面来创建一个fibo.py的文件,代码如下:然后进入Python解释器,使用下面的命令导入这个模块:import fibo 这样做并没有把直接定义在fibo中的函数名称写入到当前符号表里,只是把模块fibo的名字写到了那里。可以使用模块名称来访问函数:fibo.fib(1000)#1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 fibo.fib2(100)#1,1,2,3,5,8,13,21,34,55,89 fibo._name_#fibo 5、深入模块、深入模块 模块除了方法定义,还可以包括可执行

    30、的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。所以,模块的作者可以放心大胆的在模块内部使用这些全局变量,而不用担心错用其他用户的全局变量。6、_name_属性属性 一个模块被另一个程序第一次引入时,其主程一个模块被另一个程序第一次引入时,其主程序将运行。序将运行。如果想在模块被引入时,模块中的某一程序块不执行,可以用_name_属性来使该程序块仅在该模块自身运行时执行。#Filename:using_name.pyif _name_=_main_:print(程序自身在运行)else:pr

    31、int(程序来自另一模块)运行输出情况如下:python using_name.py 程序自身在运行 python import using_name 程序来自另一模块 说明说明:每个模块都有一个_name_属性的系统变量,当其值是_main_时,表明该模块自身在运行,否则是被引入,其值是模块所在的文件名字(不包括后面的.py)。Python本身带着一些标准的模块库,在 Python 库参考文档中。有些模块直接被构建在解析器里,这些虽然不是一些语言内置的功能,但是它却能很高效的使用,甚至是系统级调用也没问题。这些组件会根据不同的操作系统进行不同形式的配置,比如 winreg 这个模块就只会提供

    32、给 Windows 系统。应该注意到这有一个特别的模块 sys,它内置在每一个 Python 解析器中。变量 sys.ps1 和和 sys.ps2 定义了主提示符和副提示符所对应的字符串:Python 3.x Python 3.x标准模块库,详见:标准模块库,详见:https:/docs.py thon.org/3/py-modindex.html。命名空间(命名空间(Namespace)是从名字到对象的一个映射。)是从名字到对象的一个映射。大部分命名空间都是按大部分命名空间都是按Python中的字典来实现的。有一些常中的字典来实现的。有一些常见的命名空间:见的命名空间:built-in中的集

    33、合(中的集合(abs()函数等)、一个模块函数等)、一个模块中的全局变量等。中的全局变量等。从某种意义上来说,一个对象从某种意义上来说,一个对象(Object)的所有属性的所有属性(Attribute)也构成了一个命名空间。在程序执行期间,可能也构成了一个命名空间。在程序执行期间,可能(其实是肯定)会有多个名空间同时存在。不同命名空间的(其实是肯定)会有多个名空间同时存在。不同命名空间的创建创建/销毁时间也不同。此外,两个不同销毁时间也不同。此外,两个不同namespace中的两个中的两个相同名字的变量之间没有任何联系。相同名字的变量之间没有任何联系。5.6.1 命名空间的分类命名空间的分类5

    34、.6.2 命名空间的规则命名空间的规则 在一个在一个Python程序运行中,至少有程序运行中,至少有4个命名空间是存在个命名空间是存在的。直接访问一个变量可能在这四个命名空间中逐一搜索。的。直接访问一个变量可能在这四个命名空间中逐一搜索。1)Local(Inner Most)包含局部变量,比如一个函数包含局部变量,比如一个函数/方方法内部。法内部。2)Enclosing 包含了非局部包含了非局部(Non-Local)也非全局也非全局(Non-Global)的变量。的变量。比如两个嵌套函数,内层函数可能搜索外层函数的命名比如两个嵌套函数,内层函数可能搜索外层函数的命名空间,但该命名空间对内层函数

    35、而言既非局部也非全局。空间,但该命名空间对内层函数而言既非局部也非全局。3)Global(Next-To-Last)当前脚本的最外层,比如当前当前脚本的最外层,比如当前模块的全局变量。模块的全局变量。4)Built-in(Outter Most)Python _builtin_ 模块。包模块。包含了内建的变量含了内建的变量/关键字等。关键字等。1、命名空间与变量作用域、命名空间与变量作用域 作用域(作用域(Scope)是)是Python程序的一块文本区程序的一块文本区域。在该文本区域中,对命名空间是可以直接访问域。在该文本区域中,对命名空间是可以直接访问,而不需要通过属性来访问。作用域是定义程

    36、序该,而不需要通过属性来访问。作用域是定义程序该如何搜索确切地如何搜索确切地“名字名字-对象对象”的名空间的层级关系的名空间的层级关系。变量作用域可以简单理解为变量可直接访问的程。变量作用域可以简单理解为变量可直接访问的程序范围。序范围。那么,这么多的命名空间,那么,这么多的命名空间,Python是按什么顺是按什么顺序确定变量对应作用域的呢?序确定变量对应作用域的呢?著名的著名的“LEGB-rule”,即作用域的搜索顺序:,即作用域的搜索顺序:LocalEnclosingGlobalBuilt-in。意思是:当有一个变量在local域中找不到时,Python会找上一层的作用域,即enclosi

    37、ng域(该域不一定存在)。enclosing域还找不到的时候,再往上一层,搜索模块内的global域。最后,会在built-in域中搜索。对于最终没有搜索到时,Python会抛出一个NameError异常。作用域可以嵌套。比如模块导入时。这也是为什么不推荐使用 from a_module import*的原因,因为导入的变量可能被当前模块覆盖。变量是拥有匹配对象的名字(标识符)。命名空间是一变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称(键)和它们各自相应的对象(值)的字个包含了变量名称(键)和它们各自相应的对象(值)的字典。典。一个一个Python表达式可以访问局部命名空间

    38、和全局命名空表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。部变量会覆盖全局变量。每个函数都有自己的命名空间。类的方法的作用域规则每个函数都有自己的命名空间。类的方法的作用域规则和通常函数是一样的。和通常函数是一样的。Python会智能地猜测一个变量是局部的还是全局的,它会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。假设任何在函数内赋值的变量都是局部的。因此,如果要给全局变量在一个函数里赋值,必须使用因此,如果要给全局变量在一个函数里赋值,必须使

    39、用global语句。语句。global VarName的表达式会告诉的表达式会告诉Python,VarName是一是一个全局变量,这样个全局变量,这样Python就不会在局部命名空间里寻找这个就不会在局部命名空间里寻找这个变量了。变量了。2、dir()函数函数 dir()函数给出一个排好序的字符串列表,内容是一个模函数给出一个排好序的字符串列表,内容是一个模块里定义过的名字。块里定义过的名字。返回的列表容纳了在一个模块里定义的所有模块、变量返回的列表容纳了在一个模块里定义的所有模块、变量和函数。如下一个简单的实例:和函数。如下一个简单的实例:import math#导入内置导入内置math模块

    40、模块 content=dir(math);print(content);实例输出结果:实例输出结果:_doc_,_file_,_name_,acos,asin,atan,atan2,ceil,cos,cosh,degrees,e,exp,fabs,floor,fmod,frexp,hypot,ldexp,log,log10,modf,pi,pow,radians,sin,sinh,sqrt,tan,tanh 在这里,特殊字符串变量在这里,特殊字符串变量_name_指向模块的名字,指向模块的名字,_file_指向该模块的导入文件名。如果没有给定参数,那指向该模块的导入文件名。如果没有给定参数,那

    41、么么dir()函数会罗列出当前定义的所有名称。函数会罗列出当前定义的所有名称。3、globals()和和locals()函数函数 根据调用地方的不同,globals()和locals()函数可被用来返回全局和局部命名空间里的名字。如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名。如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字。两个函数的返回类型都是字典。所以名字们能用keys()函数摘取。4、reload()函数函数 当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。因此,如果你想重新执行模块里顶层部分的代码,可以用reload(

    42、)函数。该函数会重新导入之前导入过的模块。语法如下:reload(module_name)在这里,module_name要直接放模块的名字,而不是一个字符串形式。比如想重载hello模块,如下:reload(hello)。包是一个分层次的文件目录结构,它定包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等义了一个由模块及子包,和子包下的子包等组成的组成的Python的应用环境。的应用环境。5.7.1 包的概念包的概念5.7.2 包管理工具包管理工具 包是一种管理包是一种管理 Python 模块命名空间的形式,采用模块命名空间的形式,采用点模点模块名称块名称。比如一个模块的

    43、名称是。比如一个模块的名称是 A.B,那么他表示一个包那么他表示一个包 A中的子模块中的子模块 B。就好像使用模块的时候,不用担心不同模。就好像使用模块的时候,不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。也不用担心不同库之间的模块重名的情况。目录只有包含一个叫做目录只有包含一个叫做 _init_.py 的文件才会被认作是的文件才会被认作是一个包,主要是为了搜索有效模块时,减少搜索一些无效的一个包,主要是为了搜索有效模块时,减少搜索一些无效的目录路径。目录路径。Python Pytho

    44、n的包管理工具有:的包管理工具有:distutils、setuptools、distribute、setup.py、easy_install、easy_install和和pip等。这里简单介绍一下等。这里简单介绍一下setuptools、easy_install和和pip。在在python中中easy_install和和pip都是用来下载安装都是用来下载安装一个公共资源库一个公共资源库PyPI的相关资源包。但的相关资源包。但easy_install 有有很多不足:安装事务是非原子操作,只支持很多不足:安装事务是非原子操作,只支持 svn,没有提供没有提供卸载命令:安装一系列包时需要写脚本等等。

    45、而卸载命令:安装一系列包时需要写脚本等等。而pip是是easy_install的一个替换品,很好地解决了以上问题的一个替换品,很好地解决了以上问题,其其目标也非常明确:取代目标也非常明确:取代easy_install。1 1、Python Excel操作操作实例实例 Python包索引(PyPI,网址https:/pypi.python.org/pypi)是Python编程语言的软件库。至2017年9月PyPI收集有117188个包。其中能找到Python操作Excel需要使用的模块xlrd(xlrd-1.1.0-py2.py3-none-any.whl)、xlwt(xlwt-1.3.0-py

    46、2.py3-none-any.whl)、xlutils(xlutils-2.0.0-py2.py3-none-any.whl)等。安装可使用 pip install xlrd-1.1.0-py2.py3-none-any.whl等命令来完成,安装后操作Excel时需要先导入这些模块,操作示例如下:【例【例5-5】Excel写操作 写Excel的操作步骤分3步:1)打开Excel。若打开已存在的Excel文件进行写操作,写入的数据会覆盖以前的数据。2)获取sheet对象并指定sheet的名称。3)对Excel进行写入与保存操作。【例【例5-6】Excel读操作 读操作类似写操作的几个步骤,主要是

    47、写操作改为读操作,若读取的Excel文件不存在,则打开Excel报错。读取上面Excel保存数据的程序如下:import xlrddef readExcel():try:book=xlrd.open_workbook(student.xls)except Exception as e:print(error msg:,e)else:stu_list=;sheet=book.sheet_by_index(0)rows=sheet.nrows#获取Excel的总行数#循环读取每行数据,第0行是表头信息,所以从第1行读取数据 for row in range(1,rows):id=sheet.cel

    48、l(row,0).value#获取第row行的第0列数据 name=sheet.cell(row,1).value sex=sheet.cell(row,2).value#将id、name、sex添加到字典,若元素不存在则新增否则是更新 stu=;stuid=id;stuname=name;stusex=sex stu_list.append(stu)print(id,name,sex,end=/)#逐个输出 print(stu_list)#全部输出readExcel()输出结果:1.0 n1 men/2.0 n2 women/3.0 n3 men/id:1.0,name:n1,sex:men

    49、,id:2.0,name:n2,sex:women,id:3.0,name:n3,sex:men 2 2、本章应用实例、本章应用实例【例【例5-7】利用递归方法求利用递归方法求15!。def fun(i):if i=1:return 1 return i*fun(i-1)print(fun(15)【例【例5-8】利用递归函数,将所输入字符串,以相反顺序利用递归函数,将所输入字符串,以相反顺序打印出来。打印出来。def output(s,l):if l=0:return print(sl-1)output(s,l-1)s=input(Input a string:)l=len(s);output

    50、(s,l)【例例5-9】全局变量与局部变量的使用示例。【例例5-10】函数可变参数列表的使用示例。例5-10-2【例例5-11】利用递归函数来产生、输出杨辉三角形。【例例5-12】编写函数产生前40个斐波那契(Fibonacci)数列于数组中,并输出。【例例5-13】用递归方法求解斐波那契数列 【例例5-14】哥德巴赫猜想。哥德巴赫猜想是一个伟大的世界性的数学猜想,其基本思想是:任何一个大于2的偶数都能表示成为两个素数之和。这里可以编写程序实现验证哥德巴赫猜想对100以内的正偶数成立。分析分析:要验证哥德巴赫猜想对100以内的正偶数成立,可以将正偶数分解为两个数之和,再对这两个数分别判断,如果

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:Python语言实用教程第5章-函数与模块课件.ppt
    链接地址:https://www.163wenku.com/p-3515345.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库